diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt index b55934e848..b7ec225a2b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt @@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 import app.cash.exhaustive.Exhaustive import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import org.signal.core.util.concurrent.SimpleTask import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.conversation.MessageSendType @@ -41,6 +42,7 @@ import org.thoughtcrime.securesms.mediasend.v2.stories.StoriesMultiselectForward import org.thoughtcrime.securesms.mms.SentMediaQuality import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.scribbles.ImageEditorFragment import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter @@ -167,8 +169,31 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) { ) if (sharedViewModel.isStory()) { - val previews = sharedViewModel.state.value?.selectedMedia?.take(2)?.map { it.uri } ?: emptyList() - storiesLauncher.launch(StoriesMultiselectForwardActivity.Args(args, previews)) + val snapshot = sharedViewModel.state.value + + if (snapshot != null) { + sendButton.isEnabled = false + SimpleTask.run(viewLifecycleOwner.lifecycle, { + snapshot.selectedMedia.take(2).map { media -> + val editorData = snapshot.editorStateMap[media.uri] + if (MediaUtil.isImageType(media.mimeType) && editorData != null && editorData is ImageEditorFragment.Data) { + val model = editorData.readModel() + if (model != null) { + ImageEditorFragment.renderToSingleUseBlob(requireContext(), model) + } else { + media.uri + } + } else { + media.uri + } + } + }, { + sendButton.isEnabled = true + storiesLauncher.launch(StoriesMultiselectForwardActivity.Args(args, it)) + }) + } else { + storiesLauncher.launch(StoriesMultiselectForwardActivity.Args(args, emptyList())) + } } else { multiselectLauncher.launch(args) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java index 10e59e9e8c..17e1974674 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.scribbles; import android.Manifest; +import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; @@ -33,10 +34,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.FontUtil; import org.signal.core.util.concurrent.SignalExecutors; +import org.signal.core.util.concurrent.SimpleTask; import org.signal.core.util.logging.Log; import org.signal.imageeditor.core.Bounds; import org.signal.imageeditor.core.ColorableRenderer; -import org.signal.imageeditor.core.HiddenEditText; import org.signal.imageeditor.core.ImageEditorView; import org.signal.imageeditor.core.Renderer; import org.signal.imageeditor.core.SelectableRenderer; @@ -48,7 +49,6 @@ import org.signal.imageeditor.core.renderers.MultiLineTextRenderer; import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.animation.ResizeAnimation; -import org.thoughtcrime.securesms.components.emoji.EmojiUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.fonts.FontTypefaceProvider; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -66,7 +66,6 @@ import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.ThrottledDebouncer; import org.thoughtcrime.securesms.util.ViewUtil; -import org.signal.core.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import java.io.ByteArrayOutputStream; @@ -791,8 +790,13 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu @WorkerThread public @NonNull Uri renderToSingleUseBlob() { + return renderToSingleUseBlob(requireContext(), imageEditorView.getModel()); + } + + @WorkerThread + public static @NonNull Uri renderToSingleUseBlob(@NonNull Context context, @NonNull EditorModel editorModel) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - Bitmap image = imageEditorView.getModel().render(requireContext(), new FontTypefaceProvider()); + Bitmap image = editorModel.render(context, new FontTypefaceProvider()); image.compress(Bitmap.CompressFormat.JPEG, 80, outputStream); image.recycle();