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..054cf958d 100644 --- a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java @@ -150,6 +150,11 @@ public class ProfileDocumentsFragment } } + private void updateActionModeBar() { + actionMode.setTitle(String.valueOf(getListAdapter().getSelectedMediaCount())); + setCorrectMenuVisibility(actionMode.getMenu()); + } + private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { ProfileDocumentsAdapter adapter = getListAdapter(); @@ -158,8 +163,7 @@ public class ProfileDocumentsFragment actionMode.finish(); actionMode = null; } else { - actionMode.setTitle(String.valueOf(adapter.getSelectedMediaCount())); - setCorrectMenuVisibility(actionMode.getMenu()); + updateActionModeBar(); } } @@ -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(); + updateActionModeBar(); + 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..6fa61d3da 100644 --- a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java +++ b/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java @@ -142,6 +142,11 @@ public class ProfileGalleryFragment } } + private void updateActionModeBar() { + actionMode.setTitle(String.valueOf(getListAdapter().getSelectedMediaCount())); + setCorrectMenuVisibility(actionMode.getMenu()); + } + private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { ProfileGalleryAdapter adapter = getListAdapter(); @@ -150,8 +155,7 @@ public class ProfileGalleryFragment actionMode.finish(); actionMode = null; } else { - actionMode.setTitle(String.valueOf(adapter.getSelectedMediaCount())); - setCorrectMenuVisibility(actionMode.getMenu()); + updateActionModeBar(); } } @@ -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(); + updateActionModeBar(); + 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())