diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt index 0216000dae..904fae876c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt @@ -7,6 +7,7 @@ import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers +import org.signal.core.util.BreakIteratorCompat import org.signal.core.util.ThreadUtil import org.signal.core.util.logging.Log import org.signal.imageeditor.core.model.EditorModel @@ -38,6 +39,7 @@ import org.thoughtcrime.securesms.scribbles.ImageEditorFragment import org.thoughtcrime.securesms.sms.MessageSender import org.thoughtcrime.securesms.sms.MessageSender.PreUploadResult import org.thoughtcrime.securesms.sms.OutgoingStoryMessage +import org.thoughtcrime.securesms.stories.Stories import org.thoughtcrime.securesms.util.MessageUtil import java.util.Collections import java.util.concurrent.TimeUnit @@ -85,7 +87,7 @@ class MediaSelectionRepository(context: Context) { } return Maybe.create { emitter -> - val trimmedBody: String = if (isViewOnce) "" else message?.toString()?.trim() ?: "" + val trimmedBody: String = if (isViewOnce) "" else getTruncatedBody(message?.toString()?.trim()) ?: "" val trimmedMentions: List = if (isViewOnce) emptyList() else mentions val modelsToTransform: Map = buildModelsToTransform(selectedMedia, stateMap, quality) val oldToNewMediaMap: Map = MediaRepository.transformMediaSync(context, selectedMedia, modelsToTransform) @@ -93,7 +95,6 @@ class MediaSelectionRepository(context: Context) { for (media in updatedMedia) { Log.w(TAG, media.uri.toString() + " : " + media.transformProperties.map { t: TransformProperties -> "" + t.isVideoTrim }.orElse("null")) - media.setCaption(trimmedBody) } val singleRecipient: Recipient? = singleContact?.let { Recipient.resolved(it.recipientId) } @@ -144,6 +145,16 @@ class MediaSelectionRepository(context: Context) { }.subscribeOn(Schedulers.io()).cast(MediaSendActivityResult::class.java) } + private fun getTruncatedBody(body: String?): String? { + return if (body.isNullOrEmpty()) { + body + } else { + val iterator = BreakIteratorCompat.getInstance() + iterator.setText(body) + iterator.take(Stories.MAX_BODY_SIZE).toString() + } + } + fun deleteBlobs(media: List) { media .map(Media::getUri) diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java index d73bd5df2f..e6daceffbe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -74,7 +74,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.service.ExpiringMessageManager; -import org.thoughtcrime.securesms.stories.Stories; import org.thoughtcrime.securesms.util.ParcelUtil; import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.thoughtcrime.securesms.util.TextSecurePreferences; @@ -236,6 +235,11 @@ public class MessageSender { null); attachmentDatabase.updateMessageId(preUploadAttachmentIds, primaryMessageId, primaryMessage.getStoryType().isStory()); + if (primaryMessage.getStoryType() != StoryType.NONE) { + for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) { + attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody()); + } + } messageIds.add(primaryMessageId); List preUploadAttachments = Stream.of(preUploadAttachmentIds) @@ -265,6 +269,12 @@ public class MessageSender { } attachmentDatabase.updateMessageId(attachmentIds, messageId, secondaryMessage.getStoryType().isStory()); + if (primaryMessage.getStoryType() != StoryType.NONE) { + for (final AttachmentId preUploadAttachmentId : preUploadAttachmentIds) { + attachmentDatabase.updateAttachmentCaption(preUploadAttachmentId, primaryMessage.getBody()); + } + } + messageIds.add(messageId); } @@ -294,6 +304,7 @@ public class MessageSender { } else { AttachmentId attachmentCopyId = attachmentDatabase.insertAttachmentForPreUpload(preUploadAttachment.get()).getAttachmentId(); attachmentDatabase.updateMessageId(Collections.singletonList(attachmentCopyId), messageId, true); + attachmentDatabase.updateAttachmentCaption(attachmentCopyId, storyMessage.getOutgoingSecureMediaMessage().getBody()); messageIds.add(messageId); messages.add(storyMessage.getOutgoingSecureMediaMessage());