Move search to TopAppBar & Android fullscreen toggle in Settings

This commit is contained in:
Hasinjato 2026-06-16 15:20:26 +03:00
parent cbd0ccfd94
commit b4e9578d5e
5 changed files with 73 additions and 45 deletions

View file

@ -13,11 +13,13 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
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.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import mg.dot.feufaro.ui.LocalFullscreenController
import org.koin.androidx.compose.KoinAndroidContext
import java.io.File
import java.util.zip.GZIPInputStream
@ -37,16 +39,37 @@ class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setFilePickerActivity(this)
WindowCompat.setDecorFitsSystemWindows(window, false)
hideSystemBar()
intent?.let { handleDeepLinkIntent(it) }
setContent {
KoinAndroidContext {
CompositionLocalProvider(
LocalFullscreenController provides { isFullScreen ->
updateSystemBarsVisibility(isFullScreen)
}
) {
App()
}
}
}
}
fun updateSystemBarsVisibility(isFullScreen: Boolean) {
val windowInsetsController = WindowCompat.getInsetsController(window, window.decorView)
if (isFullScreen) {
windowInsetsController.hide(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars())
windowInsetsController.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
window.attributes.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}
} else {
windowInsetsController.show(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars())
}
}
@Suppress("OVERRIDE_DEPRECATION")
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)

View file

@ -3,42 +3,17 @@ package mg.dot.feufaro
import SharedScreenModel
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.ime
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Edit
import androidx.compose.material3.Icon
import androidx.compose.material3.IconToggleButton
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
@ -50,9 +25,6 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup
import mg.dot.feufaro.solfa.LazyVerticalGridTUO
import mg.dot.feufaro.ui.MainScreenWithDrawer
import kotlin.math.roundToInt
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.koin.koinScreenModel
import kotlinx.coroutines.Dispatchers
@ -60,9 +32,12 @@ import kotlinx.coroutines.launch
import mg.dot.feufaro.data.GridTUOData
import mg.dot.feufaro.solfa.ColorPrefixB
import mg.dot.feufaro.solfa.EditSourceCompose
import mg.dot.feufaro.solfa.LazyVerticalGridTUO
import mg.dot.feufaro.ui.MainScreenWithDrawer
import mg.dot.feufaro.ui.MyVerticalScrollbar
import mg.dot.feufaro.viewmodel.SolfaScreenModel
import java.io.ObjectStreamException
import kotlin.math.roundToInt
object ScreenSolfa : Screen {
@Composable
@ -92,6 +67,7 @@ object ScreenSolfa : Screen {
}
val tuoEditState by sharedScreenModel.tuoEditState.collectAsState()
val isFullScreenEnabled by sharedScreenModel.isFullScreen.collectAsState()
LaunchedEffect(tuoEditState) {
tuoEditState?.let { state ->
@ -116,11 +92,16 @@ object ScreenSolfa : Screen {
},
solfaScrollState = scrollState
) { paddingValues ->
val partitionInsets = if (isFullScreenEnabled) {
WindowInsets(0, 0, 0, 0)
} else {
WindowInsets.ime
}
Box(
Modifier.fillMaxSize()
.padding(paddingValues)
.windowInsetsPadding(WindowInsets.safeDrawing)
.windowInsetsPadding(WindowInsets.ime)
.consumeWindowInsets(paddingValues)
.windowInsetsPadding(partitionInsets)
.padding(horizontal = 16.dp)
) {
Column(

View file

@ -20,19 +20,25 @@ 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 SharedScreenModel
import androidx.compose.material.icons.automirrored.filled.Undo
import mg.dot.feufaro.getPlatform
import mg.dot.feufaro.midi.Dynamic
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Settings(
sharedScreenModel: SharedScreenModel,
onDismissRequest: () -> Unit
) {
var isDynamicEnabled by remember { mutableStateOf(Dynamic.isGloballyEnabled) }
var refreshTrigger by remember { mutableStateOf(0) }
var expandedGeneral by remember { mutableStateOf(false) }
var expandedGeneral by remember { mutableStateOf(true) }
var expandedPrint by remember { mutableStateOf(false) }
var expandedAudio by remember { mutableStateOf(true) }
var expandedAudio by remember { mutableStateOf(false) }
val isFullScreenEnabled by sharedScreenModel.isFullScreen.collectAsState()
val platform = getPlatform()
val isAndroid = platform.name.startsWith("Android")
AlertDialog(
onDismissRequest = onDismissRequest,
title = {
@ -60,12 +66,20 @@ fun Settings(
modifier = Modifier.padding(8.dp),
verticalArrangement = Arrangement.spacedBy(10.dp)
) {
if(isAndroid) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text("Mode Plein Écran")
Switch(
checked = isFullScreenEnabled,
onCheckedChange = { isChecked ->
sharedScreenModel.toggleFullScreen(isChecked)
}
)
}
}
}
}
@ -128,7 +142,11 @@ fun Settings(
),
contentPadding = PaddingValues(horizontal = 16.dp, vertical = 8.dp)
) {
Text("Réinitialiser", fontSize = 14.sp)
Icon(
imageVector = Icons.AutoMirrored.Default.Undo,
contentDescription = null,
tint = Color.Red
)
}
}
}

View file

@ -58,7 +58,7 @@ fun SimpleDrawerContent(
val playList by sharedScreenModel.playlistItems.collectAsState()
val listState = rememberLazyListState()
var internalExpanded by remember { mutableStateOf(true) }
var internalExpanded by remember { mutableStateOf(false) }
var externalExpanded by remember { mutableStateOf(false) }
var playListExpanded by remember { mutableStateOf(false) }

View file

@ -226,6 +226,12 @@ class SharedScreenModel(private val fileRepository: FileRepository) : ScreenMode
fun toggleEditorMode(enabled: Boolean) {
_modeEditor.value = enabled
}
private val _isFullScreen = MutableStateFlow(false)
val isFullScreen = _isFullScreen.asStateFlow()
fun toggleFullScreen(enabled: Boolean) {
_isFullScreen.value = enabled
}
val transpositionInterval = MutableStateFlow(0)
fun setTranspositionInterval(interval: Int) {