package com.petrovv.gogameclock import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.Button import androidx.compose.material3.RadioButton import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp enum class TimingOption(val displayName: String) { Absolute("Absolute Timing"), Fischer("Fischer Timing"), Canadian("Canadian Timing"), Japan("Japan Timing"), } @Composable fun SettingsScreen( modifier: Modifier = Modifier, onTimingChange: (IClock, IClock) -> Unit ) { var t1 by remember { mutableStateOf("1200") } var t2 by remember { mutableStateOf("60") } var t3 by remember { mutableStateOf("25") } val timingOptions = remember { TimingOption.entries } var selectedTiming by remember { mutableStateOf(TimingOption.Absolute) } Column( modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text(text = "Settings") Spacer(modifier = Modifier.height(16.dp)) TextField( value = t1, onValueChange = { t1 = it }, label = { Text("Main time (s)") }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), ) Column { timingOptions.forEach { timingType -> Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .selectable( selected = (timingType == selectedTiming), onClick = { selectedTiming = timingType } ) .padding(horizontal = 16.dp) ) { RadioButton( selected = (timingType == selectedTiming), onClick = { selectedTiming = timingType } ) Text( text = timingType.displayName, modifier = Modifier.padding(start = 16.dp) ) } } } var text1 = "" var text2 = "" var show1 = false var show2 = false when (selectedTiming) { TimingOption.Absolute -> {} TimingOption.Fischer -> { text1 = "Increment (s)" show1 = true } TimingOption.Canadian -> { text1 = "byo-yomi time (s)" text2 = "byo-yomi stones" show1 = true show2 = true } TimingOption.Japan -> { text1 = "byo-yomi time (s)" text2 = "byo-yomi periods" show1 = true show2 = true } } if (show1) { Spacer(modifier = Modifier.height(8.dp)) TextField( value = t2, onValueChange = { t2 = it }, label = { Text(text1) }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number) ) } if (show2) { Spacer(modifier = Modifier.height(8.dp)) TextField( value = t3, onValueChange = { t3 = it }, label = { Text(text2) }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number) ) } Spacer(modifier = Modifier.height(16.dp)) Button(onClick = { val v1 = t1.toLongOrNull() ?: 25 val v2 = t2.toLongOrNull() ?: 25 val v3 = t3.toLongOrNull() ?: 25 when (selectedTiming) { TimingOption.Absolute -> onTimingChange(AbsoluteTiming(v1), AbsoluteTiming(v1)) TimingOption.Fischer -> { onTimingChange( FischerTiming(v1, v2), FischerTiming(v1, v2) ) } TimingOption.Canadian -> { onTimingChange( CanadianTiming(v1, v2, v3), CanadianTiming(v1, v2, v3) ) } TimingOption.Japan -> { onTimingChange( JapanTiming(v1, v2, v3), JapanTiming(v1, v2, v3) ) } } }) { Text(text = "Start Game") } } }