Optimize SafeDrawing fullscreen; set dialogs to 55% - android
This commit is contained in:
parent
db71756ed1
commit
203c14c457
4 changed files with 56 additions and 16 deletions
|
|
@ -8,6 +8,7 @@ import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
|
import android.view.View
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
|
|
@ -16,6 +17,7 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.CompositionLocalProvider
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
|
|
@ -62,11 +64,27 @@ class MainActivity : ComponentActivity() {
|
||||||
windowInsetsController.systemBarsBehavior =
|
windowInsetsController.systemBarsBehavior =
|
||||||
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
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) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
window.attributes.layoutInDisplayCutoutMode =
|
window.attributes.layoutInDisplayCutoutMode =
|
||||||
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
|
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
window.decorView.setOnSystemUiVisibilityChangeListener(null)
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(window.decorView, null)
|
||||||
|
windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_DEFAULT
|
||||||
windowInsetsController.show(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars())
|
windowInsetsController.show(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -110,9 +110,18 @@ fun MainScreenWithDrawer(
|
||||||
val isFullScreenEnabled by sharedScreenModel.isFullScreen.collectAsState()
|
val isFullScreenEnabled by sharedScreenModel.isFullScreen.collectAsState()
|
||||||
val fullscreenController = LocalFullscreenController.current
|
val fullscreenController = LocalFullscreenController.current
|
||||||
|
|
||||||
LaunchedEffect(isFullScreenEnabled) {
|
LaunchedEffect(isFullScreenEnabled, isSearchActive) {
|
||||||
fullscreenController(isFullScreenEnabled)
|
if(isFullScreenEnabled) {
|
||||||
|
fullscreenController(true)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
val isImeVisible = WindowInsets.ime.asPaddingValues().calculateBottomPadding() > 0.dp
|
||||||
|
LaunchedEffect(isImeVisible) {
|
||||||
|
if (!isImeVisible && isFullScreenEnabled) {
|
||||||
|
fullscreenController(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val fileContent = sharedScreenModel.fileContent.value ?: ""
|
val fileContent = sharedScreenModel.fileContent.value ?: ""
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
if(fileContent == "") {
|
if(fileContent == "") {
|
||||||
|
|
@ -214,6 +223,8 @@ fun MainScreenWithDrawer(
|
||||||
songComp = songComposer,
|
songComp = songComposer,
|
||||||
songRythm = songRhythm
|
songRythm = songRhythm
|
||||||
)
|
)
|
||||||
|
val platform = getPlatform()
|
||||||
|
val isAndroid = platform.name.startsWith("Android")
|
||||||
|
|
||||||
if (showPrintSettings) {
|
if (showPrintSettings) {
|
||||||
PrintSettingsDialog(
|
PrintSettingsDialog(
|
||||||
|
|
@ -223,7 +234,8 @@ fun MainScreenWithDrawer(
|
||||||
onConfirm = { settings ->
|
onConfirm = { settings ->
|
||||||
showPrintSettings = false
|
showPrintSettings = false
|
||||||
pdfExportAction(settings)
|
pdfExportAction(settings)
|
||||||
}
|
},
|
||||||
|
isAndroid
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -234,13 +246,12 @@ fun MainScreenWithDrawer(
|
||||||
onDismissRequest = {
|
onDismissRequest = {
|
||||||
showSettingsDialog = false
|
showSettingsDialog = false
|
||||||
},
|
},
|
||||||
expandedDropdown
|
expandedDropdown,
|
||||||
|
isAndroid
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val favoritePaths by sharedScreenModel.playlistItems.collectAsState()
|
val favoritePaths by sharedScreenModel.playlistItems.collectAsState()
|
||||||
BoxWithConstraints(modifier = Modifier.fillMaxSize()) {
|
BoxWithConstraints(modifier = Modifier.fillMaxSize()) {
|
||||||
val platform = getPlatform()
|
|
||||||
val isAndroid = platform.name.startsWith("Android")
|
|
||||||
val topAppBarHeight = if (isAndroid) {
|
val topAppBarHeight = if (isAndroid) {
|
||||||
if(maxWidth > maxHeight) {
|
if(maxWidth > maxHeight) {
|
||||||
55.dp
|
55.dp
|
||||||
|
|
@ -248,11 +259,11 @@ fun MainScreenWithDrawer(
|
||||||
if (isFullScreenEnabled) 70.dp else 80.dp
|
if (isFullScreenEnabled) 70.dp else 80.dp
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
55.dp
|
50.dp
|
||||||
}
|
}
|
||||||
|
val isLandscape = maxWidth > maxHeight
|
||||||
Scaffold(
|
Scaffold(
|
||||||
contentWindowInsets = if (isAndroid && !isFullScreenEnabled) {
|
contentWindowInsets = if (isAndroid && !isFullScreenEnabled && !isLandscape) {
|
||||||
WindowInsets.safeDrawing.union(WindowInsets.displayCutout)
|
WindowInsets.safeDrawing.union(WindowInsets.displayCutout)
|
||||||
} else {
|
} else {
|
||||||
WindowInsets(0, 0, 0, 0)
|
WindowInsets(0, 0, 0, 0)
|
||||||
|
|
@ -261,8 +272,8 @@ fun MainScreenWithDrawer(
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
modifier = Modifier.height(topAppBarHeight)
|
modifier = Modifier.height(topAppBarHeight)
|
||||||
.windowInsetsPadding(
|
.windowInsetsPadding(
|
||||||
if (isAndroid && !isFullScreenEnabled) {
|
if (isAndroid && !isFullScreenEnabled && !isLandscape) {
|
||||||
WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal)
|
WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top)
|
||||||
} else {
|
} else {
|
||||||
WindowInsets(0, 0, 0, 0)
|
WindowInsets(0, 0, 0, 0)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import mg.dot.feufaro.pdf.PageOrientation
|
import mg.dot.feufaro.pdf.PageOrientation
|
||||||
import mg.dot.feufaro.pdf.PageSize
|
import mg.dot.feufaro.pdf.PageSize
|
||||||
import mg.dot.feufaro.pdf.PrintSettings
|
import mg.dot.feufaro.pdf.PrintSettings
|
||||||
|
|
@ -34,6 +35,7 @@ fun PrintSettingsDialog(
|
||||||
initialSettings: PrintSettings = defaultPrintSettings(),
|
initialSettings: PrintSettings = defaultPrintSettings(),
|
||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
onConfirm: (PrintSettings) -> Unit,
|
onConfirm: (PrintSettings) -> Unit,
|
||||||
|
isAndroid: Boolean
|
||||||
) {
|
) {
|
||||||
// ── État local (copie mutable des paramètres) ─────────────────────────────
|
// ── État local (copie mutable des paramètres) ─────────────────────────────
|
||||||
var pageSize by remember { mutableStateOf(initialSettings.pageSize) }
|
var pageSize by remember { mutableStateOf(initialSettings.pageSize) }
|
||||||
|
|
@ -51,11 +53,15 @@ fun PrintSettingsDialog(
|
||||||
var headerH by remember { mutableStateOf(initialSettings.headerH) }
|
var headerH by remember { mutableStateOf(initialSettings.headerH) }
|
||||||
var nbGridOnMeasure by remember { mutableStateOf(initialSettings.nbGridOnMeasure) }
|
var nbGridOnMeasure by remember { mutableStateOf(initialSettings.nbGridOnMeasure) }
|
||||||
|
|
||||||
Dialog(onDismissRequest = onDismiss) {
|
Dialog(
|
||||||
|
properties = DialogProperties(
|
||||||
|
usePlatformDefaultWidth = false
|
||||||
|
),
|
||||||
|
onDismissRequest = onDismiss
|
||||||
|
) {
|
||||||
Surface(
|
Surface(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth(0.92f)
|
.fillMaxWidth(if(isAndroid) 0.9f else 0.55f),
|
||||||
.fillMaxHeight(0.92f),
|
|
||||||
shape = RoundedCornerShape(16.dp),
|
shape = RoundedCornerShape(16.dp),
|
||||||
tonalElevation = 8.dp,
|
tonalElevation = 8.dp,
|
||||||
color = MaterialTheme.colorScheme.surface
|
color = MaterialTheme.colorScheme.surface
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import feufaro.composeapp.generated.resources.Emmentaler
|
import feufaro.composeapp.generated.resources.Emmentaler
|
||||||
import feufaro.composeapp.generated.resources.Res
|
import feufaro.composeapp.generated.resources.Res
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
@ -44,7 +45,8 @@ import org.koin.compose.koinInject
|
||||||
fun Settings(
|
fun Settings(
|
||||||
sharedScreenModel: SharedScreenModel,
|
sharedScreenModel: SharedScreenModel,
|
||||||
onDismissRequest: () -> Unit,
|
onDismissRequest: () -> Unit,
|
||||||
expandedDropdownN: Boolean
|
expandedDropdownN: Boolean,
|
||||||
|
isAndroid: Boolean
|
||||||
) {
|
) {
|
||||||
var isDynamicEnabled by remember { mutableStateOf(Dynamic.isGloballyEnabled) }
|
var isDynamicEnabled by remember { mutableStateOf(Dynamic.isGloballyEnabled) }
|
||||||
var refreshTrigger by remember { mutableStateOf(0) }
|
var refreshTrigger by remember { mutableStateOf(0) }
|
||||||
|
|
@ -102,8 +104,11 @@ fun Settings(
|
||||||
}
|
}
|
||||||
|
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
|
properties = DialogProperties(
|
||||||
|
usePlatformDefaultWidth = false
|
||||||
|
),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize(),
|
.fillMaxWidth(if(isAndroid) 0.9f else 0.55f),
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
title = {
|
title = {
|
||||||
Text(
|
Text(
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue