Skip to content

Commit 2f2dae8

Browse files
authored
Merge pull request #6290 from vector-im/bugfix/eric/fix-large-image-crash
Fixes large images crashing when opened in timeline
2 parents baae737 + c10d4a7 commit 2f2dae8

File tree

2 files changed

+2
-70
lines changed

2 files changed

+2
-70
lines changed

changelog.d/6290.bugfix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed crash when opening large images in the timeline

vector/src/main/java/im/vector/app/features/media/ImageContentRenderer.kt

+1-70
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package im.vector.app.features.media
1818

1919
import android.graphics.Bitmap
2020
import android.graphics.drawable.Drawable
21-
import android.net.Uri
2221
import android.os.Parcelable
2322
import android.view.View
2423
import android.widget.ImageView
@@ -31,8 +30,6 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners
3130
import com.bumptech.glide.request.RequestListener
3231
import com.bumptech.glide.request.target.CustomViewTarget
3332
import com.bumptech.glide.request.target.Target
34-
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.ORIENTATION_USE_EXIF
35-
import com.github.piasy.biv.view.BigImageView
3633
import im.vector.app.R
3734
import im.vector.app.core.di.ActiveSessionHolder
3835
import im.vector.app.core.files.LocalFilesHelper
@@ -47,8 +44,6 @@ import org.matrix.android.sdk.api.extensions.tryOrNull
4744
import org.matrix.android.sdk.api.session.content.ContentUrlResolver
4845
import org.matrix.android.sdk.api.session.crypto.attachments.ElementToDecrypt
4946
import org.matrix.android.sdk.api.session.media.PreviewUrlData
50-
import timber.log.Timber
51-
import java.io.File
5247
import javax.inject.Inject
5348
import kotlin.math.min
5449

@@ -142,7 +137,6 @@ class ImageContentRenderer @Inject constructor(
142137
else it.dontAnimate()
143138
}
144139
.transform(cornerTransformation)
145-
// .thumbnail(0.3f)
146140
.into(imageView)
147141
}
148142

@@ -173,47 +167,11 @@ class ImageContentRenderer @Inject constructor(
173167
.load(resolvedUrl)
174168
}
175169

176-
req.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
170+
req
177171
.fitCenter()
178172
.into(target)
179173
}
180174

181-
fun renderFitTarget(data: Data, mode: Mode, imageView: ImageView, callback: ((Boolean) -> Unit)? = null) {
182-
val size = processSize(data, mode)
183-
184-
// a11y
185-
imageView.contentDescription = data.filename
186-
187-
createGlideRequest(data, mode, imageView, size)
188-
.listener(object : RequestListener<Drawable> {
189-
override fun onLoadFailed(
190-
e: GlideException?,
191-
model: Any?,
192-
target: Target<Drawable>?,
193-
isFirstResource: Boolean
194-
): Boolean {
195-
callback?.invoke(false)
196-
return false
197-
}
198-
199-
override fun onResourceReady(
200-
resource: Drawable?,
201-
model: Any?,
202-
target: Target<Drawable>?,
203-
dataSource: DataSource?,
204-
isFirstResource: Boolean
205-
): Boolean {
206-
callback?.invoke(true)
207-
return false
208-
}
209-
})
210-
.fitCenter()
211-
.into(imageView)
212-
}
213-
214-
/**
215-
* onlyRetrieveFromCache is true!
216-
*/
217175
fun renderForSharedElementTransition(data: Data, imageView: ImageView, callback: ((Boolean) -> Unit)? = null) {
218176
// a11y
219177
imageView.contentDescription = data.filename
@@ -254,7 +212,6 @@ class ImageContentRenderer @Inject constructor(
254212
return false
255213
}
256214
})
257-
.onlyRetrieveFromCache(true)
258215
.fitCenter()
259216
.into(imageView)
260217
}
@@ -292,32 +249,6 @@ class ImageContentRenderer @Inject constructor(
292249
}
293250
}
294251

295-
fun render(data: Data, imageView: BigImageView) {
296-
// a11y
297-
imageView.contentDescription = data.filename
298-
299-
val (width, height) = processSize(data, Mode.THUMBNAIL)
300-
val contentUrlResolver = activeSessionHolder.getActiveSession().contentUrlResolver()
301-
val fullSize = resolveUrl(data)
302-
val thumbnail = contentUrlResolver.resolveThumbnail(data.url, width, height, ContentUrlResolver.ThumbnailMethod.SCALE)
303-
304-
if (fullSize.isNullOrBlank() || thumbnail.isNullOrBlank()) {
305-
Timber.w("Invalid urls")
306-
return
307-
}
308-
309-
imageView.setImageLoaderCallback(object : DefaultImageLoaderCallback {
310-
override fun onSuccess(image: File?) {
311-
imageView.ssiv?.orientation = ORIENTATION_USE_EXIF
312-
}
313-
})
314-
315-
imageView.showImage(
316-
Uri.parse(thumbnail),
317-
Uri.parse(fullSize)
318-
)
319-
}
320-
321252
private fun resolveUrl(data: Data) =
322253
(activeSessionHolder.getActiveSession().contentUrlResolver().resolveFullSize(data.url)
323254
?: data.url?.takeIf { localFilesHelper.isLocalFile(data.url) && data.allowNonMxcUrls })

0 commit comments

Comments
 (0)