From 1a77654d2980b34e5ca3c7951556c718d43bc73e Mon Sep 17 00:00:00 2001 From: Anthony Berg Date: Sat, 10 Aug 2024 15:31:06 +0200 Subject: [PATCH] feat(settings): add option for different themes --- .../anthonyberg/veganenumbers/MainActivity.kt | 10 +++++- .../src/commonMain/kotlin/data/SettingsVar.kt | 7 ++++ .../commonMain/kotlin/tab/setting/Settings.kt | 34 ++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 composeApp/src/commonMain/kotlin/data/SettingsVar.kt diff --git a/composeApp/src/androidMain/kotlin/io/anthonyberg/veganenumbers/MainActivity.kt b/composeApp/src/androidMain/kotlin/io/anthonyberg/veganenumbers/MainActivity.kt index 527a5cc..0c1ea55 100644 --- a/composeApp/src/androidMain/kotlin/io/anthonyberg/veganenumbers/MainActivity.kt +++ b/composeApp/src/androidMain/kotlin/io/anthonyberg/veganenumbers/MainActivity.kt @@ -4,8 +4,10 @@ import App import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview +import data.SettingsVar import io.anthonyberg.veganenumbers.ui.theme.AppTheme class MainActivity : ComponentActivity() { @@ -13,7 +15,13 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) setContent { - AppTheme { + AppTheme( + darkTheme = when(SettingsVar.theme.value) { + 1 -> false + 2 -> true + else -> isSystemInDarkTheme() + } + ) { App() } } diff --git a/composeApp/src/commonMain/kotlin/data/SettingsVar.kt b/composeApp/src/commonMain/kotlin/data/SettingsVar.kt new file mode 100644 index 0000000..b3692b9 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/data/SettingsVar.kt @@ -0,0 +1,7 @@ +package data + +import androidx.compose.runtime.mutableIntStateOf + +object SettingsVar { + val theme = mutableIntStateOf(0) +} diff --git a/composeApp/src/commonMain/kotlin/tab/setting/Settings.kt b/composeApp/src/commonMain/kotlin/tab/setting/Settings.kt index ea1ece2..ad0b505 100644 --- a/composeApp/src/commonMain/kotlin/tab/setting/Settings.kt +++ b/composeApp/src/commonMain/kotlin/tab/setting/Settings.kt @@ -1,16 +1,22 @@ package tab.setting import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +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.input.nestedscroll.nestedScroll import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow +import data.SettingsVar object Settings : Screen { @@ -42,7 +48,33 @@ object Settings : Screen { @Composable private fun SettingsContent() { - Text("Theme") + Theme() Text("List Style") } + + /** + * ALl the different themes that can be picked + * - 0 - Auto + * - 1 - Light + * - 2 - Dark + */ + @Composable + private fun Theme() { + var mode by rememberSaveable { SettingsVar.theme } + val themes = listOf("Auto", "Light", "Dark") + + Text("Theme") + + for ((index, value) in themes.withIndex()) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + RadioButton( + selected = mode == index, + onClick = { mode = index } + ) + Text(value) + } + } + } }