From 7bba2dea979e9c86542ec8ebd55f6c0950d3025e Mon Sep 17 00:00:00 2001 From: Hans-Peter Lehmann Date: Wed, 10 Dec 2025 22:47:30 +0100 Subject: [PATCH] Move "select all" to overflow menu (#8147) No app seems to use the standard select all icon anymore, and users in my tests were confused. --- .../antennapod/ui/SelectableAdapter.java | 39 +++++++++++++------ .../episodeslist/EpisodeItemListAdapter.java | 22 ++++------- .../res/menu/multi_select_context_popup.xml | 11 ------ .../main/res/menu/multi_select_options.xml | 24 ++++++++++-- .../main/res/menu/opml_selection_options.xml | 6 +-- app/src/main/res/menu/transcript.xml | 3 +- .../src/main/res/drawable/ic_select_all.xml | 9 ----- .../src/main/res/drawable/ic_select_none.xml | 11 ------ 8 files changed, 59 insertions(+), 66 deletions(-) delete mode 100644 app/src/main/res/menu/multi_select_context_popup.xml delete mode 100644 ui/common/src/main/res/drawable/ic_select_all.xml delete mode 100644 ui/common/src/main/res/drawable/ic_select_none.xml diff --git a/app/src/main/java/de/danoeh/antennapod/ui/SelectableAdapter.java b/app/src/main/java/de/danoeh/antennapod/ui/SelectableAdapter.java index 2f3ed6ab7..245d31376 100644 --- a/app/src/main/java/de/danoeh/antennapod/ui/SelectableAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/ui/SelectableAdapter.java @@ -60,8 +60,8 @@ public abstract class SelectableAdapter exten @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { onSelectedItemsUpdated(); - toggleSelectAllIcon(menu.findItem(R.id.select_toggle), false); - return false; + toggleSelectAllIcon(menu); + return true; } @Override @@ -70,9 +70,30 @@ public abstract class SelectableAdapter exten boolean selectAll = selectedIds.size() != getItemCount(); shouldSelectLazyLoadedItems = selectAll; setSelected(0, getItemCount(), selectAll); - toggleSelectAllIcon(item, selectAll); + toggleSelectAllIcon(mode.getMenu()); onSelectedItemsUpdated(); return true; + } else if (item.getItemId() == R.id.select_all_above) { + int firstSelectedPosition = 0; + for (int i = 0; i < getItemCount(); i++) { + if (isSelected(i)) { + firstSelectedPosition = i; + break; + } + } + setSelected(0, firstSelectedPosition, true); + return true; + } else if (item.getItemId() == R.id.select_all_below) { + shouldSelectLazyLoadedItems = true; + int lastSelectedPosition = 0; + for (int i = getItemCount() - 1; i >= 0; i--) { + if (isSelected(i)) { + lastSelectedPosition = i; + break; + } + } + setSelected(lastSelectedPosition + 1, getItemCount(), true); + return true; } return false; } @@ -158,14 +179,10 @@ public abstract class SelectableAdapter exten return selectedIds.size(); } - private void toggleSelectAllIcon(MenuItem selectAllItem, boolean allSelected) { - if (allSelected) { - selectAllItem.setIcon(R.drawable.ic_select_none); - selectAllItem.setTitle(R.string.deselect_all_label); - } else { - selectAllItem.setIcon(R.drawable.ic_select_all); - selectAllItem.setTitle(R.string.select_all_label); - } + private void toggleSelectAllIcon(Menu menu) { + boolean allSelected = selectedIds.size() == getItemCount(); + menu.findItem(R.id.select_toggle).setTitle(allSelected + ? R.string.deselect_all_label : R.string.select_all_label); } protected void onSelectedItemsUpdated() { diff --git a/app/src/main/java/de/danoeh/antennapod/ui/episodeslist/EpisodeItemListAdapter.java b/app/src/main/java/de/danoeh/antennapod/ui/episodeslist/EpisodeItemListAdapter.java index 39d732153..50e3505f9 100644 --- a/app/src/main/java/de/danoeh/antennapod/ui/episodeslist/EpisodeItemListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/ui/episodeslist/EpisodeItemListAdapter.java @@ -204,28 +204,20 @@ public class EpisodeItemListAdapter extends SelectableAdapter - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/multi_select_options.xml b/app/src/main/res/menu/multi_select_options.xml index 5cb2b7602..656b68394 100644 --- a/app/src/main/res/menu/multi_select_options.xml +++ b/app/src/main/res/menu/multi_select_options.xml @@ -1,8 +1,26 @@ - + + + android:showAsAction="never" + app:showAsAction="never" /> + + + + + diff --git a/app/src/main/res/menu/opml_selection_options.xml b/app/src/main/res/menu/opml_selection_options.xml index 1b7bc9331..17bd75cd9 100644 --- a/app/src/main/res/menu/opml_selection_options.xml +++ b/app/src/main/res/menu/opml_selection_options.xml @@ -4,16 +4,14 @@ + custom:showAsAction="never"> + custom:showAsAction="never"> diff --git a/app/src/main/res/menu/transcript.xml b/app/src/main/res/menu/transcript.xml index d4d92bbda..1beb6faba 100644 --- a/app/src/main/res/menu/transcript.xml +++ b/app/src/main/res/menu/transcript.xml @@ -13,8 +13,7 @@ + app:showAsAction="never" /> - - diff --git a/ui/common/src/main/res/drawable/ic_select_none.xml b/ui/common/src/main/res/drawable/ic_select_none.xml deleted file mode 100644 index c2b3cd481..000000000 --- a/ui/common/src/main/res/drawable/ic_select_none.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - -