1+ package dev.schlaubi.mastermind.ui.components.settings
2+
3+ import androidx.compose.animation.core.animateFloat
4+ import androidx.compose.animation.core.updateTransition
5+ import androidx.compose.foundation.layout.Arrangement
6+ import androidx.compose.foundation.layout.Row
7+ import androidx.compose.foundation.layout.fillMaxWidth
8+ import androidx.compose.material3.MaterialTheme
9+ import androidx.compose.material3.Switch
10+ import androidx.compose.material3.Text
11+ import androidx.compose.material3.contentColorFor
12+ import androidx.compose.runtime.Composable
13+ import androidx.compose.runtime.rememberCoroutineScope
14+ import androidx.compose.ui.Alignment
15+ import androidx.compose.ui.Modifier
16+ import androidx.compose.ui.unit.dp
17+ import dev.schlaubi.mastermind.core.settings.settings
18+ import dev.schlaubi.mastermind.core.settings.writeSettings
19+ import dev.schlaubi.mastermind.windows_helper.GTAVersion
20+ import kotlinx.coroutines.Dispatchers
21+ import kotlinx.coroutines.launch
22+
23+ @Composable
24+ fun VersionSwitcher (modifier : Modifier = Modifier ) {
25+ val scope = rememberCoroutineScope()
26+ InputWithHeading (" Version Switcher" , modifier) {
27+ Row (
28+ horizontalArrangement = Arrangement .spacedBy(10 .dp, Alignment .CenterHorizontally ),
29+ verticalAlignment = Alignment .CenterVertically ,
30+ modifier = Modifier .fillMaxWidth()
31+ ) {
32+ val currentVersion = settings.gtaVersion
33+ GTAVersion (" Legacy" , currentVersion == GTAVersion .LEGACY )
34+ Switch (currentVersion == GTAVersion .ENHANCED , {
35+ scope.launch(Dispatchers .IO ) {
36+ writeSettings(settings.copy(gtaVersion = if (it) GTAVersion .ENHANCED else GTAVersion .LEGACY ))
37+ }
38+ })
39+ GTAVersion (" Enhanced" , currentVersion == GTAVersion .ENHANCED )
40+ }
41+ }
42+ }
43+
44+ @Composable
45+ private fun GTAVersion (name : String , selected : Boolean ) {
46+ val transition = updateTransition(selected)
47+ val opacity = transition.animateFloat { if (it) 1f else 0.5f }
48+
49+ Text (name, color = contentColorFor(MaterialTheme .colorScheme.surface).copy(alpha = opacity.value))
50+ }
0 commit comments