From 16c8b88f0fc5c6460ede0feca95f15a1fe81a688 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 21 Jun 2024 13:50:39 -0400 Subject: [PATCH] Fix multiple text attachments when forwarding to multiple recipients. Fixes #13593 --- .../thoughtcrime/securesms/mms/SlideDeck.java | 4 ++++ .../securesms/sharing/MultiShareSender.java | 16 +++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java index 2e1800de29..5f91fb0dbe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java @@ -45,6 +45,10 @@ public class SlideDeck { if (slide != null) slides.add(slide); } + public SlideDeck(SlideDeck otherSlideDeck) { + slides.addAll(otherSlideDeck.slides); + } + public SlideDeck() { } diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java index 67c8123161..36ccd1b412 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java @@ -86,12 +86,12 @@ public final class MultiShareSender { List results = new ArrayList<>(multiShareArgs.getContactSearchKeys().size()); Context context = AppDependencies.getApplication(); String message = multiShareArgs.getDraftText(); - SlideDeck slideDeck; + SlideDeck primarySlideDeck; List storiesBatch = new LinkedList<>(); ChatColors generatedTextStoryBackgroundColor = TextStoryBackgroundColors.getRandomBackgroundColor(); try { - slideDeck = buildSlideDeck(context, multiShareArgs); + primarySlideDeck = buildSlideDeck(context, multiShareArgs); } catch (SlideNotFoundException e) { Log.w(TAG, "Could not create slide for media message"); for (ContactSearchKey.RecipientSearchKey recipientSearchKey : multiShareArgs.getRecipientSearchKeys()) { @@ -105,11 +105,13 @@ public final class MultiShareSender { for (ContactSearchKey.RecipientSearchKey recipientSearchKey : multiShareArgs.getRecipientSearchKeys()) { Recipient recipient = Recipient.resolved(recipientSearchKey.getRecipientId()); - long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient); - List mentions = getValidMentionsForRecipient(recipient, multiShareArgs.getMentions()); - MessageSendType sendType = MessageSendType.SignalMessageSendType.INSTANCE; - long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds()); - List contacts = multiShareArgs.getSharedContacts(); + long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient); + List mentions = getValidMentionsForRecipient(recipient, multiShareArgs.getMentions()); + MessageSendType sendType = MessageSendType.SignalMessageSendType.INSTANCE; + long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds()); + List contacts = multiShareArgs.getSharedContacts(); + SlideDeck slideDeck = new SlideDeck(primarySlideDeck); + boolean needsSplit = message != null && message.length() > sendType.calculateCharacters(message).maxPrimaryMessageSize; boolean hasMmsMedia = !multiShareArgs.getMedia().isEmpty() ||