Move search to TopAppBar & Android fullscreen toggle in Settings
This commit is contained in:
parent
cbd0ccfd94
commit
b4e9578d5e
5 changed files with 73 additions and 45 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) }
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue