[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 <surakin@gmail.com>
This commit is contained in:
Marco Antonio Alvarez 2024-01-04 09:06:30 +01:00 committed by GitHub
parent c6d109c424
commit 83e4af52b9
3 changed files with 19 additions and 17 deletions

1
changelog.d/1949.bugfix Normal file
View file

@ -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

View file

@ -255,17 +255,21 @@ class MessagesFlowNode @AssistedInject constructor(
overlay.show(navTarget) overlay.show(navTarget)
} }
is TimelineItemStickerContent -> { is TimelineItemStickerContent -> {
val navTarget = NavTarget.MediaViewer( /* Sticker may have an empty url and no thumbnail
mediaInfo = MediaInfo( if encrypted on certain bridges */
name = event.content.body, if (event.content.preferredMediaSource != null) {
mimeType = event.content.mimeType, val navTarget = NavTarget.MediaViewer(
formattedFileSize = event.content.formattedFileSize, mediaInfo = MediaInfo(
fileExtension = event.content.fileExtension name = event.content.body,
), mimeType = event.content.mimeType,
mediaSource = event.content.mediaSource, formattedFileSize = event.content.formattedFileSize,
thumbnailSource = event.content.thumbnailSource, fileExtension = event.content.fileExtension
) ),
overlay.show(navTarget) mediaSource = event.content.preferredMediaSource,
thumbnailSource = event.content.thumbnailSource,
)
overlay.show(navTarget)
}
} }
is TimelineItemVideoContent -> { is TimelineItemVideoContent -> {
val navTarget = NavTarget.MediaViewer( val navTarget = NavTarget.MediaViewer(

View file

@ -16,7 +16,6 @@
package io.element.android.features.messages.impl.timeline.model.event 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 import io.element.android.libraries.matrix.api.media.MediaSource
data class TimelineItemStickerContent( data class TimelineItemStickerContent(
@ -33,9 +32,7 @@ data class TimelineItemStickerContent(
) : TimelineItemEventContent { ) : TimelineItemEventContent {
override val type: String = "TimelineItemStickerContent" override val type: String = "TimelineItemStickerContent"
val preferredMediaSource = if (mimeType == MimeTypes.Gif) { /* Stickers are supposed to be small images so
mediaSource we allow using the mediaSource (unless the url is empty) */
} else { val preferredMediaSource = if (mediaSource.url.isEmpty()) thumbnailSource else mediaSource
thumbnailSource ?: mediaSource
}
} }