feat: Add image viewer state management to disable swipe-back when photo is fullscreen

This commit is contained in:
k1ngsterr1
2026-02-07 18:44:24 +05:00
parent b49d08b61b
commit fdc4f42e1d
2 changed files with 13 additions and 3 deletions

View File

@@ -799,10 +799,14 @@ fun MainScreen(
) )
} }
// 🖼️ Image viewer state — disable swipe-back when photo is fullscreen
var isImageViewerOpen by remember { mutableStateOf(false) }
SwipeBackContainer( SwipeBackContainer(
isVisible = selectedUser != null, isVisible = selectedUser != null,
onBack = { selectedUser = null }, onBack = { selectedUser = null },
isDarkTheme = isDarkTheme isDarkTheme = isDarkTheme,
swipeEnabled = !isImageViewerOpen
) { ) {
if (selectedUser != null) { if (selectedUser != null) {
// Экран чата // Экран чата
@@ -821,7 +825,10 @@ fun MainScreen(
selectedUser = forwardUser selectedUser = forwardUser
}, },
isDarkTheme = isDarkTheme, isDarkTheme = isDarkTheme,
avatarRepository = avatarRepository avatarRepository = avatarRepository,
onImageViewerChanged = { isOpen ->
isImageViewerOpen = isOpen
}
) )
} }
} }

View File

@@ -114,7 +114,8 @@ fun ChatDetailScreen(
currentUserPrivateKey: String, currentUserPrivateKey: String,
totalUnreadFromOthers: Int = 0, totalUnreadFromOthers: Int = 0,
isDarkTheme: Boolean, isDarkTheme: Boolean,
avatarRepository: AvatarRepository? = null avatarRepository: AvatarRepository? = null,
onImageViewerChanged: (Boolean) -> Unit = {}
) { ) {
val viewModel: ChatViewModel = viewModel(key = "chat_${user.publicKey}") val viewModel: ChatViewModel = viewModel(key = "chat_${user.publicKey}")
val context = LocalContext.current val context = LocalContext.current
@@ -1813,6 +1814,7 @@ fun ChatDetailScreen(
imageViewerInitialIndex = findImageIndex(allImages, attachmentId) imageViewerInitialIndex = findImageIndex(allImages, attachmentId)
imageViewerSourceBounds = bounds imageViewerSourceBounds = bounds
showImageViewer = true showImageViewer = true
onImageViewerChanged(true)
} }
) )
} }
@@ -1886,6 +1888,7 @@ fun ChatDetailScreen(
onDismiss = { onDismiss = {
showImageViewer = false showImageViewer = false
imageViewerSourceBounds = null imageViewerSourceBounds = null
onImageViewerChanged(false)
}, },
onClosingStart = { onClosingStart = {
// Сразу сбрасываем status bar при начале закрытия (до анимации) // Сразу сбрасываем status bar при начале закрытия (до анимации)