diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-05-05 15:26:54 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-05-05 15:26:54 +0300 |
commit | f0b0fe24a1cb68f0019d3400ec6a981165d65f36 (patch) | |
tree | ed44c868bbff0ac8b307802bc565a1657d2a5a48 /app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeAdapter.java | |
parent | eb022fc23cb6ce4935dcd9b60b3eccca727422ce (diff) |
Flatten due type filter list
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeAdapter.java')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeAdapter.java | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeAdapter.java new file mode 100644 index 000000000..dab5bb9f7 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDueTypeAdapter.java @@ -0,0 +1,84 @@ +package it.niedermann.nextcloud.deck.ui.filter; + +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.Arrays; + +import it.niedermann.nextcloud.deck.databinding.ItemFilterDuetypeBinding; +import it.niedermann.nextcloud.deck.model.enums.EDueType; + +public class FilterDueTypeAdapter extends RecyclerView.Adapter<FilterDueTypeAdapter.DueTypeViewHolder> { + @NonNull + private final EDueType[] dueTypes = EDueType.values(); + private int selectedDueTypePosition; + @Nullable + private final SelectionListener<EDueType> selectionListener; + + @SuppressWarnings("WeakerAccess") + public FilterDueTypeAdapter(@NonNull EDueType selectedDueType, @Nullable SelectionListener<EDueType> selectionListener) { + super(); + this.selectedDueTypePosition = Arrays.binarySearch(dueTypes, selectedDueType); + this.selectionListener = selectionListener; + setHasStableIds(true); + notifyDataSetChanged(); + } + + @NonNull + @Override + public DueTypeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new DueTypeViewHolder(ItemFilterDuetypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull DueTypeViewHolder viewHolder, int position) { + viewHolder.bind(dueTypes[position]); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getItemCount() { + return dueTypes.length; + } + + class DueTypeViewHolder extends RecyclerView.ViewHolder { + private ItemFilterDuetypeBinding binding; + + DueTypeViewHolder(@NonNull ItemFilterDuetypeBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + void bind(final EDueType dueType) { + binding.dueType.setText(dueType.toString(binding.dueType.getContext())); + itemView.setSelected(dueTypes[selectedDueTypePosition].equals(dueType)); + + itemView.setOnClickListener(view -> { + final int oldSelection = selectedDueTypePosition; + if (dueTypes[selectedDueTypePosition].equals(dueType)) { + selectedDueTypePosition = Arrays.binarySearch(dueTypes, EDueType.NO_FILTER); + itemView.setSelected(false); + if (selectionListener != null) { + selectionListener.onItemSelected(EDueType.NO_FILTER); + } + notifyItemChanged(selectedDueTypePosition); + } else { + selectedDueTypePosition = Arrays.binarySearch(dueTypes, dueType); + itemView.setSelected(true); + if (selectionListener != null) { + selectionListener.onItemSelected(dueType); + } + } + notifyItemChanged(oldSelection); + }); + } + } +} |