diff --git a/CHANGELOG.md b/CHANGELOG.md index 96238884e..5d5c83e02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +* Allow to select multiple files for sending * Add notifications for missed calls ## v2.53.0 diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index db4a636e7..e3cd92ad7 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -441,32 +441,19 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity else mediaType = MediaType.IMAGE; setMedia(singleUri, mediaType); } else { - final ClipData multipleUris = data.getClipData(); - if (multipleUris != null) { - final int uriCount = multipleUris.getItemCount(); - if (uriCount > 0) { - ArrayList uriList = new ArrayList<>(uriCount); - for (int i = 0; i < uriCount; i++) { - uriList.add(multipleUris.getItemAt(i).getUri()); - } - askSendingFiles( - uriList, - () -> { - Util.runOnAnyBackgroundThread( - () -> { - SendRelayedMessageUtil.sendMultipleMsgs(this, chatId, uriList, null); - }); - }); - } - } + sendMultipleMsgs(data); } break; case PICK_DOCUMENT: - final String docMimeType = MediaUtil.getMimeType(this, data.getData()); - final MediaType docMediaType = - MediaUtil.isAudioType(docMimeType) ? MediaType.AUDIO : MediaType.DOCUMENT; - setMedia(data.getData(), docMediaType); + if (data.getData() != null) { // single Uri + final String docMimeType = MediaUtil.getMimeType(this, data.getData()); + final MediaType docMediaType = + MediaUtil.isAudioType(docMimeType) ? MediaType.AUDIO : MediaType.DOCUMENT; + setMedia(data.getData(), docMediaType); + } else { + sendMultipleMsgs(data); + } break; case PICK_WEBXDC: @@ -509,6 +496,25 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } } + private void sendMultipleMsgs(Intent data) { + final ClipData multipleUris = data.getClipData(); + if (multipleUris != null) { + final int uriCount = multipleUris.getItemCount(); + if (uriCount > 0) { + ArrayList uriList = new ArrayList<>(uriCount); + for (int i = 0; i < uriCount; i++) { + uriList.add(multipleUris.getItemAt(i).getUri()); + } + askSendingFiles( + uriList, + () -> { + Util.runOnAnyBackgroundThread( + () -> SendRelayedMessageUtil.sendMultipleMsgs(this, chatId, uriList, null)); + }); + } + } + } + @Override public void startActivity(Intent intent) { if (intent.getStringExtra(Browser.EXTRA_APPLICATION_ID) != null) { diff --git a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java index 71ef11acd..7225e04e4 100644 --- a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java @@ -212,7 +212,12 @@ public class WelcomeActivity extends BaseActionBarActivity File imexDir = DcHelper.getImexDir(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { AttachmentManager.selectMediaType( - this, "application/x-tar", null, PICK_BACKUP, StorageUtil.getDownloadUri()); + this, + "application/x-tar", + null, + PICK_BACKUP, + StorageUtil.getDownloadUri(), + false); } else { final String backupFile = dcContext.imexHasBackup(imexDir.getAbsolutePath()); if (backupFile != null) { diff --git a/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 715514666..7a1648af4 100644 --- a/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -445,7 +445,7 @@ public class AttachmentManager { } public static void selectDocument(Activity activity, int requestCode) { - selectMediaType(activity, "*/*", null, requestCode); + selectMediaType(activity, "*/*", null, requestCode, null, true); } public static void selectWebxdc(Activity activity, int requestCode) { @@ -483,7 +483,7 @@ public class AttachmentManager { .ifNecessary() .withPermanentDenialDialog( activity.getString(R.string.perm_explain_access_to_storage_denied)) - .onAllGranted(() -> selectMediaType(activity, "image/*", null, requestCode)) + .onAllGranted(() -> selectMediaType(activity, "image/*", null, requestCode, null, false)) .execute(); } @@ -608,20 +608,6 @@ public class AttachmentManager { .execute(); } - public static void selectMediaType( - Activity activity, @NonNull String type, @Nullable String[] extraMimeType, int requestCode) { - selectMediaType(activity, type, extraMimeType, requestCode, null, false); - } - - public static void selectMediaType( - Activity activity, - @NonNull String type, - @Nullable String[] extraMimeType, - int requestCode, - @Nullable Uri initialUri) { - selectMediaType(activity, type, extraMimeType, requestCode, initialUri, false); - } - public static void selectMediaType( Activity activity, @NonNull String type,