Timeline: use thumbnailSource for image if available (except for gif)

This commit is contained in:
ganfra 2023-06-15 12:11:37 +02:00
parent 022e4645b4
commit 8207098091
6 changed files with 13 additions and 2 deletions

View file

@ -138,7 +138,7 @@ class MessagesFlowNode @AssistedInject constructor(
fileExtension = event.content.fileExtension fileExtension = event.content.fileExtension
), ),
mediaSource = event.content.mediaSource, mediaSource = event.content.mediaSource,
thumbnailSource = event.content.mediaSource, thumbnailSource = event.content.thumbnailSource,
) )
backstack.push(navTarget) backstack.push(navTarget)
} }

View file

@ -43,7 +43,7 @@ fun TimelineItemImageView(
modifier = modifier modifier = modifier
) { ) {
BlurHashAsyncImage( BlurHashAsyncImage(
model = MediaRequestData(content.mediaSource, MediaRequestData.Kind.File(content.body, content.mimeType)), model = MediaRequestData(content.preferredMediaSource, MediaRequestData.Kind.File(content.body, content.mimeType)),
blurHash = content.blurhash, blurHash = content.blurhash,
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Fit, contentScale = ContentScale.Fit,

View file

@ -54,6 +54,7 @@ class TimelineItemContentMessageFactory @Inject constructor(
TimelineItemImageContent( TimelineItemImageContent(
body = messageType.body, body = messageType.body,
mediaSource = messageType.source, mediaSource = messageType.source,
thumbnailSource = messageType.info?.thumbnailSource,
mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream,
blurhash = messageType.info?.blurhash, blurhash = messageType.info?.blurhash,
width = messageType.info?.width?.toInt(), width = messageType.info?.width?.toInt(),

View file

@ -16,11 +16,13 @@
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 TimelineItemImageContent( data class TimelineItemImageContent(
val body: String, val body: String,
val mediaSource: MediaSource, val mediaSource: MediaSource,
val thumbnailSource: MediaSource?,
val formattedFileSize: String, val formattedFileSize: String,
val fileExtension: String, val fileExtension: String,
val mimeType: String, val mimeType: String,
@ -30,4 +32,10 @@ data class TimelineItemImageContent(
val aspectRatio: Float val aspectRatio: Float
) : TimelineItemEventContent { ) : TimelineItemEventContent {
override val type: String = "TimelineItemImageContent" override val type: String = "TimelineItemImageContent"
val preferredMediaSource = if (mimeType == MimeTypes.Gif) {
mediaSource
} else {
thumbnailSource ?: mediaSource
}
} }

View file

@ -32,6 +32,7 @@ open class TimelineItemImageContentProvider : PreviewParameterProvider<TimelineI
fun aTimelineItemImageContent() = TimelineItemImageContent( fun aTimelineItemImageContent() = TimelineItemImageContent(
body = "a body", body = "a body",
mediaSource = MediaSource(""), mediaSource = MediaSource(""),
thumbnailSource = null,
mimeType = MimeTypes.IMAGE_JPEG, mimeType = MimeTypes.IMAGE_JPEG,
blurhash = "TQF5:I_NtRE4kXt7Z#MwkCIARPjr", blurhash = "TQF5:I_NtRE4kXt7Z#MwkCIARPjr",
width = null, width = null,

View file

@ -160,6 +160,7 @@ class MessagesPresenterTest {
content = TimelineItemImageContent( content = TimelineItemImageContent(
body = "image.jpg", body = "image.jpg",
mediaSource = MediaSource(AN_AVATAR_URL), mediaSource = MediaSource(AN_AVATAR_URL),
thumbnailSource = null,
mimeType = MimeTypes.Jpeg, mimeType = MimeTypes.Jpeg,
blurhash = null, blurhash = null,
width = 20, width = 20,