From a81fdddab0addf4e02d93a321bed50fd4b7b8fb9 Mon Sep 17 00:00:00 2001 From: Marco Antonio Alvarez Date: Thu, 4 Jan 2024 09:06:30 +0100 Subject: [PATCH] [Technical] Open stickers using the thumbnail url if the main url is empty (#2157) * Explicitely use the thumbnail url to show stickers if the content's url is an empty string --------- Signed-off-by: Marco Antonio Alvarez --- changelog.d/1949.bugfix | 1 + .../messages/impl/MessagesFlowNode.kt | 26 +++++++++++-------- .../model/event/TimelineItemStickerContent.kt | 9 +++---- 3 files changed, 19 insertions(+), 17 deletions(-) create mode 100644 changelog.d/1949.bugfix diff --git a/changelog.d/1949.bugfix b/changelog.d/1949.bugfix new file mode 100644 index 0000000000..a49aff7545 --- /dev/null +++ b/changelog.d/1949.bugfix @@ -0,0 +1 @@ +Make sure the media viewer tries the main url first (if not empty) then the thumbnail url and then not open if both are missing instead of failing with an error dialog diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt index 9f0a91fa52..7343e56529 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt @@ -255,17 +255,21 @@ class MessagesFlowNode @AssistedInject constructor( overlay.show(navTarget) } is TimelineItemStickerContent -> { - val navTarget = NavTarget.MediaViewer( - mediaInfo = MediaInfo( - name = event.content.body, - mimeType = event.content.mimeType, - formattedFileSize = event.content.formattedFileSize, - fileExtension = event.content.fileExtension - ), - mediaSource = event.content.mediaSource, - thumbnailSource = event.content.thumbnailSource, - ) - overlay.show(navTarget) + /* Sticker may have an empty url and no thumbnail + if encrypted on certain bridges */ + if (event.content.preferredMediaSource != null) { + val navTarget = NavTarget.MediaViewer( + mediaInfo = MediaInfo( + name = event.content.body, + mimeType = event.content.mimeType, + formattedFileSize = event.content.formattedFileSize, + fileExtension = event.content.fileExtension + ), + mediaSource = event.content.preferredMediaSource, + thumbnailSource = event.content.thumbnailSource, + ) + overlay.show(navTarget) + } } is TimelineItemVideoContent -> { val navTarget = NavTarget.MediaViewer( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt index e608ed824a..9c8070ecc9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt @@ -16,7 +16,6 @@ package io.element.android.features.messages.impl.timeline.model.event -import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.matrix.api.media.MediaSource data class TimelineItemStickerContent( @@ -33,9 +32,7 @@ data class TimelineItemStickerContent( ) : TimelineItemEventContent { override val type: String = "TimelineItemStickerContent" - val preferredMediaSource = if (mimeType == MimeTypes.Gif) { - mediaSource - } else { - thumbnailSource ?: mediaSource - } + /* Stickers are supposed to be small images so + we allow using the mediaSource (unless the url is empty) */ + val preferredMediaSource = if (mediaSource.url.isEmpty()) thumbnailSource else mediaSource }