From a3f157ab818fc48dc8feb1cfb6fe83d5d47d4fb4 Mon Sep 17 00:00:00 2001 From: Syer10 Date: Sun, 22 Aug 2021 19:29:47 -0400 Subject: [PATCH] Add support for detecting the system theme --- src/main/kotlin/ca/gosyer/data/ui/model/ThemeMode.kt | 2 +- src/main/kotlin/ca/gosyer/ui/base/theme/AppTheme.kt | 9 +++++---- src/main/kotlin/ca/gosyer/ui/main/main.kt | 6 ++++++ .../ca/gosyer/ui/settings/SettingsAppearanceScreen.kt | 2 +- src/main/resources/values/values/strings.xml | 1 + 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/ca/gosyer/data/ui/model/ThemeMode.kt b/src/main/kotlin/ca/gosyer/data/ui/model/ThemeMode.kt index 59a50843..f1a7c6fc 100644 --- a/src/main/kotlin/ca/gosyer/data/ui/model/ThemeMode.kt +++ b/src/main/kotlin/ca/gosyer/data/ui/model/ThemeMode.kt @@ -10,7 +10,7 @@ import kotlinx.serialization.Serializable @Serializable enum class ThemeMode { - /*System,*/ + System, Light, Dark, } diff --git a/src/main/kotlin/ca/gosyer/ui/base/theme/AppTheme.kt b/src/main/kotlin/ca/gosyer/ui/base/theme/AppTheme.kt index bf09d7cf..9479efca 100644 --- a/src/main/kotlin/ca/gosyer/ui/base/theme/AppTheme.kt +++ b/src/main/kotlin/ca/gosyer/ui/base/theme/AppTheme.kt @@ -7,6 +7,7 @@ package ca.gosyer.ui.base.theme import androidx.compose.desktop.DesktopMaterialTheme +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material.Colors import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState @@ -83,11 +84,11 @@ private class AppThemeViewModel @Inject constructor( } return when (themeMode) { - /*ThemeMode.System -> if (!isSystemInDarkTheme()) { - getTheme(lightTheme, true) + ThemeMode.System -> if (!isSystemInDarkTheme()) { + getTheme(lightTheme, true) } else { - getTheme(darkTheme, false) - }*/ + getTheme(darkTheme, false) + } ThemeMode.Light -> getTheme(lightTheme, true) ThemeMode.Dark -> getTheme(darkTheme, false) } diff --git a/src/main/kotlin/ca/gosyer/ui/main/main.kt b/src/main/kotlin/ca/gosyer/ui/main/main.kt index 717b5a58..d6788a2e 100644 --- a/src/main/kotlin/ca/gosyer/ui/main/main.kt +++ b/src/main/kotlin/ca/gosyer/ui/main/main.kt @@ -46,6 +46,8 @@ import com.github.zsoltk.compose.savedinstancestate.Bundle import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.launchIn +import org.jetbrains.skiko.SystemTheme +import org.jetbrains.skiko.currentSystemTheme import toothpick.configuration.Configuration import toothpick.ktp.KTP import toothpick.ktp.extension.getInstance @@ -98,6 +100,10 @@ suspend fun main() { return@getAsFlow } val theme = when (it) { + ThemeMode.System -> when (currentSystemTheme) { + SystemTheme.LIGHT, SystemTheme.UNKNOWN -> IntelliJTheme() + SystemTheme.DARK -> DarculaTheme() + } ThemeMode.Light -> IntelliJTheme() ThemeMode.Dark -> DarculaTheme() } diff --git a/src/main/kotlin/ca/gosyer/ui/settings/SettingsAppearanceScreen.kt b/src/main/kotlin/ca/gosyer/ui/settings/SettingsAppearanceScreen.kt index d88597bb..34cdf626 100644 --- a/src/main/kotlin/ca/gosyer/ui/settings/SettingsAppearanceScreen.kt +++ b/src/main/kotlin/ca/gosyer/ui/settings/SettingsAppearanceScreen.kt @@ -83,7 +83,7 @@ fun SettingsAppearance(navController: BackStack) { ChoicePreference( preference = vm.themeMode, choices = mapOf( - // ThemeMode.System to R.string.follow_system_settings, + ThemeMode.System to stringResource("theme_follow_system"), ThemeMode.Light to stringResource("theme_light"), ThemeMode.Dark to stringResource("theme_dark") ), diff --git a/src/main/resources/values/values/strings.xml b/src/main/resources/values/values/strings.xml index d8345b5a..0b326903 100644 --- a/src/main/resources/values/values/strings.xml +++ b/src/main/resources/values/values/strings.xml @@ -110,6 +110,7 @@ Theme + Follow system settings Light Dark Text