From 0204fca27d314a657d3c682617817bfafc077883 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 22 Jun 2026 18:37:30 +0200 Subject: [PATCH 1/2] allow to select multiple files --- .../securesms/ConversationActivity.java | 50 +++++++++++-------- .../securesms/WelcomeActivity.java | 7 ++- .../securesms/mms/AttachmentManager.java | 18 +------ 3 files changed, 36 insertions(+), 39 deletions(-) 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, From f92cac4d55738d98c7246e285a819dcb6237efc7 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 22 Jun 2026 18:57:49 +0200 Subject: [PATCH 2/2] update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dee2184f9..f9c5a2caa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Delta Chat Android Changelog +## Unreleased + +* Allow to select multiple files for sending + ## v2.53.0 2026-06