From 2cc78fd5fbe9fb0bbe4c325c808670b55f04c081 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 15 Jun 2023 22:50:01 +0200 Subject: [PATCH] Timeline: fix unknown aspectRatio --- .../components/event/TimelineItemAspectRatioBox.kt | 11 ++++++----- .../components/event/TimelineItemImageView.kt | 7 +------ .../event/TimelineItemContentMessageFactory.kt | 4 ++-- .../timeline/model/event/TimelineItemImageContent.kt | 2 +- .../timeline/model/event/TimelineItemVideoContent.kt | 2 +- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAspectRatioBox.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAspectRatioBox.kt index 043019cc7f..b1240f9236 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAspectRatioBox.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemAspectRatioBox.kt @@ -24,22 +24,23 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import kotlin.math.min @Composable fun TimelineItemAspectRatioBox( height: Int?, - aspectRatio: Float, + aspectRatio: Float?, modifier: Modifier = Modifier, contentAlignment: Alignment = Alignment.TopStart, content: @Composable BoxScope.() -> Unit, ) { - // TODO should probably be moved to an ElementTheme.dimensions - val maxHeight = min(300, height ?: 0) + val maxHeight = minOf(300, maxOf(100, height ?: Int.MAX_VALUE)) + val aspectRatioModifier = aspectRatio?.let { + Modifier.aspectRatio(it) + } ?: Modifier Box( modifier = modifier .heightIn(max = maxHeight.dp) - .aspectRatio(aspectRatio, matchHeightConstraintsFirst = true), + .then(aspectRatioModifier), contentAlignment = contentAlignment, content = content ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt index f85f9d58e0..f6c1c069b9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt @@ -16,7 +16,6 @@ package io.element.android.features.messages.impl.timeline.components.event -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale @@ -28,24 +27,20 @@ import io.element.android.libraries.designsystem.components.BlurHashAsyncImage import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.matrix.ui.media.MediaRequestData -import kotlin.math.max @Composable fun TimelineItemImageView( content: TimelineItemImageContent, modifier: Modifier = Modifier, ) { - // TODO place this value somewhere else? - val minHeight = max(100, content.height ?: 0) TimelineItemAspectRatioBox( - height = minHeight, + height = content.height, aspectRatio = content.aspectRatio, modifier = modifier ) { BlurHashAsyncImage( model = MediaRequestData(content.preferredMediaSource, MediaRequestData.Kind.File(content.body, content.mimeType)), blurHash = content.blurhash, - modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Fit, ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt index 0e407003e8..18250a05a7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt @@ -102,11 +102,11 @@ class TimelineItemContentMessageFactory @Inject constructor( } } - private fun aspectRatioOf(width: Long?, height: Long?): Float { + private fun aspectRatioOf(width: Long?, height: Long?): Float? { return if (height != null && width != null) { width.toFloat() / height.toFloat() } else { - 0.7f + null } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt index 286d3412f1..342e0a336b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt @@ -29,7 +29,7 @@ data class TimelineItemImageContent( val blurhash: String?, val width: Int?, val height: Int?, - val aspectRatio: Float + val aspectRatio: Float? ) : TimelineItemEventContent { override val type: String = "TimelineItemImageContent" diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt index a76be8c13c..14ec0a972d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt @@ -23,7 +23,7 @@ data class TimelineItemVideoContent( val duration: Long, val videoSource: MediaSource, val thumbnailSource: MediaSource?, - val aspectRatio: Float, + val aspectRatio: Float?, val blurHash: String?, val height: Int?, val width: Int?,