Merge pull request #4491 from deltachat/adb/allow-select-multiple-files

allow to select multiple files
This commit is contained in:
adb
2026-06-23 20:18:45 +02:00
committed by GitHub
4 changed files with 37 additions and 39 deletions
+1
View File
@@ -2,6 +2,7 @@
## Unreleased
* Allow to select multiple files for sending
* Add notifications for missed calls
## v2.53.0
@@ -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<Uri> 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<Uri> 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) {
@@ -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) {
@@ -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,