From 19f2b5fca226aa5e389c2d096f2193cd9f82d183 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 5 Feb 2023 14:14:44 +0100 Subject: [PATCH] Process clip data / compose --- .../eu/faircode/email/ActivityCompose.java | 52 ++++++++++++------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityCompose.java b/app/src/main/java/eu/faircode/email/ActivityCompose.java index b5c08aadf1..06b8bc77cd 100644 --- a/app/src/main/java/eu/faircode/email/ActivityCompose.java +++ b/app/src/main/java/eu/faircode/email/ActivityCompose.java @@ -20,6 +20,7 @@ package eu.faircode.email; */ import android.app.NotificationManager; +import android.content.ClipData; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -40,6 +41,7 @@ import androidx.preference.PreferenceManager; import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -216,26 +218,40 @@ public class ActivityCompose extends ActivityBase implements FragmentManager.OnB if (!TextUtils.isEmpty(html)) args.putString("body", html); - if (intent.hasExtra(Intent.EXTRA_STREAM)) - if (Intent.ACTION_SEND_MULTIPLE.equals(action)) { - ArrayList streams = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); - if (streams != null) { - // Some apps send null streams - ArrayList uris = new ArrayList<>(); - for (Uri stream : streams) - if (stream != null) - uris.add(stream); - if (uris.size() > 0) - args.putParcelableArrayList("attachments", uris); - } - } else { - Uri stream = intent.getParcelableExtra(Intent.EXTRA_STREAM); - if (stream != null) { - ArrayList uris = new ArrayList<>(); + ArrayList uris = new ArrayList<>(); + + ClipData clip = intent.getClipData(); + if (clip != null) + for (int i = 0; i < clip.getItemCount(); i++) { + ClipData.Item item = clip.getItemAt(i); + Uri stream = (item == null ? null : item.getUri()); + if (stream != null) uris.add(stream); - args.putParcelableArrayList("attachments", uris); - } } + + if (intent.hasExtra(Intent.EXTRA_STREAM)) { + ArrayList streams = (Intent.ACTION_SEND_MULTIPLE.equals(action) + ? intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM) + : new ArrayList<>(Arrays.asList((Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM)))); + if (streams != null) { + // Some apps send null streams + for (Uri stream : streams) + if (stream != null) { + boolean found = false; + for (Uri e : uris) + if (stream.equals(e)) { + found = true; + break; + } + if (!found) + uris.add(stream); + } + } + } + + if (uris.size() > 0) + args.putParcelableArrayList("attachments", uris); + } else args = intent.getExtras();