From fb63ab0776af32935cf29ad21e47a8b14f20de19 Mon Sep 17 00:00:00 2001 From: Taras <tarassmakula@gmail.com> Date: Sat, 26 Feb 2022 01:48:14 +0200 Subject: [PATCH] Calculate image aspect ratio --- .../circles/extensions/ImageViewExtensions.kt | 23 ++++++++----------- .../extensions/MatrixSessionExtensions.kt | 15 +++++++----- .../com/futo/circles/model/PostContent.kt | 4 +++- .../circles/ui/groups/list/GroupViewHolder.kt | 3 ++- .../timeline/list/GroupTimelineViewHolder.kt | 5 +++- .../circles/ui/view/GroupPostHeaderView.kt | 12 +++++++--- 6 files changed, 37 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/futo/circles/extensions/ImageViewExtensions.kt b/app/src/main/java/com/futo/circles/extensions/ImageViewExtensions.kt index 8df8d7bff..e391a89e2 100644 --- a/app/src/main/java/com/futo/circles/extensions/ImageViewExtensions.kt +++ b/app/src/main/java/com/futo/circles/extensions/ImageViewExtensions.kt @@ -1,5 +1,6 @@ package com.futo.circles.extensions +import android.util.Size import android.widget.ImageView import com.bumptech.glide.Glide import com.bumptech.glide.request.target.Target @@ -11,31 +12,27 @@ import com.futo.circles.provider.MatrixSessionProvider fun ImageView.loadImage( url: String?, - size: Int = Target.SIZE_ORIGINAL + size: Size? = null ) { val resolvedUrl = MatrixSessionProvider.currentSession?.resolveUrl(url, size) Glide.with(this) .load(resolvedUrl) - .override(size, size) .fitCenter() .into(this) } -fun ImageView.loadEncryptedImage(content: ImageContent, size: Int = Target.SIZE_ORIGINAL) { - val request = content.elementToDecrypt?.let { +fun ImageView.loadEncryptedImage( + content: ImageContent, size: Size? = null +) { + content.elementToDecrypt?.let { GlideApp .with(context) .load(content) - } ?: run { - val resolvedUrl = MatrixSessionProvider.currentSession?.resolveUrl(content.fileUrl, size) - GlideApp - .with(context) - .load(resolvedUrl) - } - request.override(size, size) - .fitCenter() - .into(this) + .override(size?.width ?: Target.SIZE_ORIGINAL, size?.height ?: Target.SIZE_ORIGINAL) + .fitCenter() + .into(this) + } ?: loadImage(content.fileUrl, size) } diff --git a/app/src/main/java/com/futo/circles/extensions/MatrixSessionExtensions.kt b/app/src/main/java/com/futo/circles/extensions/MatrixSessionExtensions.kt index fcb049b5e..dab47c28f 100644 --- a/app/src/main/java/com/futo/circles/extensions/MatrixSessionExtensions.kt +++ b/app/src/main/java/com/futo/circles/extensions/MatrixSessionExtensions.kt @@ -1,6 +1,6 @@ package com.futo.circles.extensions -import com.bumptech.glide.request.target.Target +import android.util.Size import com.futo.circles.provider.MatrixSessionProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -19,16 +19,19 @@ val Session.coroutineScope: CoroutineScope } } -fun Session.resolveUrl(url: String?, size: Int = Target.SIZE_ORIGINAL): String? { +fun Session.resolveUrl( + url: String?, + size: Size? = null +): String? { val resolver = MatrixSessionProvider.currentSession?.contentUrlResolver() - return if (size == Target.SIZE_ORIGINAL) { - resolver?.resolveFullSize(url) - } else { + return size?.let { resolver?.resolveThumbnail( url, - size, size, + size.width, size.height, ContentUrlResolver.ThumbnailMethod.SCALE ) + } ?: run { + resolver?.resolveFullSize(url) } } diff --git a/app/src/main/java/com/futo/circles/model/PostContent.kt b/app/src/main/java/com/futo/circles/model/PostContent.kt index 58a06760b..c6671431e 100644 --- a/app/src/main/java/com/futo/circles/model/PostContent.kt +++ b/app/src/main/java/com/futo/circles/model/PostContent.kt @@ -21,4 +21,6 @@ data class ImageContent( val elementToDecrypt: ElementToDecrypt?, val width: Int, val height: Int -) : PostContent(PostContentType.IMAGE_CONTENT) \ No newline at end of file +) : PostContent(PostContentType.IMAGE_CONTENT) { + val aspectRatio = width.toFloat() / height.toFloat() +} \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/ui/groups/list/GroupViewHolder.kt b/app/src/main/java/com/futo/circles/ui/groups/list/GroupViewHolder.kt index 6c0d0bb9a..e0e77770b 100644 --- a/app/src/main/java/com/futo/circles/ui/groups/list/GroupViewHolder.kt +++ b/app/src/main/java/com/futo/circles/ui/groups/list/GroupViewHolder.kt @@ -1,6 +1,7 @@ package com.futo.circles.ui.groups.list import android.text.format.DateUtils +import android.util.Size import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.futo.circles.R @@ -28,7 +29,7 @@ class GroupViewHolder( fun bind(data: GroupListItem) { with(binding) { - ivGroup.loadImage(data.avatarUrl, ivGroup.height) + ivGroup.loadImage(data.avatarUrl, Size(ivGroup.width, ivGroup.height)) ivLock.setIsEncryptedIcon(data.isEncrypted) diff --git a/app/src/main/java/com/futo/circles/ui/groups/timeline/list/GroupTimelineViewHolder.kt b/app/src/main/java/com/futo/circles/ui/groups/timeline/list/GroupTimelineViewHolder.kt index 4bda5a906..36cf47c6c 100644 --- a/app/src/main/java/com/futo/circles/ui/groups/timeline/list/GroupTimelineViewHolder.kt +++ b/app/src/main/java/com/futo/circles/ui/groups/timeline/list/GroupTimelineViewHolder.kt @@ -1,5 +1,6 @@ package com.futo.circles.ui.groups.timeline.list +import android.util.Size import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView @@ -69,7 +70,9 @@ class ImagePostViewHolder( super.bind(post) (post.content as? ImageContent)?.let { - binding.ivContent.loadEncryptedImage(it) + val imageWith = binding.ivContent.width + val size = Size(imageWith, (imageWith / it.aspectRatio).toInt()) + binding.ivContent.loadEncryptedImage(it, size) } } } \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/ui/view/GroupPostHeaderView.kt b/app/src/main/java/com/futo/circles/ui/view/GroupPostHeaderView.kt index df2ddfc4b..99c87416b 100644 --- a/app/src/main/java/com/futo/circles/ui/view/GroupPostHeaderView.kt +++ b/app/src/main/java/com/futo/circles/ui/view/GroupPostHeaderView.kt @@ -2,6 +2,7 @@ package com.futo.circles.ui.view import android.content.Context import android.util.AttributeSet +import android.util.Size import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import com.futo.circles.databinding.GroupPostHeaderViewBinding @@ -17,9 +18,14 @@ class GroupPostHeaderView( GroupPostHeaderViewBinding.inflate(LayoutInflater.from(context), this) fun setData(sender: SenderInfo) { - binding.ivSenderImage.loadImage(sender.avatarUrl, binding.ivSenderImage.height) - binding.tvUserName.text = sender.disambiguatedDisplayName - binding.tvUserId.text = sender.userId + with(binding) { + ivSenderImage.loadImage( + sender.avatarUrl, + Size(ivSenderImage.width, ivSenderImage.height) + ) + tvUserName.text = sender.disambiguatedDisplayName + tvUserId.text = sender.userId + } } } \ No newline at end of file -- GitLab