Optimize SafeDrawing fullscreen; set dialogs to 55% - android

This commit is contained in:
Hasinjato 2026-07-22 09:18:41 +03:00
parent db71756ed1
commit 203c14c457
4 changed files with 56 additions and 16 deletions

View file

@ -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())
}
}

View file

@ -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)
}

View file

@ -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

View file

@ -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(