From 014d03893a71fc134fad025e2a4f00d9bd1629b9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 1 Jul 2019 19:59:51 +0200 Subject: [PATCH] Fix issue after rebase and use classic request for clear image --- .../core/glide/MyAppGlideModule.kt | 7 ++++-- .../core/glide/VectorGlideModelLoader.kt | 20 +++++++++------ .../features/media/ImageContentRenderer.kt | 25 ++++++++++++++++--- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/vector/src/main/java/im/vector/riotredesign/core/glide/MyAppGlideModule.kt b/vector/src/main/java/im/vector/riotredesign/core/glide/MyAppGlideModule.kt index 8937ad48..54d3104c 100644 --- a/vector/src/main/java/im/vector/riotredesign/core/glide/MyAppGlideModule.kt +++ b/vector/src/main/java/im/vector/riotredesign/core/glide/MyAppGlideModule.kt @@ -24,6 +24,8 @@ import com.bumptech.glide.GlideBuilder import com.bumptech.glide.Registry import com.bumptech.glide.annotation.GlideModule import com.bumptech.glide.module.AppGlideModule +import im.vector.riotredesign.core.extensions.vectorComponent +import im.vector.riotredesign.features.media.ImageContentRenderer import java.io.InputStream @GlideModule @@ -34,7 +36,8 @@ class MyAppGlideModule : AppGlideModule() { } override fun registerComponents(context: Context, glide: Glide, registry: Registry) { - // FIXME This does not work - registry.append(InputStream::class.java, InputStream::class.java, VectorGlideModelLoaderFactory()) + registry.append(ImageContentRenderer.Data::class.java, + InputStream::class.java, + VectorGlideModelLoaderFactory(context.vectorComponent().activeSessionHolder())) } } \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/core/glide/VectorGlideModelLoader.kt b/vector/src/main/java/im/vector/riotredesign/core/glide/VectorGlideModelLoader.kt index 844309ca..dd62cedc 100644 --- a/vector/src/main/java/im/vector/riotredesign/core/glide/VectorGlideModelLoader.kt +++ b/vector/src/main/java/im/vector/riotredesign/core/glide/VectorGlideModelLoader.kt @@ -24,8 +24,8 @@ import com.bumptech.glide.load.model.ModelLoader import com.bumptech.glide.load.model.ModelLoaderFactory import com.bumptech.glide.load.model.MultiModelLoaderFactory import com.bumptech.glide.signature.ObjectKey -import im.vector.matrix.android.api.Matrix import im.vector.matrix.android.internal.crypto.attachments.MXEncryptedAttachments +import im.vector.riotredesign.core.di.ActiveSessionHolder import im.vector.riotredesign.features.media.ImageContentRenderer import okhttp3.OkHttpClient import okhttp3.Request @@ -37,10 +37,11 @@ import java.io.InputStream import com.bumptech.glide.load.engine.Resource as Resource1 -class VectorGlideModelLoaderFactory : ModelLoaderFactory { +class VectorGlideModelLoaderFactory(private val activeSessionHolder: ActiveSessionHolder) + : ModelLoaderFactory { override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader { - return VectorGlideModelLoader() + return VectorGlideModelLoader(activeSessionHolder) } override fun teardown() { @@ -49,20 +50,23 @@ class VectorGlideModelLoaderFactory : ModelLoaderFactory { +class VectorGlideModelLoader(private val activeSessionHolder: ActiveSessionHolder) + : ModelLoader { override fun handles(model: ImageContentRenderer.Data): Boolean { // Always handle return true } override fun buildLoadData(model: ImageContentRenderer.Data, width: Int, height: Int, options: Options): ModelLoader.LoadData? { - return ModelLoader.LoadData(ObjectKey(model), VectorGlideDataFetcher(model, width, height)) + return ModelLoader.LoadData(ObjectKey(model), VectorGlideDataFetcher(activeSessionHolder, model, width, height)) } } -class VectorGlideDataFetcher(private val data: ImageContentRenderer.Data, +class VectorGlideDataFetcher(private val activeSessionHolder: ActiveSessionHolder, + private val data: ImageContentRenderer.Data, private val width: Int, - private val height: Int) : DataFetcher { + private val height: Int) + : DataFetcher { val client = OkHttpClient() @@ -99,7 +103,7 @@ class VectorGlideDataFetcher(private val data: ImageContentRenderer.Data, callback.onDataReady(FileInputStream(initialFile)) return } - val contentUrlResolver = Matrix.getInstance().currentSession?.contentUrlResolver() ?: return + val contentUrlResolver = activeSessionHolder.getActiveSession().contentUrlResolver() val url = contentUrlResolver.resolveFullSize(data.url) ?: return diff --git a/vector/src/main/java/im/vector/riotredesign/features/media/ImageContentRenderer.kt b/vector/src/main/java/im/vector/riotredesign/features/media/ImageContentRenderer.kt index e12ad715..15b7e82f 100644 --- a/vector/src/main/java/im/vector/riotredesign/features/media/ImageContentRenderer.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/media/ImageContentRenderer.kt @@ -60,9 +60,28 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: val (width, height) = processSize(data, mode) imageView.layoutParams.height = height imageView.layoutParams.width = width - GlideApp - .with(imageView) - .load(data) + + val glideRequest = if (data.elementToDecrypt != null) { + // Encrypted image + GlideApp + .with(imageView) + .load(data) + } else { + // Clear image + val contentUrlResolver = activeSessionHolder.getActiveSession().contentUrlResolver() + val resolvedUrl = when (mode) { + Mode.FULL_SIZE -> contentUrlResolver.resolveFullSize(data.url) + Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, width, height, ContentUrlResolver.ThumbnailMethod.SCALE) + } + //Fallback to base url + ?: data.url + + GlideApp + .with(imageView) + .load(resolvedUrl) + } + + glideRequest .dontAnimate() .transform(RoundedCorners(dpToPx(8, imageView.context))) .thumbnail(0.3f)