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 8df8d7bff444cbc22336f58b90615e03fffe1899..e391a89e2430c65b759f439c43340fae064efe4d 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 fcb049b5eb6b76769d4f5ffe6567a5a5ff09d41e..dab47c28ffb4f2b0313de8e595f2b6c7ee0ef3e1 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 58a06760b010f464a7ececb7384445aa9b0f7305..c6671431e73a95b4a690e849bf285d8b2c0ea5b0 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 6c0d0bb9ae09625e66b4fcd0fa7368dfb59f7b87..e0e77770b7f5a892351540b07a1d61a14ea834b7 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 4bda5a906c690681764420b4c2438f65b8728eab..36cf47c6c6936f94a92c4a2be76842c5872c387d 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 df2ddfc4b2bd14ae8b5dd81155e4517230fc59b4..99c87416b609ac3d39f0176ac75f0d61beba2c01 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