Timeline: fix unknown aspectRatio

This commit is contained in:
ganfra 2023-06-15 22:50:01 +02:00
parent 97923af7d8
commit 2cc78fd5fb
5 changed files with 11 additions and 15 deletions

View file

@ -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
)

View file

@ -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,
)
}

View file

@ -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
}
}
}

View file

@ -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"

View file

@ -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?,