From 7c0d084ffcc6a17ccac043a76f6640c89dea6272 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 8 May 2022 10:21:39 +0200 Subject: Automatically select lazy loaded items if necessary --- .../de/danoeh/antennapod/adapter/SelectableAdapter.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java index 43f749ff3..55669596b 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java @@ -20,6 +20,7 @@ abstract class SelectableAdapter extends Recy private final HashSet selectedIds = new HashSet<>(); private final Activity activity; private OnSelectModeListener onSelectModeListener; + boolean shouldSelectLazyLoadedItems = false; public SelectableAdapter(Activity activity) { this.activity = activity; @@ -34,6 +35,7 @@ abstract class SelectableAdapter extends Recy onSelectModeListener.onStartSelectMode(); } + shouldSelectLazyLoadedItems = false; selectedIds.clear(); selectedIds.add(getItemId(pos)); notifyDataSetChanged(); @@ -56,9 +58,10 @@ abstract class SelectableAdapter extends Recy @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { if (item.getItemId() == R.id.select_toggle) { - boolean allSelected = selectedIds.size() == getItemCount(); - setSelected(0, getItemCount(), !allSelected); - toggleSelectAllIcon(item, !allSelected); + boolean selectAll = selectedIds.size() != getItemCount(); + shouldSelectLazyLoadedItems = selectAll; + setSelected(0, getItemCount(), selectAll); + toggleSelectAllIcon(item, selectAll); updateTitle(); return true; } @@ -69,6 +72,7 @@ abstract class SelectableAdapter extends Recy public void onDestroyActionMode(ActionMode mode) { callOnEndSelectMode(); actionMode = null; + shouldSelectLazyLoadedItems = false; selectedIds.clear(); notifyDataSetChanged(); } @@ -147,7 +151,7 @@ abstract class SelectableAdapter extends Recy } } - private void updateTitle() { + void updateTitle() { if (actionMode == null) { return; } @@ -166,6 +170,10 @@ abstract class SelectableAdapter extends Recy } } + public boolean shouldSelectLazyLoadedItems() { + return shouldSelectLazyLoadedItems; + } + public interface OnSelectModeListener { void onStartSelectMode(); -- cgit v1.2.3 From 03220d07748d0908c4cf4e6b260ce828dc5ebaac Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 8 May 2022 10:55:05 +0200 Subject: Show correct total number for lazy loaded items --- .../antennapod/adapter/SelectableAdapter.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java index 55669596b..70d00cbff 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/SelectableAdapter.java @@ -15,12 +15,14 @@ import java.util.HashSet; /** * Used by Recyclerviews that need to provide ability to select items. */ -abstract class SelectableAdapter extends RecyclerView.Adapter { +public abstract class SelectableAdapter extends RecyclerView.Adapter { + public static final int COUNT_AUTOMATICALLY = -1; private ActionMode actionMode; private final HashSet selectedIds = new HashSet<>(); private final Activity activity; private OnSelectModeListener onSelectModeListener; boolean shouldSelectLazyLoadedItems = false; + private int totalNumberOfItems = COUNT_AUTOMATICALLY; public SelectableAdapter(Activity activity) { this.activity = activity; @@ -155,9 +157,17 @@ abstract class SelectableAdapter extends Recy if (actionMode == null) { return; } + int totalCount = getItemCount(); + int selectedCount = selectedIds.size(); + if (totalNumberOfItems != COUNT_AUTOMATICALLY) { + totalCount = totalNumberOfItems; + if (shouldSelectLazyLoadedItems) { + selectedCount += (totalNumberOfItems - getItemCount()); + } + } actionMode.setTitle(activity.getResources() .getQuantityString(R.plurals.num_selected_label, selectedIds.size(), - selectedIds.size(), getItemCount())); + selectedCount, totalCount)); } public void setOnSelectModeListener(OnSelectModeListener onSelectModeListener) { @@ -174,6 +184,14 @@ abstract class SelectableAdapter extends Recy return shouldSelectLazyLoadedItems; } + /** + * Sets the total number of items that could be lazy-loaded. + * Can also be set to {@link #COUNT_AUTOMATICALLY} to simply use {@link #getItemCount} + */ + public void setTotalNumberOfItems(int totalNumberOfItems) { + this.totalNumberOfItems = totalNumberOfItems; + } + public interface OnSelectModeListener { void onStartSelectMode(); -- cgit v1.2.3