Futsch1/medTimer

View on GitHub
app/src/main/java/com/futsch1/medtimer/overview/NextRemindersViewAdapter.java

Summary

Maintainability
A
0 mins
Test Coverage
package com.futsch1.medtimer.overview;

import android.os.HandlerThread;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;

import com.futsch1.medtimer.MedicineViewModel;
import com.futsch1.medtimer.ScheduledReminder;

public class NextRemindersViewAdapter extends ListAdapter<ScheduledReminder, NextRemindersViewHolder> {

    private final HandlerThread thread;
    private final MedicineViewModel medicineViewModel;

    public NextRemindersViewAdapter(@NonNull DiffUtil.ItemCallback<ScheduledReminder> diffCallback, MedicineViewModel medicineViewModel) {
        super(diffCallback);
        setHasStableIds(true);
        this.medicineViewModel = medicineViewModel;
        this.thread = new HandlerThread("UpdateNextReminder");
        this.thread.start();
    }

    @NonNull
    @Override
    public NextRemindersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return NextRemindersViewHolder.create(parent);
    }

    @Override
    public void onBindViewHolder(@NonNull NextRemindersViewHolder holder, final int position) {
        ScheduledReminder current = getItem(position);
        holder.bind(current, thread.getLooper(), medicineViewModel);
    }

    @Override
    public long getItemId(int position) {
        return getItem(position).reminder().reminderId;
    }

    public static class ScheduledReminderDiff extends DiffUtil.ItemCallback<ScheduledReminder> {

        @Override
        public boolean areItemsTheSame(@NonNull ScheduledReminder oldItem, @NonNull ScheduledReminder newItem) {
            return oldItem.reminder().reminderId == newItem.reminder().reminderId && oldItem.timestamp().equals(newItem.timestamp());
        }

        @Override
        public boolean areContentsTheSame(@NonNull ScheduledReminder oldItem, @NonNull ScheduledReminder newItem) {
            return oldItem.reminder().reminderId == newItem.reminder().reminderId && oldItem.timestamp().equals(newItem.timestamp()) &&
                    oldItem.reminder().amount.equals(newItem.reminder().amount);
        }
    }
}