feat: auto-hide media viewer chrome
Some checks failed
Android CI / android (push) Failing after 5m14s
Android Release / release (push) Has started running
CI / test (push) Has been cancelled

This commit is contained in:
2026-04-06 01:57:37 +03:00
parent e75e201a0d
commit e966e54e3a

View File

@@ -2474,6 +2474,9 @@ private fun ChatMediaViewerOverlay(
var showTopBar by remember { mutableStateOf(true) }
var dismissProgress by remember { mutableStateOf(0f) }
val backgroundAlpha = (0.94f - (dismissProgress.coerceIn(0f, 1f) * 0.55f)).coerceIn(0.35f, 0.94f)
val toggleChrome: () -> Unit = {
showTopBar = !showTopBar
}
Surface(
modifier = Modifier
@@ -2487,8 +2490,8 @@ private fun ChatMediaViewerOverlay(
) {
AnimatedVisibility(
visible = showTopBar,
enter = fadeIn(),
exit = fadeOut(),
enter = fadeIn(animationSpec = tween(180)) + slideInVertically(initialOffsetY = { -it / 3 }),
exit = fadeOut(animationSpec = tween(120)) + slideOutVertically(targetOffsetY = { -it / 3 }),
) {
Row(
modifier = Modifier
@@ -2518,14 +2521,14 @@ private fun ChatMediaViewerOverlay(
ChatViewerMediaType.Image -> ZoomableImageViewerPage(
imageUrl = item.url,
onDismiss = onDismiss,
onToggleChrome = { showTopBar = !showTopBar },
onToggleChrome = toggleChrome,
onDismissProgressChanged = { dismissProgress = it },
)
ChatViewerMediaType.Video -> VideoViewerPage(
videoUrl = item.url,
isCurrentPage = pagerState.currentPage == page,
onDismiss = onDismiss,
onToggleChrome = { showTopBar = !showTopBar },
onToggleChrome = toggleChrome,
onDismissProgressChanged = { dismissProgress = it },
)
}
@@ -2533,8 +2536,8 @@ private fun ChatMediaViewerOverlay(
AnimatedVisibility(
visible = showTopBar && items.getOrNull(pagerState.currentPage)?.reactions?.isNotEmpty() == true,
enter = fadeIn(),
exit = fadeOut(),
enter = fadeIn(animationSpec = tween(180)) + slideInVertically(initialOffsetY = { it / 3 }),
exit = fadeOut(animationSpec = tween(120)) + slideOutVertically(targetOffsetY = { it / 3 }),
) {
Row(
modifier = Modifier
@@ -2566,8 +2569,15 @@ private fun ChatMediaViewerOverlay(
LaunchedEffect(pagerState.currentPage) {
dismissProgress = 0f
showTopBar = true
onPageChanged(pagerState.currentPage)
}
LaunchedEffect(showTopBar, pagerState.currentPage) {
if (!showTopBar || items.isEmpty()) return@LaunchedEffect
delay(2200)
showTopBar = false
}
}
@Composable