mirror of
https://github.com/element-hq/element-android
synced 2024-11-27 20:06:51 +03:00
Merge pull request #6215 from networkException/fix-animated-only-fetching-thumbnail
Fix animated images only autoplaying sometimes
This commit is contained in:
commit
2cb16d9f11
3 changed files with 13 additions and 4 deletions
1
changelog.d/6215.bugfix
Normal file
1
changelog.d/6215.bugfix
Normal file
|
@ -0,0 +1 @@
|
|||
Fix animated images not autoplaying sometimes if only a thumbnail was fetched from the server
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue