Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.dapps.tododo.adapters;
- import android.content.Context;
- import android.graphics.drawable.GradientDrawable;
- import android.os.Handler;
- import android.os.Looper;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import android.widget.TextView;
- import androidx.annotation.NonNull;
- import androidx.recyclerview.widget.RecyclerView;
- import com.dapps.tododo.R;
- import com.dapps.tododo.helpers.ConstantsHelper;
- import com.dapps.tododo.helpers.OnActivityStateChangedForRecyclerHandler;
- import com.dapps.tododo.models.Task;
- import com.dapps.tododo.repository.TaskRepository;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.Date;
- import java.util.List;
- import java.util.Locale;
- public class MyDailyTasksRecyclerViewAdapter extends RecyclerView.Adapter<MyDailyTasksRecyclerViewAdapter.TaskViewHolder> {
- private static final int TASK_PASSED_LAYOUT = 1;
- private static final int TASK_LAYOUT = 2;
- // Constant for date format<
- private static final String DATE_FORMAT = "dd/MM/yyy";
- // Class variables for the List that holds task data and the Context
- private List<Task> tasksList;
- private final Context mContext;
- private ClickListener clickListeners;
- private final TaskRepository repository;
- private Handler someHandler;
- // Date formatter
- private final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.getDefault());
- // the adapter constructor
- public MyDailyTasksRecyclerViewAdapter(Context context) {
- mContext = context;
- repository = new TaskRepository(context);
- }
- @NonNull
- @Override
- public TaskViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- // Inflate the task_layout to a view
- View view;
- if (viewType == TASK_PASSED_LAYOUT){
- view = LayoutInflater.from(mContext)
- .inflate(R.layout.task_row_design_task_passed, parent, false);
- }else{
- view = LayoutInflater.from(mContext)
- .inflate(R.layout.task_row_design, parent, false);
- }
- return new TaskViewHolder(view);
- }
- @Override
- public void onBindViewHolder(@NonNull TaskViewHolder viewHolder, int position) {
- // RecyclerView.ViewHolder holder2;
- //
- // if (holder.getItemViewType() == TASK_PASSED_LAYOUT){
- // //TaskPassedViewHolder viewHolder = (TaskPassedViewHolder) holder;
- // holder2 = (TaskPassedViewHolder) holder;
- // }else{
- //
- // //TaskViewHolder viewHolder = (TaskViewHolder) holder;
- // holder2 = (TaskViewHolder) holder;
- //
- // }
- Task taskEntry = tasksList.get(position);
- String taskName = taskEntry.getTaskName();
- String taskTag = taskEntry.getTaskTag();
- int priority = taskEntry.getTaskPriority();
- String taskDate = taskEntry.getTaskDate();
- String taskTime = taskEntry.getTaskTime();
- boolean isCompleted = taskEntry.getIsCompleted();
- //Set values
- //Title
- viewHolder.taskTitle.setText(taskName);
- viewHolder.taskTitle.setSelected(true);
- //LAST THING I DESIGN LONG TEXT,DO THE SAME WITH TAG
- //Tag
- viewHolder.taskTag.setText(taskTag);
- //Time
- SimpleDateFormat formatter = new SimpleDateFormat(ConstantsHelper.DateTime.TIME_PATTERN_WITHOUT_SECONDS,Locale.getDefault());
- try {
- Date time = formatter.parse(taskTime);
- if (time != null){
- viewHolder.taskTime.setText(formatter.format(time));
- }else{
- viewHolder.taskTime.setText(taskTime);
- }
- } catch (ParseException e) {
- e.printStackTrace();
- }
- //Set Priority View Color
- GradientDrawable gradientDrawable = new GradientDrawable();
- gradientDrawable.setColor(priority);
- viewHolder.priorityView.setBackground(gradientDrawable);
- //Complete Icon
- if (!isCompleted){
- viewHolder.completeTaskButton.setImageResource(R.drawable.ok_outline_icon);
- }
- //OnClick Task
- viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- clickListeners.onItemClick(taskEntry, viewHolder.getAdapterPosition(), view);
- }
- });
- //OnLongClick Task
- viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View view) {
- clickListeners.onItemLongClick(taskEntry, viewHolder.getAdapterPosition(), view);
- return false;
- }
- });
- //CompleteTask Listener
- viewHolder.completeTaskButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- clickListeners.onTaskCompleteButtonClick(taskEntry, viewHolder.getAdapterPosition(), view);
- }
- });
- }
- @Override
- public int getItemCount() {
- if (tasksList == null) {
- return 0;
- }
- return tasksList.size();
- }
- public List<Task> getTasksList(){
- return tasksList;
- }
- public void setTasks(List<Task> taskEntries) {
- //tasksList = taskEntries;
- List<Task> taskListBeforeSort = new ArrayList<>(taskEntries);
- taskListBeforeSort.sort(new Comparator<Task>() {
- @Override
- public int compare(Task task, Task t1) {
- return task.getTaskTime().compareTo(t1.getTaskTime());
- }
- });
- tasksList = taskListBeforeSort;
- ArrayList<Task> listHolder = new ArrayList<>();
- for (int i=0; i<tasksList.size();i++){
- if (!tasksList.get(i).isTaskPassed()){
- listHolder.add(tasksList.get(i));
- }
- }
- if (!listHolder.isEmpty()){
- trackTaskPass(tasksList);
- }else{
- stopHandler();
- }
- notifyDataSetChanged();
- }
- private boolean isAllTasksPass(List<Task> list){
- ArrayList<Task> listHolder = new ArrayList<>();
- for (int i=0; i<list.size();i++){
- if (!list.get(i).isTaskPassed()){
- listHolder.add(list.get(i));
- }
- }
- return listHolder.isEmpty();
- }
- private void stopHandler() {
- if (someHandler != null){
- someHandler.removeCallbacksAndMessages(null);
- }
- }
- private void trackTaskPass(List<Task> tasksList) {
- SimpleDateFormat formatter = new SimpleDateFormat(ConstantsHelper.DateTime.TIME_PATTERN,Locale.getDefault());
- stopHandler();
- someHandler = new Handler(Looper.getMainLooper());
- someHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- String currentDateAndTime = formatter.format(new Date());
- if (!isAllTasksPass(tasksList)){
- for (int i=0; i<tasksList.size();i++){
- if (!tasksList.get(i).isTaskPassed()){
- checkIfTaskTimePass(tasksList,currentDateAndTime);
- }
- }
- Log.e("TAG", "run: " + " Current Time: "+ currentDateAndTime);
- someHandler.postDelayed(this,1000);
- }else{
- stopHandler();
- }
- }
- }, 10);
- }
- public void removeAtPosition(int position) {
- tasksList.remove(position);
- notifyItemRemoved(position);
- notifyItemRangeChanged(position, tasksList.size());
- }
- @Override
- public int getItemViewType(int position) {
- return tasksList.get(position).isTaskPassed() ? TASK_PASSED_LAYOUT : TASK_LAYOUT;
- }
- // Inner class for creating ViewHolders
- static class TaskViewHolder extends RecyclerView.ViewHolder {
- // Class variables for the task description and priority TextViews
- TextView taskTitle;
- TextView taskTime;
- TextView taskAMPM;
- TextView taskTag;
- View priorityView;
- ImageView completeTaskButton;
- public TaskViewHolder(View itemView) {
- super(itemView);
- taskTitle = itemView.findViewById(R.id.taskTitleTextView);
- taskTag = itemView.findViewById(R.id.taskTagTextView);
- taskTime = itemView.findViewById(R.id.taskTimeTextView);
- taskAMPM = itemView.findViewById(R.id.taskAMPMTextView);
- priorityView = itemView.findViewById(R.id.taskPriorityLineColorView);
- completeTaskButton = itemView.findViewById(R.id.taskCompleteOutlineButton);
- }
- }
- public interface ClickListener {
- void onItemClick(Task task, int position, View v);
- void onItemLongClick(Task task, int position, View v);
- void onTaskCompleteButtonClick(Task task, int position, View v);
- }
- public void setOnItemClickListener(ClickListener clickListeners) {
- this.clickListeners = clickListeners;
- }
- public void checkIfTaskTimePass(List<Task> taskList, String currentTime){
- SimpleDateFormat sdf = new SimpleDateFormat(ConstantsHelper.DateTime.TIME_PATTERN,Locale.getDefault());
- for (int i=0; i<taskList.size(); i++){
- String taskTime = taskList.get(i).getTaskTime();
- try {
- Date currentTimeDate = sdf.parse(currentTime);
- Date endTimeDate = sdf.parse(taskTime);
- if (endTimeDate.before(currentTimeDate)){
- taskList.get(i).setTaskPassed(true);
- repository.updateTask(taskList.get(i));
- notifyItemChanged(i);
- }
- } catch (ParseException ignored) {
- Log.e("TAG", "checkIfTaskTimePass: " + ignored.getMessage() );
- }
- }
- }
- public OnActivityStateChangedForRecyclerHandler registerActivityState() {
- return new OnActivityStateChangedForRecyclerHandler() {
- @Override
- public void onActivityPaused() {
- stopHandler();
- }
- };
- }
- }
Add Comment
Please, Sign In to add comment