Protected Content: ensure that the ratio is not too extreme so that the "Show" button is always visible.
This commit is contained in:
parent
98520d3f67
commit
9aa8536d29
6 changed files with 52 additions and 9 deletions
|
|
@ -49,6 +49,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemImageContentProvider
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemImageContentProvider
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent
|
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent
|
||||||
import io.element.android.features.messages.impl.timeline.protection.ProtectedView
|
import io.element.android.features.messages.impl.timeline.protection.ProtectedView
|
||||||
|
import io.element.android.features.messages.impl.timeline.protection.coerceRatioWhenHidingContent
|
||||||
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
|
@ -79,7 +80,7 @@ fun TimelineItemImageView(
|
||||||
}
|
}
|
||||||
TimelineItemAspectRatioBox(
|
TimelineItemAspectRatioBox(
|
||||||
modifier = containerModifier.blurHashBackground(content.blurhash, alpha = 0.9f),
|
modifier = containerModifier.blurHashBackground(content.blurhash, alpha = 0.9f),
|
||||||
aspectRatio = content.aspectRatio,
|
aspectRatio = coerceRatioWhenHidingContent(content.aspectRatio, hideMediaContent),
|
||||||
) {
|
) {
|
||||||
ProtectedView(
|
ProtectedView(
|
||||||
hideContent = hideMediaContent,
|
hideContent = hideMediaContent,
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ import coil.compose.AsyncImagePainter
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStickerContent
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStickerContent
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStickerContentProvider
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStickerContentProvider
|
||||||
import io.element.android.features.messages.impl.timeline.protection.ProtectedView
|
import io.element.android.features.messages.impl.timeline.protection.ProtectedView
|
||||||
|
import io.element.android.features.messages.impl.timeline.protection.coerceRatioWhenHidingContent
|
||||||
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
|
@ -54,7 +55,7 @@ fun TimelineItemStickerView(
|
||||||
) {
|
) {
|
||||||
TimelineItemAspectRatioBox(
|
TimelineItemAspectRatioBox(
|
||||||
modifier = Modifier.blurHashBackground(content.blurhash, alpha = 0.9f),
|
modifier = Modifier.blurHashBackground(content.blurhash, alpha = 0.9f),
|
||||||
aspectRatio = content.aspectRatio,
|
aspectRatio = coerceRatioWhenHidingContent(content.aspectRatio, hideMediaContent),
|
||||||
minHeight = STICKER_SIZE_IN_DP,
|
minHeight = STICKER_SIZE_IN_DP,
|
||||||
maxHeight = STICKER_SIZE_IN_DP,
|
maxHeight = STICKER_SIZE_IN_DP,
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContentProvider
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContentProvider
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemVideoContent
|
import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemVideoContent
|
||||||
import io.element.android.features.messages.impl.timeline.protection.ProtectedView
|
import io.element.android.features.messages.impl.timeline.protection.ProtectedView
|
||||||
|
import io.element.android.features.messages.impl.timeline.protection.coerceRatioWhenHidingContent
|
||||||
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
||||||
import io.element.android.libraries.designsystem.modifiers.roundedBackground
|
import io.element.android.libraries.designsystem.modifiers.roundedBackground
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
|
|
@ -90,7 +91,7 @@ fun TimelineItemVideoView(
|
||||||
}
|
}
|
||||||
TimelineItemAspectRatioBox(
|
TimelineItemAspectRatioBox(
|
||||||
modifier = containerModifier.blurHashBackground(content.blurHash, alpha = 0.9f),
|
modifier = containerModifier.blurHashBackground(content.blurHash, alpha = 0.9f),
|
||||||
aspectRatio = content.aspectRatio,
|
aspectRatio = coerceRatioWhenHidingContent(content.aspectRatio, hideMediaContent),
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
) {
|
) {
|
||||||
ProtectedView(
|
ProtectedView(
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.messages.impl.timeline.protection
|
||||||
|
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
|
|
||||||
|
class AspectRatioPreviewProvider : PreviewParameterProvider<Float?> {
|
||||||
|
override val values: Sequence<Float?> = sequenceOf(
|
||||||
|
null,
|
||||||
|
0.05f,
|
||||||
|
1f,
|
||||||
|
20f,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -13,7 +13,6 @@ import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
|
@ -23,8 +22,10 @@ import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.semantics.Role
|
import androidx.compose.ui.semantics.Role
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import io.element.android.compound.theme.ElementTheme
|
import io.element.android.compound.theme.ElementTheme
|
||||||
|
import io.element.android.features.messages.impl.timeline.components.event.TimelineItemAspectRatioBox
|
||||||
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
import io.element.android.libraries.designsystem.components.blurhash.blurHashBackground
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
|
@ -79,11 +80,12 @@ fun ProtectedView(
|
||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
@Composable
|
@Composable
|
||||||
internal fun ProtectedViewPreview() = ElementPreview {
|
internal fun ProtectedViewPreview(
|
||||||
Box(
|
@PreviewParameter(AspectRatioPreviewProvider::class) aspectRatio: Float?,
|
||||||
modifier = Modifier
|
) = ElementPreview {
|
||||||
.size(160.dp)
|
TimelineItemAspectRatioBox(
|
||||||
.blurHashBackground(A_BLUR_HASH)
|
modifier = Modifier.blurHashBackground(A_BLUR_HASH, alpha = 0.9f),
|
||||||
|
aspectRatio = coerceRatioWhenHidingContent(aspectRatio, true),
|
||||||
) {
|
) {
|
||||||
ProtectedView(
|
ProtectedView(
|
||||||
hideContent = true,
|
hideContent = true,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.messages.impl.timeline.protection
|
||||||
|
|
||||||
|
fun coerceRatioWhenHidingContent(aspectRatio: Float?, hideContent: Boolean): Float? {
|
||||||
|
return if (hideContent) {
|
||||||
|
aspectRatio?.coerceIn(
|
||||||
|
minimumValue = 0.5f,
|
||||||
|
maximumValue = 3f
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
aspectRatio
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue