From 203c14c457a7ac0c5e20d9bb38d864716883e9e5 Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Wed, 22 Jul 2026 09:18:41 +0300 Subject: [PATCH] Optimize SafeDrawing fullscreen; set dialogs to 55% - android --- .../kotlin/mg/dot/feufaro/MainActivity.kt | 18 ++++++++++ .../kotlin/mg/dot/feufaro/ui/DrawerUI.kt | 33 ++++++++++++------- .../mg/dot/feufaro/ui/PrintSettingsDialog.kt | 12 +++++-- .../kotlin/mg/dot/feufaro/ui/Settings.kt | 9 +++-- 4 files changed, 56 insertions(+), 16 deletions(-) diff --git a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt index aa5a1b2..ffb36e6 100644 --- a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt +++ b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt @@ -8,6 +8,7 @@ import android.os.Build import android.os.Bundle import android.os.Environment import android.util.Base64 +import android.view.View import android.view.WindowManager import androidx.activity.ComponentActivity import androidx.activity.compose.setContent @@ -16,6 +17,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.tooling.preview.Preview import androidx.core.app.ActivityCompat +import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat @@ -62,11 +64,27 @@ class MainActivity : ComponentActivity() { windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + window.decorView.setOnSystemUiVisibilityChangeListener { visibility -> + if (isFullScreen && (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { + windowInsetsController.hide(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars()) + } + } + // Empêcher de rétablir la StatusBar quand le clavier s'ouvre + ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, insets -> + if (isFullScreen) { + windowInsetsController.hide(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars()) + } + ViewCompat.onApplyWindowInsets(view, insets) + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES } } else { + window.decorView.setOnSystemUiVisibilityChangeListener(null) + ViewCompat.setOnApplyWindowInsetsListener(window.decorView, null) + windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_DEFAULT windowInsetsController.show(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars()) } } 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 3e2a413..9b1bba3 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/DrawerUI.kt @@ -110,9 +110,18 @@ fun MainScreenWithDrawer( val isFullScreenEnabled by sharedScreenModel.isFullScreen.collectAsState() val fullscreenController = LocalFullscreenController.current - LaunchedEffect(isFullScreenEnabled) { - fullscreenController(isFullScreenEnabled) + LaunchedEffect(isFullScreenEnabled, isSearchActive) { + if(isFullScreenEnabled) { + fullscreenController(true) + } } + val isImeVisible = WindowInsets.ime.asPaddingValues().calculateBottomPadding() > 0.dp + LaunchedEffect(isImeVisible) { + if (!isImeVisible && isFullScreenEnabled) { + fullscreenController(true) + } + } + val fileContent = sharedScreenModel.fileContent.value ?: "" LaunchedEffect(Unit) { if(fileContent == "") { @@ -214,6 +223,8 @@ fun MainScreenWithDrawer( songComp = songComposer, songRythm = songRhythm ) + val platform = getPlatform() + val isAndroid = platform.name.startsWith("Android") if (showPrintSettings) { PrintSettingsDialog( @@ -223,7 +234,8 @@ fun MainScreenWithDrawer( onConfirm = { settings -> showPrintSettings = false pdfExportAction(settings) - } + }, + isAndroid ) } @@ -234,13 +246,12 @@ fun MainScreenWithDrawer( onDismissRequest = { showSettingsDialog = false }, - expandedDropdown + expandedDropdown, + isAndroid ) } val favoritePaths by sharedScreenModel.playlistItems.collectAsState() BoxWithConstraints(modifier = Modifier.fillMaxSize()) { - val platform = getPlatform() - val isAndroid = platform.name.startsWith("Android") val topAppBarHeight = if (isAndroid) { if(maxWidth > maxHeight) { 55.dp @@ -248,11 +259,11 @@ fun MainScreenWithDrawer( if (isFullScreenEnabled) 70.dp else 80.dp } } else { - 55.dp + 50.dp } - + val isLandscape = maxWidth > maxHeight Scaffold( - contentWindowInsets = if (isAndroid && !isFullScreenEnabled) { + contentWindowInsets = if (isAndroid && !isFullScreenEnabled && !isLandscape) { WindowInsets.safeDrawing.union(WindowInsets.displayCutout) } else { WindowInsets(0, 0, 0, 0) @@ -261,8 +272,8 @@ fun MainScreenWithDrawer( TopAppBar( modifier = Modifier.height(topAppBarHeight) .windowInsetsPadding( - if (isAndroid && !isFullScreenEnabled) { - WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal) + if (isAndroid && !isFullScreenEnabled && !isLandscape) { + WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top) } else { WindowInsets(0, 0, 0, 0) } diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/PrintSettingsDialog.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/PrintSettingsDialog.kt index d873845..1459646 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/PrintSettingsDialog.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/PrintSettingsDialog.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties import mg.dot.feufaro.pdf.PageOrientation import mg.dot.feufaro.pdf.PageSize import mg.dot.feufaro.pdf.PrintSettings @@ -34,6 +35,7 @@ fun PrintSettingsDialog( initialSettings: PrintSettings = defaultPrintSettings(), onDismiss: () -> Unit, onConfirm: (PrintSettings) -> Unit, + isAndroid: Boolean ) { // ── État local (copie mutable des paramètres) ───────────────────────────── var pageSize by remember { mutableStateOf(initialSettings.pageSize) } @@ -51,11 +53,15 @@ fun PrintSettingsDialog( var headerH by remember { mutableStateOf(initialSettings.headerH) } var nbGridOnMeasure by remember { mutableStateOf(initialSettings.nbGridOnMeasure) } - Dialog(onDismissRequest = onDismiss) { + Dialog( + properties = DialogProperties( + usePlatformDefaultWidth = false + ), + onDismissRequest = onDismiss + ) { Surface( modifier = Modifier - .fillMaxWidth(0.92f) - .fillMaxHeight(0.92f), + .fillMaxWidth(if(isAndroid) 0.9f else 0.55f), shape = RoundedCornerShape(16.dp), tonalElevation = 8.dp, color = MaterialTheme.colorScheme.surface diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/Settings.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/Settings.kt index 59dd4ae..6c182fe 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/Settings.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ui/Settings.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.compose.ui.window.DialogProperties import feufaro.composeapp.generated.resources.Emmentaler import feufaro.composeapp.generated.resources.Res import kotlinx.coroutines.CoroutineScope @@ -44,7 +45,8 @@ import org.koin.compose.koinInject fun Settings( sharedScreenModel: SharedScreenModel, onDismissRequest: () -> Unit, - expandedDropdownN: Boolean + expandedDropdownN: Boolean, + isAndroid: Boolean ) { var isDynamicEnabled by remember { mutableStateOf(Dynamic.isGloballyEnabled) } var refreshTrigger by remember { mutableStateOf(0) } @@ -102,8 +104,11 @@ fun Settings( } AlertDialog( + properties = DialogProperties( + usePlatformDefaultWidth = false + ), modifier = Modifier - .fillMaxSize(), + .fillMaxWidth(if(isAndroid) 0.9f else 0.55f), onDismissRequest = onDismissRequest, title = { Text(