Guest User

Untitled

a guest
Aug 28th, 2022
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.52 KB | None | 0 0
  1. package com.dapps.tododo.adapters;
  2.  
  3. import android.content.Context;
  4. import android.graphics.drawable.GradientDrawable;
  5. import android.os.Handler;
  6. import android.os.Looper;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.ImageView;
  12. import android.widget.TextView;
  13.  
  14. import androidx.annotation.NonNull;
  15. import androidx.recyclerview.widget.RecyclerView;
  16.  
  17. import com.dapps.tododo.R;
  18. import com.dapps.tododo.helpers.ConstantsHelper;
  19. import com.dapps.tododo.helpers.OnActivityStateChangedForRecyclerHandler;
  20. import com.dapps.tododo.models.Task;
  21. import com.dapps.tododo.repository.TaskRepository;
  22.  
  23. import java.text.ParseException;
  24. import java.text.SimpleDateFormat;
  25. import java.util.ArrayList;
  26. import java.util.Comparator;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.Locale;
  30.  
  31. public class MyDailyTasksRecyclerViewAdapter extends RecyclerView.Adapter<MyDailyTasksRecyclerViewAdapter.TaskViewHolder> {
  32.  
  33.     private static final int TASK_PASSED_LAYOUT = 1;
  34.     private static final int TASK_LAYOUT = 2;
  35.  
  36.     // Constant for date format<
  37.     private static final String DATE_FORMAT = "dd/MM/yyy";
  38.  
  39.     // Class variables for the List that holds task data and the Context
  40.     private List<Task> tasksList;
  41.  
  42.     private final Context mContext;
  43.     private ClickListener clickListeners;
  44.     private final TaskRepository repository;
  45.  
  46.     private Handler someHandler;
  47.  
  48.     // Date formatter
  49.     private final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault());
  50.  
  51.     // the adapter constructor
  52.     public MyDailyTasksRecyclerViewAdapter(Context context) {
  53.         mContext = context;
  54.         repository = new TaskRepository(context);
  55.     }
  56.  
  57.     @NonNull
  58.     @Override
  59.     public TaskViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  60.         // Inflate the task_layout to a view
  61.         View view;
  62.  
  63.         if (viewType == TASK_PASSED_LAYOUT){
  64.             view = LayoutInflater.from(mContext)
  65.                     .inflate(R.layout.task_row_design_task_passed, parent, false);
  66.         }else{
  67.             view = LayoutInflater.from(mContext)
  68.                     .inflate(R.layout.task_row_design, parent, false);
  69.         }
  70.         return new TaskViewHolder(view);
  71.  
  72.     }
  73.  
  74.     @Override
  75.     public void onBindViewHolder(@NonNull TaskViewHolder viewHolder, int position) {
  76.  
  77. //        RecyclerView.ViewHolder holder2;
  78. //
  79. //        if (holder.getItemViewType() == TASK_PASSED_LAYOUT){
  80. //            //TaskPassedViewHolder viewHolder = (TaskPassedViewHolder) holder;
  81. //            holder2 = (TaskPassedViewHolder) holder;
  82. //        }else{
  83. //
  84. //            //TaskViewHolder viewHolder = (TaskViewHolder) holder;
  85. //            holder2 = (TaskViewHolder) holder;
  86. //
  87. //        }
  88.  
  89.  
  90.         Task taskEntry = tasksList.get(position);
  91.         String taskName = taskEntry.getTaskName();
  92.         String taskTag = taskEntry.getTaskTag();
  93.         int priority = taskEntry.getTaskPriority();
  94.  
  95.         String taskDate = taskEntry.getTaskDate();
  96.         String taskTime = taskEntry.getTaskTime();
  97.  
  98.         boolean isCompleted = taskEntry.getIsCompleted();
  99.  
  100.         //Set values
  101.  
  102.         //Title
  103.         viewHolder.taskTitle.setText(taskName);
  104.         viewHolder.taskTitle.setSelected(true);
  105.         //LAST THING I DESIGN LONG TEXT,DO THE SAME WITH TAG
  106.  
  107.         //Tag
  108.         viewHolder.taskTag.setText(taskTag);
  109.  
  110.         //Time
  111.         SimpleDateFormat formatter = new SimpleDateFormat(ConstantsHelper.DateTime.TIME_PATTERN_WITHOUT_SECONDS,Locale.getDefault());
  112.         try {
  113.             Date time = formatter.parse(taskTime);
  114.             if (time != null){
  115.                 viewHolder.taskTime.setText(formatter.format(time));
  116.             }else{
  117.                 viewHolder.taskTime.setText(taskTime);
  118.             }
  119.  
  120.         } catch (ParseException e) {
  121.             e.printStackTrace();
  122.         }
  123.  
  124.  
  125.         //Set Priority View Color
  126.         GradientDrawable gradientDrawable = new GradientDrawable();
  127.         gradientDrawable.setColor(priority);
  128.         viewHolder.priorityView.setBackground(gradientDrawable);
  129.  
  130.         //Complete Icon
  131.         if (!isCompleted){
  132.             viewHolder.completeTaskButton.setImageResource(R.drawable.ok_outline_icon);
  133.         }
  134.  
  135.         //OnClick Task
  136.         viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
  137.             @Override
  138.             public void onClick(View view) {
  139.                 clickListeners.onItemClick(taskEntry, viewHolder.getAdapterPosition(), view);
  140.             }
  141.         });
  142.  
  143.         //OnLongClick Task
  144.         viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
  145.             @Override
  146.             public boolean onLongClick(View view) {
  147.                 clickListeners.onItemLongClick(taskEntry, viewHolder.getAdapterPosition(), view);
  148.                 return false;
  149.             }
  150.         });
  151.  
  152.         //CompleteTask Listener
  153.         viewHolder.completeTaskButton.setOnClickListener(new View.OnClickListener() {
  154.             @Override
  155.             public void onClick(View view) {
  156.                 clickListeners.onTaskCompleteButtonClick(taskEntry, viewHolder.getAdapterPosition(), view);
  157.             }
  158.         });
  159.  
  160.  
  161.     }
  162.  
  163.     @Override
  164.     public int getItemCount() {
  165.         if (tasksList == null) {
  166.             return 0;
  167.         }
  168.         return tasksList.size();
  169.     }
  170.  
  171.     public List<Task> getTasksList(){
  172.         return tasksList;
  173.     }
  174.  
  175.     public void setTasks(List<Task> taskEntries) {
  176.         //tasksList = taskEntries;
  177.  
  178.         List<Task> taskListBeforeSort = new ArrayList<>(taskEntries);
  179.         taskListBeforeSort.sort(new Comparator<Task>() {
  180.             @Override
  181.             public int compare(Task task, Task t1) {
  182.                 return task.getTaskTime().compareTo(t1.getTaskTime());
  183.             }
  184.         });
  185.  
  186.         tasksList = taskListBeforeSort;
  187.         ArrayList<Task> listHolder = new ArrayList<>();
  188.  
  189.         for (int i=0; i<tasksList.size();i++){
  190.             if (!tasksList.get(i).isTaskPassed()){
  191.                 listHolder.add(tasksList.get(i));
  192.             }
  193.         }
  194.  
  195.         if (!listHolder.isEmpty()){
  196.             trackTaskPass(tasksList);
  197.         }else{
  198.             stopHandler();
  199.         }
  200.  
  201.         notifyDataSetChanged();
  202.     }
  203.  
  204.     private boolean isAllTasksPass(List<Task> list){
  205.  
  206.         ArrayList<Task> listHolder = new ArrayList<>();
  207.  
  208.         for (int i=0; i<list.size();i++){
  209.             if (!list.get(i).isTaskPassed()){
  210.                 listHolder.add(list.get(i));
  211.             }
  212.         }
  213.  
  214.         return listHolder.isEmpty();
  215.     }
  216.  
  217.     private void stopHandler() {
  218.         if (someHandler != null){
  219.             someHandler.removeCallbacksAndMessages(null);
  220.         }
  221.     }
  222.  
  223.     private void trackTaskPass(List<Task> tasksList) {
  224.         SimpleDateFormat formatter = new SimpleDateFormat(ConstantsHelper.DateTime.TIME_PATTERN,Locale.getDefault());
  225.  
  226.         stopHandler();
  227.  
  228.         someHandler = new Handler(Looper.getMainLooper());
  229.         someHandler.postDelayed(new Runnable() {
  230.             @Override
  231.             public void run() {
  232.                 String currentDateAndTime = formatter.format(new Date());
  233.  
  234.                 if (!isAllTasksPass(tasksList)){
  235.                     for (int i=0; i<tasksList.size();i++){
  236.                         if (!tasksList.get(i).isTaskPassed()){
  237.                             checkIfTaskTimePass(tasksList,currentDateAndTime);
  238.                         }
  239.                     }
  240.                     Log.e("TAG", "run: " + " Current Time: "+ currentDateAndTime);
  241.                     someHandler.postDelayed(this,1000);
  242.                 }else{
  243.                     stopHandler();
  244.                 }
  245.             }
  246.         }, 10);
  247.     }
  248.  
  249.     public void removeAtPosition(int position) {
  250.         tasksList.remove(position);
  251.         notifyItemRemoved(position);
  252.         notifyItemRangeChanged(position, tasksList.size());
  253.     }
  254.  
  255.     @Override
  256.     public int getItemViewType(int position) {
  257.         return tasksList.get(position).isTaskPassed() ? TASK_PASSED_LAYOUT : TASK_LAYOUT;
  258.     }
  259.  
  260.     // Inner class for creating ViewHolders
  261.     static class TaskViewHolder extends RecyclerView.ViewHolder {
  262.  
  263.         // Class variables for the task description and priority TextViews
  264.         TextView taskTitle;
  265.         TextView taskTime;
  266.         TextView taskAMPM;
  267.         TextView taskTag;
  268.         View priorityView;
  269.         ImageView completeTaskButton;
  270.  
  271.         public TaskViewHolder(View itemView) {
  272.             super(itemView);
  273.  
  274.             taskTitle = itemView.findViewById(R.id.taskTitleTextView);
  275.             taskTag = itemView.findViewById(R.id.taskTagTextView);
  276.             taskTime = itemView.findViewById(R.id.taskTimeTextView);
  277.             taskAMPM = itemView.findViewById(R.id.taskAMPMTextView);
  278.             priorityView = itemView.findViewById(R.id.taskPriorityLineColorView);
  279.             completeTaskButton = itemView.findViewById(R.id.taskCompleteOutlineButton);
  280.  
  281.         }
  282.  
  283.     }
  284.  
  285.     public interface ClickListener {
  286.         void onItemClick(Task task, int position, View v);
  287.         void onItemLongClick(Task task, int position, View v);
  288.         void onTaskCompleteButtonClick(Task task, int position, View v);
  289.     }
  290.  
  291.     public void setOnItemClickListener(ClickListener clickListeners) {
  292.         this.clickListeners = clickListeners;
  293.     }
  294.  
  295.  
  296.     public void checkIfTaskTimePass(List<Task> taskList, String currentTime){
  297.  
  298.         SimpleDateFormat sdf = new SimpleDateFormat(ConstantsHelper.DateTime.TIME_PATTERN,Locale.getDefault());
  299.  
  300.         for (int i=0; i<taskList.size(); i++){
  301.             String taskTime = taskList.get(i).getTaskTime();
  302.             try {
  303.                 Date currentTimeDate = sdf.parse(currentTime);
  304.                 Date endTimeDate = sdf.parse(taskTime);
  305.                 if (endTimeDate.before(currentTimeDate)){
  306.                     taskList.get(i).setTaskPassed(true);
  307.                     repository.updateTask(taskList.get(i));
  308.                     notifyItemChanged(i);
  309.                 }
  310.             } catch (ParseException ignored) {
  311.                 Log.e("TAG", "checkIfTaskTimePass: " + ignored.getMessage() );
  312.             }
  313.  
  314.         }
  315.  
  316.     }
  317.  
  318.     public OnActivityStateChangedForRecyclerHandler registerActivityState() {
  319.         return new OnActivityStateChangedForRecyclerHandler() {
  320.  
  321.             @Override
  322.             public void onActivityPaused() {
  323.                 stopHandler();
  324.             }
  325.  
  326.         };
  327.     }
  328. }
  329.  
Add Comment
Please, Sign In to add comment