From 1adf8e5d38ad1dd1212ccd755a53b106c32f16b5 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 4 Oct 2023 23:35:04 +0200 Subject: [PATCH 1/2] allow to select all media --- res/menu/profile_context.xml | 4 ++++ .../securesms/ProfileDocumentsAdapter.java | 6 ++++++ .../securesms/ProfileDocumentsFragment.java | 10 +++++++++- .../thoughtcrime/securesms/ProfileGalleryAdapter.java | 6 ++++++ .../securesms/ProfileGalleryFragment.java | 10 +++++++++- .../securesms/ProfileSettingsFragment.java | 1 + .../database/loaders/BucketedThreadMediaLoader.java | 11 +++++++++++ 7 files changed, 46 insertions(+), 2 deletions(-) diff --git a/res/menu/profile_context.xml b/res/menu/profile_context.xml index 408771636..2ac3d5dcd 100644 --- a/res/menu/profile_context.xml +++ b/res/menu/profile_context.xml @@ -31,4 +31,8 @@ + + diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java b/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java index 8830a4de5..c16f47c88 100644 --- a/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java +++ b/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java @@ -160,6 +160,12 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter { notifyDataSetChanged(); } + public void selectAll() { + selected.clear(); + selected.addAll(media.getAll()); + notifyDataSetChanged(); + } + public int getSelectedMediaCount() { return selected.size(); } diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java index 12eb90ab4..807f6411e 100644 --- a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java @@ -150,6 +150,10 @@ public class ProfileDocumentsFragment } } + private void updateActionModeTitle() { + actionMode.setTitle(String.valueOf(getListAdapter().getSelectedMediaCount())); + } + private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { ProfileDocumentsAdapter adapter = getListAdapter(); @@ -158,7 +162,7 @@ public class ProfileDocumentsFragment actionMode.finish(); actionMode = null; } else { - actionMode.setTitle(String.valueOf(adapter.getSelectedMediaCount())); + updateActionModeTitle(); setCorrectMenuVisibility(actionMode.getMenu()); } } @@ -271,6 +275,10 @@ public class ProfileDocumentsFragment case R.id.menu_resend: handleResendMessage(getListAdapter().getSelectedMedia()); return true; + case R.id.menu_select_all: + getListAdapter().selectAll(); + updateActionModeTitle(); + return true; } return false; } diff --git a/src/org/thoughtcrime/securesms/ProfileGalleryAdapter.java b/src/org/thoughtcrime/securesms/ProfileGalleryAdapter.java index f8a5d085d..483dc66c3 100644 --- a/src/org/thoughtcrime/securesms/ProfileGalleryAdapter.java +++ b/src/org/thoughtcrime/securesms/ProfileGalleryAdapter.java @@ -124,6 +124,12 @@ class ProfileGalleryAdapter extends StickyHeaderGridAdapter { notifyDataSetChanged(); } + public void selectAll() { + selected.clear(); + selected.addAll(media.getAll()); + notifyDataSetChanged(); + } + public int getSelectedMediaCount() { return selected.size(); } diff --git a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java b/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java index 8118f572b..4539bdd81 100644 --- a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java @@ -142,6 +142,10 @@ public class ProfileGalleryFragment } } + private void updateActionModeTitle() { + actionMode.setTitle(String.valueOf(getListAdapter().getSelectedMediaCount())); + } + private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { ProfileGalleryAdapter adapter = getListAdapter(); @@ -150,7 +154,7 @@ public class ProfileGalleryFragment actionMode.finish(); actionMode = null; } else { - actionMode.setTitle(String.valueOf(adapter.getSelectedMediaCount())); + updateActionModeTitle(); setCorrectMenuVisibility(actionMode.getMenu()); } } @@ -258,6 +262,10 @@ public class ProfileGalleryFragment case R.id.menu_resend: handleResendMessage(getListAdapter().getSelectedMedia()); return true; + case R.id.menu_select_all: + getListAdapter().selectAll(); + updateActionModeTitle(); + return true; } return false; } diff --git a/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java b/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java index 553cfab71..58cbb3754 100644 --- a/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java @@ -272,6 +272,7 @@ public class ProfileSettingsFragment extends Fragment menu.findItem(R.id.save).setVisible(false); menu.findItem(R.id.share).setVisible(false); menu.findItem(R.id.menu_resend).setVisible(false); + menu.findItem(R.id.menu_select_all).setVisible(false); mode.setTitle("1"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { diff --git a/src/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java b/src/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java index 9567845fd..57a7db296 100644 --- a/src/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java +++ b/src/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java @@ -118,6 +118,17 @@ public class BucketedThreadMediaLoader extends AsyncTaskLoader getAll() { + LinkedList messages = new LinkedList<>(); + for (TimeBucket section : TIME_SECTIONS) { + messages.addAll(section.records); + } + for (List records : OLDER.months.values()) { + messages.addAll(records); + } + return messages; + } + public int getSectionCount() { return (int)Stream.of(TIME_SECTIONS) .filter(timeBucket -> !timeBucket.isEmpty()) From 6775fa08add6f94f5cb58d6b8f2056e7ba5a382b Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 5 Oct 2023 00:39:27 +0200 Subject: [PATCH 2/2] update menu when select-all is triggered --- .../thoughtcrime/securesms/ProfileDocumentsFragment.java | 8 ++++---- .../thoughtcrime/securesms/ProfileGalleryFragment.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java index 807f6411e..054cf958d 100644 --- a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java @@ -150,8 +150,9 @@ public class ProfileDocumentsFragment } } - private void updateActionModeTitle() { + private void updateActionModeBar() { actionMode.setTitle(String.valueOf(getListAdapter().getSelectedMediaCount())); + setCorrectMenuVisibility(actionMode.getMenu()); } private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { @@ -162,8 +163,7 @@ public class ProfileDocumentsFragment actionMode.finish(); actionMode = null; } else { - updateActionModeTitle(); - setCorrectMenuVisibility(actionMode.getMenu()); + updateActionModeBar(); } } @@ -277,7 +277,7 @@ public class ProfileDocumentsFragment return true; case R.id.menu_select_all: getListAdapter().selectAll(); - updateActionModeTitle(); + updateActionModeBar(); return true; } return false; diff --git a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java b/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java index 4539bdd81..6fa61d3da 100644 --- a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java @@ -142,8 +142,9 @@ public class ProfileGalleryFragment } } - private void updateActionModeTitle() { + private void updateActionModeBar() { actionMode.setTitle(String.valueOf(getListAdapter().getSelectedMediaCount())); + setCorrectMenuVisibility(actionMode.getMenu()); } private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { @@ -154,8 +155,7 @@ public class ProfileGalleryFragment actionMode.finish(); actionMode = null; } else { - updateActionModeTitle(); - setCorrectMenuVisibility(actionMode.getMenu()); + updateActionModeBar(); } } @@ -264,7 +264,7 @@ public class ProfileGalleryFragment return true; case R.id.menu_select_all: getListAdapter().selectAll(); - updateActionModeTitle(); + updateActionModeBar(); return true; } return false;