mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-16 02:05:06 +08:00
Create Size data class
This commit is contained in:
parent
4b0dfa49f4
commit
bb9510e59b
20
vector/src/main/java/im/vector/riotx/core/ui/model/Size.kt
Normal file
20
vector/src/main/java/im/vector/riotx/core/ui/model/Size.kt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.riotx.core.ui.model
|
||||||
|
|
||||||
|
// android.util.Size in API 21+
|
||||||
|
data class Size(val width: Int, val height: Int)
|
@ -31,6 +31,7 @@ import im.vector.matrix.android.internal.crypto.attachments.ElementToDecrypt
|
|||||||
import im.vector.riotx.core.di.ActiveSessionHolder
|
import im.vector.riotx.core.di.ActiveSessionHolder
|
||||||
import im.vector.riotx.core.glide.GlideApp
|
import im.vector.riotx.core.glide.GlideApp
|
||||||
import im.vector.riotx.core.glide.GlideRequest
|
import im.vector.riotx.core.glide.GlideRequest
|
||||||
|
import im.vector.riotx.core.ui.model.Size
|
||||||
import im.vector.riotx.core.utils.DimensionConverter
|
import im.vector.riotx.core.utils.DimensionConverter
|
||||||
import im.vector.riotx.core.utils.isLocalFile
|
import im.vector.riotx.core.utils.isLocalFile
|
||||||
import kotlinx.android.parcel.Parcelize
|
import kotlinx.android.parcel.Parcelize
|
||||||
@ -62,13 +63,13 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder:
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun render(data: Data, mode: Mode, imageView: ImageView) {
|
fun render(data: Data, mode: Mode, imageView: ImageView) {
|
||||||
val (width, height) = processSize(data, mode)
|
val size = processSize(data, mode)
|
||||||
imageView.layoutParams.height = height
|
imageView.layoutParams.width = size.width
|
||||||
imageView.layoutParams.width = width
|
imageView.layoutParams.height = size.height
|
||||||
// a11y
|
// a11y
|
||||||
imageView.contentDescription = data.filename
|
imageView.contentDescription = data.filename
|
||||||
|
|
||||||
createGlideRequest(data, mode, imageView, width, height)
|
createGlideRequest(data, mode, imageView, size)
|
||||||
.dontAnimate()
|
.dontAnimate()
|
||||||
.transform(RoundedCorners(dimensionConverter.dpToPx(8)))
|
.transform(RoundedCorners(dimensionConverter.dpToPx(8)))
|
||||||
.thumbnail(0.3f)
|
.thumbnail(0.3f)
|
||||||
@ -76,12 +77,12 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder:
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun renderFitTarget(data: Data, mode: Mode, imageView: ImageView, callback: ((Boolean) -> Unit)? = null) {
|
fun renderFitTarget(data: Data, mode: Mode, imageView: ImageView, callback: ((Boolean) -> Unit)? = null) {
|
||||||
val (width, height) = processSize(data, mode)
|
val size = processSize(data, mode)
|
||||||
|
|
||||||
// a11y
|
// a11y
|
||||||
imageView.contentDescription = data.filename
|
imageView.contentDescription = data.filename
|
||||||
|
|
||||||
createGlideRequest(data, mode, imageView, width, height)
|
createGlideRequest(data, mode, imageView, size)
|
||||||
.listener(object : RequestListener<Drawable> {
|
.listener(object : RequestListener<Drawable> {
|
||||||
override fun onLoadFailed(e: GlideException?,
|
override fun onLoadFailed(e: GlideException?,
|
||||||
model: Any?,
|
model: Any?,
|
||||||
@ -104,7 +105,7 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder:
|
|||||||
.into(imageView)
|
.into(imageView)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createGlideRequest(data: Data, mode: Mode, imageView: ImageView, width: Int, height: Int): GlideRequest<Drawable> {
|
private fun createGlideRequest(data: Data, mode: Mode, imageView: ImageView, size: Size): GlideRequest<Drawable> {
|
||||||
return if (data.elementToDecrypt != null) {
|
return if (data.elementToDecrypt != null) {
|
||||||
// Encrypted image
|
// Encrypted image
|
||||||
GlideApp
|
GlideApp
|
||||||
@ -116,7 +117,7 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder:
|
|||||||
val resolvedUrl = when (mode) {
|
val resolvedUrl = when (mode) {
|
||||||
Mode.FULL_SIZE,
|
Mode.FULL_SIZE,
|
||||||
Mode.STICKER -> contentUrlResolver.resolveFullSize(data.url)
|
Mode.STICKER -> contentUrlResolver.resolveFullSize(data.url)
|
||||||
Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, width, height, ContentUrlResolver.ThumbnailMethod.SCALE)
|
Mode.THUMBNAIL -> contentUrlResolver.resolveThumbnail(data.url, size.width, size.height, ContentUrlResolver.ThumbnailMethod.SCALE)
|
||||||
}
|
}
|
||||||
// Fallback to base url
|
// Fallback to base url
|
||||||
?: data.url
|
?: data.url
|
||||||
@ -147,7 +148,7 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder:
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processSize(data: Data, mode: Mode): Pair<Int, Int> {
|
private fun processSize(data: Data, mode: Mode): Size {
|
||||||
val maxImageWidth = data.maxWidth
|
val maxImageWidth = data.maxWidth
|
||||||
val maxImageHeight = data.maxHeight
|
val maxImageHeight = data.maxHeight
|
||||||
val width = data.width ?: maxImageWidth
|
val width = data.width ?: maxImageWidth
|
||||||
@ -182,6 +183,6 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder:
|
|||||||
if (finalWidth < 0) {
|
if (finalWidth < 0) {
|
||||||
finalWidth = maxImageWidth
|
finalWidth = maxImageWidth
|
||||||
}
|
}
|
||||||
return Pair(finalWidth, finalHeight)
|
return Size(finalWidth, finalHeight)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user