From 88b734cdc2937657d0ea6cda74a6fd3a6a7c6faa Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Mon, 17 Aug 2026 15:33:27 +0300 Subject: [PATCH] Improve ux by back btn to hide ui before exit - Android --- .../kotlin/mg/dot/feufaro/ScreenSolfa.kt | 4 --- .../kotlin/mg/dot/feufaro/ui/DrawerUI.kt | 26 ++++++++++++++----- .../mg/dot/feufaro/ui/SimpleDrawerContent.kt | 3 +-- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt index 5d3739b..ee88f35 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt @@ -56,7 +56,6 @@ object ScreenSolfa : Screen { var showContextualMenu = false var viewportHeight by remember { mutableStateOf(0) } - var isScanning by remember { mutableStateOf(false) } var qrCodeResult by remember { mutableStateOf("Aucun code scanné") } LaunchedEffect(Unit) { DeepLinkHandler.onSongReceived = { content, filePath -> @@ -88,9 +87,6 @@ object ScreenSolfa : Screen { solfaScreenModel, sharedScreenModel, qrCodeResult = qrCodeResult, - onScannerButtonClick = { - isScanning = true - }, solfaScrollState = scrollState ) { paddingValues -> Box( diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt index da3c775..4c3b6e2 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt @@ -40,6 +40,8 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import cafe.adriel.voyager.core.annotation.InternalVoyagerApi +import cafe.adriel.voyager.navigator.internal.BackHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -53,13 +55,13 @@ import mg.dot.feufaro.solfa.Transpose import mg.dot.feufaro.viewmodel.SolfaScreenModel import java.io.File -@OptIn(ExperimentalMaterial3Api::class) + +@OptIn(ExperimentalMaterial3Api::class, InternalVoyagerApi::class) @Composable fun MainScreenWithDrawer( solfaScreenModel: SolfaScreenModel, sharedScreenModel: SharedScreenModel, qrCodeResult: String, - onScannerButtonClick: () -> Unit, solfaScrollState: ScrollState, content: @Composable (PaddingValues) -> Unit, ) { @@ -199,6 +201,22 @@ fun MainScreenWithDrawer( val density = LocalDensity.current var keyboardHeightDp by remember { mutableStateOf(0.dp) } + BackHandler(enabled = isSearchActive) { + sharedScreenModel.showSearchMenu(false) + } + BackHandler(enabled = showMidiCtrl) { + sharedScreenModel.setMidiCtrl(false) + } + BackHandler(enabled = isQrVisible) { + sharedScreenModel.toggleQRCodeVisibility() + } + BackHandler(enabled = (!showMidiCtrl && isExpanded)) { + sharedScreenModel.setExpandedFAB(!isExpanded) + } + BackHandler(enabled = drawerState.isOpen) { + scope.launch { drawerState.close() } + } + ModalNavigationDrawer(drawerState = drawerState, drawerContent = { SimpleDrawerContent( items, @@ -207,10 +225,6 @@ fun MainScreenWithDrawer( currentActivePath, drawerState, scope, - onScannerButtonClick = { - scope.launch { drawerState.close() } - onScannerButtonClick() - }, onSongSelected = { newSong -> sharedScreenModel.loadNewSong("$midiFile") }, diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/SimpleDrawerContent.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/SimpleDrawerContent.kt index 29e0b13..f0a9524 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/SimpleDrawerContent.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/SimpleDrawerContent.kt @@ -45,7 +45,6 @@ fun SimpleDrawerContent( activePath: String = Solfa.currentFile, drawerState: DrawerState, scope: CoroutineScope, - onScannerButtonClick: () -> Unit, onSongSelected: (String) -> Unit, onSettingsCheck: () -> Unit, onAboutCheck: () -> Unit, @@ -195,7 +194,7 @@ fun SimpleDrawerContent( stickyHeader { DrawerHeaderSticky( - title = "Personnel", + title = "Fichiers locaux", icon = Icons.Default.LibraryMusic, isExpanded = externalExpanded, onToggle = { externalExpanded = !externalExpanded },