Merge pull request #6215 from networkException/fix-animated-only-fetching-thumbnail

Fix animated images only autoplaying sometimes
This commit is contained in:
Benoit Marty 2022-10-04 17:44:25 +02:00 committed by GitHub
commit 2cb16d9f11
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 4 deletions

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

@ -0,0 +1 @@
Fix animated images not autoplaying sometimes if only a thumbnail was fetched from the server

View file

@ -453,12 +453,15 @@ class MessageItemFactory @Inject constructor(
maxWidth = maxWidth,
allowNonMxcUrls = informationData.sendState.isSending()
)
val playable = messageContent.mimeType == MimeTypes.Gif
return MessageImageVideoItem_()
.attributes(attributes)
.leftGuideline(avatarSizeProvider.leftGuideline)
.imageContentRenderer(imageContentRenderer)
.contentUploadStateTrackerBinder(contentUploadStateTrackerBinder)
.playable(messageContent.mimeType == MimeTypes.Gif)
.playable(playable)
.highlighted(highlight)
.mediaData(data)
.apply {
@ -472,6 +475,10 @@ class MessageItemFactory @Inject constructor(
callback?.onImageMessageClicked(messageContent, data, view, emptyList())
}
}
}.apply {
if (playable && vectorPreferences.autoplayAnimatedImages()) {
mode(ImageContentRenderer.Mode.ANIMATED_THUMBNAIL)
}
}
}

View file

@ -38,7 +38,6 @@ import im.vector.app.core.glide.GlideRequest
import im.vector.app.core.glide.GlideRequests
import im.vector.app.core.ui.model.Size
import im.vector.app.core.utils.DimensionConverter
import im.vector.app.features.settings.VectorPreferences
import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.session.content.ContentUrlResolver
@ -65,7 +64,6 @@ class ImageContentRenderer @Inject constructor(
private val localFilesHelper: LocalFilesHelper,
private val activeSessionHolder: ActiveSessionHolder,
private val dimensionConverter: DimensionConverter,
private val vectorPreferences: VectorPreferences
) {
@Parcelize
@ -85,6 +83,7 @@ class ImageContentRenderer @Inject constructor(
enum class Mode {
FULL_SIZE,
ANIMATED_THUMBNAIL,
THUMBNAIL,
STICKER
}
@ -133,7 +132,7 @@ class ImageContentRenderer @Inject constructor(
createGlideRequest(data, mode, imageView, size)
.let {
if (vectorPreferences.autoplayAnimatedImages()) it
if (mode == Mode.ANIMATED_THUMBNAIL) it
else it.dontAnimate()
}
.transform(cornerTransformation)
@ -231,6 +230,7 @@ class ImageContentRenderer @Inject constructor(
val contentUrlResolver = activeSessionHolder.getActiveSession().contentUrlResolver()
val resolvedUrl = when (mode) {
Mode.FULL_SIZE,
Mode.ANIMATED_THUMBNAIL,
Mode.STICKER -> resolveUrl(data)
Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, size.width, size.height, ContentUrlResolver.ThumbnailMethod.SCALE)
}
@ -269,6 +269,7 @@ class ImageContentRenderer @Inject constructor(
finalHeight = height
finalWidth = width
}
Mode.ANIMATED_THUMBNAIL,
Mode.THUMBNAIL -> {
finalHeight = min(maxImageWidth * height / width, maxImageHeight)
finalWidth = finalHeight * width / height