From cc7f88ea2d16bb8303764982c526ed8d9e14bc86 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 14 Aug 2026 12:41:17 -0300 Subject: [PATCH] Fix support for large images in media-send. --- .../securesms/mediasend/v3/MediaSendV3Repository.kt | 4 ++-- .../java/org/signal/mediasend/MediaSendFlowViewModel.kt | 8 ++++++-- .../main/java/org/signal/mediasend/MediaSendRepository.kt | 5 ++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt index f0d9447dc2..e5a7ccc75f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt @@ -308,8 +308,8 @@ object MediaSendV3Repository : MediaSendRepository { return !RemoteConfig.cameraXMixedModelBlocklist.asListContains(Build.MODEL) } - override fun getMediaConstraints(): MediaConstraints { - return PushMediaConstraints(null) + override fun getMediaConstraints(quality: SentMediaQuality?): MediaConstraints { + return PushMediaConstraints(quality) } override var storyMaxVideoDuration: Duration = Stories.MAX_VIDEO_DURATION_MILLIS.milliseconds diff --git a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowViewModel.kt b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowViewModel.kt index 46191d3749..b0f4a1801e 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowViewModel.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowViewModel.kt @@ -538,13 +538,17 @@ class MediaSendFlowViewModel( // TODO - this should likely be in a repository? private fun createImageEditorModel(media: Media): EditorModel { + // Bounded to what we would ever send, since an unbounded decode of something like a 50MP photo produces a bitmap + // too large for a Canvas to draw. + val constraints = repository.getMediaConstraints(SentMediaQuality.HIGH) + val editorModel = EditorModel.create(0x0) val element = EditorElement( UriGlideRenderer( media.uri, true, - 0, - 0, + constraints.imageMaxWidth, + constraints.imageMaxHeight, UriGlideRenderer.STRONG_BLUR, object : RequestListener { override fun onResourceReady(resource: Bitmap?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean): Boolean { diff --git a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt index a6293769d6..982b8d68df 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt @@ -145,7 +145,10 @@ interface MediaSendRepository { var isCameraFacingFront: Boolean - fun getMediaConstraints(): MediaConstraints + /** + * @param quality The quality the constraints should describe, or null for whatever the app would send at by default. + */ + fun getMediaConstraints(quality: SentMediaQuality? = null): MediaConstraints var storyMaxVideoDuration: Duration