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())