diff --git a/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt b/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt index 7859da6..c41fa27 100644 --- a/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt +++ b/app/src/main/kotlin/com/aliucord/manager/MainActivity.kt @@ -10,7 +10,6 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent import androidx.compose.animation.core.* -import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.unit.IntOffset import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen @@ -20,10 +19,9 @@ import cafe.adriel.voyager.navigator.* import cafe.adriel.voyager.transitions.SlideTransition import com.aliucord.manager.manager.OverlayManager import com.aliucord.manager.manager.PreferencesManager -import com.aliucord.manager.ui.components.ManagerTheme -import com.aliucord.manager.ui.components.Theme import com.aliucord.manager.ui.components.dialogs.StoragePermissionsDialog import com.aliucord.manager.ui.screens.home.HomeScreen +import com.aliucord.manager.ui.theme.ManagerTheme import com.aliucord.manager.ui.widgets.updater.UpdaterDialog import com.aliucord.manager.util.IS_CUSTOM_BUILD import com.aliucord.manager.util.back @@ -42,8 +40,8 @@ class MainActivity : ComponentActivity() { setContent { ManagerTheme( - isDarkTheme = preferences.theme == Theme.DARK || preferences.theme == Theme.SYSTEM && isSystemInDarkTheme(), - isDynamicColor = preferences.dynamicColor + theme = preferences.theme, + dynamicColor = preferences.dynamicColor, ) { StoragePermissionsDialog() diff --git a/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt b/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt index 327585b..6096c6b 100644 --- a/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt +++ b/app/src/main/kotlin/com/aliucord/manager/manager/PreferencesManager.kt @@ -3,12 +3,12 @@ package com.aliucord.manager.manager import android.content.SharedPreferences import androidx.compose.runtime.Stable import com.aliucord.manager.manager.base.BasePreferenceManager -import com.aliucord.manager.ui.components.Theme +import com.aliucord.manager.ui.theme.Theme @Stable class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager(preferences) { - var theme by enumPreference("theme", Theme.DARK) - var dynamicColor by booleanPreference("dynamic_color", false) + var theme by enumPreference("theme", Theme.System) + var dynamicColor by booleanPreference("dynamic_color", true) var devMode by booleanPreference("dev_mode", false) var installer by enumPreference("installer", InstallerSetting.PM) var keepPatchedApks by booleanPreference("keep_patched_apks", false) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/PlayProtectDialog.kt b/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/PlayProtectDialog.kt index f63cacf..00e0150 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/PlayProtectDialog.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/PlayProtectDialog.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.window.DialogProperties import com.aliucord.manager.R -import com.aliucord.manager.ui.components.customColors +import com.aliucord.manager.ui.theme.customColors @Composable fun PlayProtectDialog( diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/TextBannerPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/TextBannerPreview.kt index 28aae8a..cedc592 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/TextBannerPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/TextBannerPreview.kt @@ -9,9 +9,9 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.* import com.aliucord.manager.R -import com.aliucord.manager.ui.components.ManagerTheme -import com.aliucord.manager.ui.components.customColors import com.aliucord.manager.ui.screens.patching.components.TextBanner +import com.aliucord.manager.ui.theme.ManagerTheme +import com.aliucord.manager.ui.theme.customColors @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/DeleteLogsDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/DeleteLogsDialogPreview.kt index 52bdf57..d9e63b3 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/DeleteLogsDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/DeleteLogsDialogPreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.dialogs import android.content.res.Configuration import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.logs.components.dialogs.DeleteLogsDialog +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/InstallerAbortDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/InstallerAbortDialogPreview.kt index f4270c7..bd8e097 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/InstallerAbortDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/InstallerAbortDialogPreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.dialogs import android.content.res.Configuration import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.components.dialogs.InstallerAbortDialog +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/NetworkWarningDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/NetworkWarningDialogPreview.kt index 711e967..f178308 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/NetworkWarningDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/NetworkWarningDialogPreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.dialogs import android.content.res.Configuration import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.components.dialogs.NetworkWarningDialog +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/PlayProtectDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/PlayProtectDialogPreview.kt index 5cfd099..1a49a98 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/PlayProtectDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/PlayProtectDialogPreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.dialogs import android.content.res.Configuration import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.components.dialogs.PlayProtectDialog +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/StoragePermissionsDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/StoragePermissionsDialogPreview.kt index aabebb1..6110bde 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/StoragePermissionsDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/StoragePermissionsDialogPreview.kt @@ -5,9 +5,9 @@ import android.os.Build import androidx.annotation.RequiresApi import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.components.dialogs.ExternalStorageDialog import com.aliucord.manager.ui.components.dialogs.ManageStorageDialog +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @RequiresApi(Build.VERSION_CODES.R) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/ThemeDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/ThemeDialogPreview.kt index 3b52d84..bf1cb23 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/ThemeDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/ThemeDialogPreview.kt @@ -3,15 +3,15 @@ package com.aliucord.manager.ui.previews.dialogs import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme -import com.aliucord.manager.ui.components.Theme import com.aliucord.manager.ui.screens.settings.components.ThemeDialog +import com.aliucord.manager.ui.theme.ManagerTheme +import com.aliucord.manager.ui.theme.Theme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun ThemeDialogPreview() { - val (theme, setTheme) = remember { mutableStateOf(Theme.SYSTEM) } + val (theme, setTheme) = remember { mutableStateOf(Theme.System) } ManagerTheme { ThemeDialog( diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UninstallPluginDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UninstallPluginDialogPreview.kt index aed470a..72cd062 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UninstallPluginDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UninstallPluginDialogPreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.dialogs import android.content.res.Configuration import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.plugins.components.dialogs.UninstallPluginDialog +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UnknownSourcesPermissionDialogPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UnknownSourcesPermissionDialogPreview.kt index e81e278..ca55ca4 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UnknownSourcesPermissionDialogPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/dialogs/UnknownSourcesPermissionDialogPreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.dialogs import android.content.res.Configuration import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.components.dialogs.UnknownSourcesPermissionDialog +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/IconOptionsScreenPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/IconOptionsScreenPreview.kt index 00b8a3e..9ccbe25 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/IconOptionsScreenPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/IconOptionsScreenPreview.kt @@ -11,10 +11,10 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.* import androidx.core.graphics.drawable.toBitmap import com.aliucord.manager.R -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.iconopts.IconOptionsMode import com.aliucord.manager.ui.screens.iconopts.IconOptionsScreenContent import com.aliucord.manager.ui.screens.patchopts.PatchOptions.IconReplacement +import com.aliucord.manager.ui.theme.ManagerTheme import dev.zt64.compose.pipette.HsvColor import java.io.ByteArrayOutputStream diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/PatchOptionsScreenPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/PatchOptionsScreenPreview.kt index 320f7ef..ae59b35 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/PatchOptionsScreenPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/PatchOptionsScreenPreview.kt @@ -4,8 +4,8 @@ import android.content.res.Configuration import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.* -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.patchopts.* +import com.aliucord.manager.ui.theme.ManagerTheme // This preview has scrollable/interactable content that cannot be tested from an IDE preview diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenFailedPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenFailedPreview.kt index d73e2c8..c4cf083 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenFailedPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenFailedPreview.kt @@ -3,9 +3,9 @@ package com.aliucord.manager.ui.previews.screens.about import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.about.AboutScreenContent import com.aliucord.manager.ui.screens.about.AboutScreenState +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadedPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadedPreview.kt index 7b0df16..5713fec 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadedPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadedPreview.kt @@ -4,9 +4,9 @@ import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.* import com.aliucord.manager.network.models.Contributor -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.about.AboutScreenContent import com.aliucord.manager.ui.screens.about.AboutScreenState +import com.aliucord.manager.ui.theme.ManagerTheme import com.aliucord.manager.ui.util.emptyImmutableList import com.aliucord.manager.util.serialization.ImmutableListSerializer import kotlinx.collections.immutable.* diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadingPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadingPreview.kt index 1c803a2..036dec7 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadingPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/about/AboutScreenLoadingPreview.kt @@ -3,9 +3,9 @@ package com.aliucord.manager.ui.previews.screens.about import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.about.AboutScreenContent import com.aliucord.manager.ui.screens.about.AboutScreenState +import com.aliucord.manager.ui.theme.ManagerTheme // This preview cannot be properly viewed from an IDE diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenFailedPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenFailedPreview.kt index 701ed73..c27bbd9 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenFailedPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenFailedPreview.kt @@ -4,9 +4,9 @@ import android.content.res.Configuration import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.home.HomeScreenFailureContent import com.aliucord.manager.ui.screens.home.components.HomeAppBar +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadedPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadedPreview.kt index d1f3ee5..75da5dd 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadedPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadedPreview.kt @@ -7,9 +7,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.tooling.preview.* -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.home.* import com.aliucord.manager.ui.screens.home.components.HomeAppBar +import com.aliucord.manager.ui.theme.ManagerTheme import com.aliucord.manager.ui.util.DiscordVersion import io.ktor.util.decodeBase64Bytes import kotlinx.collections.immutable.persistentListOf diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadingPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadingPreview.kt index 5c2e7ce..a46ea30 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadingPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenLoadingPreview.kt @@ -4,9 +4,9 @@ import android.content.res.Configuration import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.home.HomeScreenLoadingContent import com.aliucord.manager.ui.screens.home.components.HomeAppBar +import com.aliucord.manager.ui.theme.ManagerTheme // This preview cannot be properly viewed from an IDE preview diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenNonePreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenNonePreview.kt index 57500c1..0dff173 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenNonePreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/home/HomeScreenNonePreview.kt @@ -4,9 +4,9 @@ import android.content.res.Configuration import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.home.HomeScreenNoneContent import com.aliucord.manager.ui.screens.home.components.HomeAppBar +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenLoadedPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenLoadedPreview.kt index 97b648d..5c33796 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenLoadedPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenLoadedPreview.kt @@ -5,9 +5,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.logs.LogEntry import com.aliucord.manager.ui.screens.logs.LogsScreenContent +import com.aliucord.manager.ui.theme.ManagerTheme import kotlinx.collections.immutable.persistentListOf import java.util.UUID diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenNonePreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenNonePreview.kt index 9e24f8c..33dbcff 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenNonePreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/logs/LogsListScreenNonePreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.screens.logs import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.logs.LogsScreenContent +import com.aliucord.manager.ui.theme.ManagerTheme @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenFailedPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenFailedPreview.kt index ff26eef..2463b1d 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenFailedPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenFailedPreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.screens.plugins import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.plugins.PluginsScreenContent +import com.aliucord.manager.ui.theme.ManagerTheme import com.aliucord.manager.ui.util.emptyImmutableList // This preview has interactable content that cannot be tested from an IDE preview diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenLoadedPreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenLoadedPreview.kt index 4ac83f1..57bf31f 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenLoadedPreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenLoadedPreview.kt @@ -3,10 +3,10 @@ package com.aliucord.manager.ui.previews.screens.plugins import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.plugins.PluginsScreenContent import com.aliucord.manager.ui.screens.plugins.model.PluginItem import com.aliucord.manager.ui.screens.plugins.model.PluginManifest +import com.aliucord.manager.ui.theme.ManagerTheme import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import java.util.UUID diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenNonePreview.kt b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenNonePreview.kt index 830d9a0..fde4c00 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenNonePreview.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/previews/screens/plugins/PluginsScreenNonePreview.kt @@ -3,8 +3,8 @@ package com.aliucord.manager.ui.previews.screens.plugins import android.content.res.Configuration import androidx.compose.runtime.* import androidx.compose.ui.tooling.preview.Preview -import com.aliucord.manager.ui.components.ManagerTheme import com.aliucord.manager.ui.screens.plugins.PluginsScreenContent +import com.aliucord.manager.ui.theme.ManagerTheme import com.aliucord.manager.ui.util.emptyImmutableList // This preview has interactable content that cannot be tested from an IDE preview diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt index c2bc2da..eb17262 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt @@ -30,11 +30,13 @@ import cafe.adriel.voyager.navigator.currentOrThrow import com.aliucord.manager.BuildConfig import com.aliucord.manager.R import com.aliucord.manager.patcher.steps.StepGroup -import com.aliucord.manager.ui.components.* +import com.aliucord.manager.ui.components.MainActionButton +import com.aliucord.manager.ui.components.Wakelock import com.aliucord.manager.ui.components.dialogs.InstallerAbortDialog import com.aliucord.manager.ui.screens.log.LogScreen import com.aliucord.manager.ui.screens.patching.components.* import com.aliucord.manager.ui.screens.patchopts.PatchOptions +import com.aliucord.manager.ui.theme.customColors import com.aliucord.manager.ui.util.paddings.* import com.aliucord.manager.ui.util.spacedByLastAtBottom import com.aliucord.manager.ui.util.thenIf diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt index c8fb1f1..bec5fb7 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/SettingsModel.kt @@ -6,7 +6,7 @@ import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.screenModelScope import com.aliucord.manager.R import com.aliucord.manager.manager.PreferencesManager -import com.aliucord.manager.ui.components.Theme +import com.aliucord.manager.ui.theme.Theme import com.aliucord.manager.util.launchBlock import com.aliucord.manager.util.showToast import kotlinx.coroutines.delay diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/components/ThemeDialog.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/components/ThemeDialog.kt index c70904a..dee1729 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/components/ThemeDialog.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/settings/components/ThemeDialog.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.aliucord.manager.R -import com.aliucord.manager.ui.components.Theme +import com.aliucord.manager.ui.theme.Theme @Composable fun ThemeDialog( diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/Theme.kt b/app/src/main/kotlin/com/aliucord/manager/ui/theme/Theme.kt similarity index 60% rename from app/src/main/kotlin/com/aliucord/manager/ui/components/Theme.kt rename to app/src/main/kotlin/com/aliucord/manager/ui/theme/Theme.kt index 14f68c7..ea8d5cb 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/components/Theme.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/theme/Theme.kt @@ -3,7 +3,7 @@ * Licensed under the Open Software License version 3.0 */ -package com.aliucord.manager.ui.components +package com.aliucord.manager.ui.theme import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme @@ -18,18 +18,23 @@ import com.google.accompanist.systemuicontroller.rememberSystemUiController @Composable fun ManagerTheme( - isDarkTheme: Boolean = isSystemInDarkTheme(), - isDynamicColor: Boolean = true, + theme: Theme = Theme.System, + dynamicColor: Boolean = true, content: @Composable () -> Unit, ) { - val dynamicColor = isDynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + val dynamicColor = dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + val darkTheme = when (theme) { + Theme.System -> isSystemInDarkTheme() + Theme.Dark -> true + Theme.Light -> false + } val colorScheme = when { - dynamicColor && isDarkTheme -> dynamicDarkColorScheme(LocalContext.current) - dynamicColor && !isDarkTheme -> dynamicLightColorScheme(LocalContext.current) - isDarkTheme -> darkColorScheme() + dynamicColor && darkTheme -> dynamicDarkColorScheme(LocalContext.current) + dynamicColor && !darkTheme -> dynamicLightColorScheme(LocalContext.current) + darkTheme -> darkColorScheme() else -> lightColorScheme() } - val customColors = when (isDarkTheme) { + val customColors = when (darkTheme) { true -> DarkCustomColors false -> LightCustomColors } @@ -42,7 +47,7 @@ fun ManagerTheme( SideEffect { systemUiController.setSystemBarsColor( color = colorScheme.background, - darkIcons = !isDarkTheme + darkIcons = !darkTheme, ) systemUiController.setNavigationBarColor( color = Color.Transparent, @@ -52,27 +57,28 @@ fun ManagerTheme( CompositionLocalProvider(LocalCustomColors provides customColors) { MaterialTheme( colorScheme = colorScheme, - content = content + typography = ThemeTypography, + content = content, ) } } enum class Theme { - SYSTEM, - LIGHT, - DARK; + System, + Light, + Dark; @Composable fun toDisplayName() = when (this) { - SYSTEM -> stringResource(R.string.theme_system) - LIGHT -> stringResource(R.string.theme_light) - DARK -> stringResource(R.string.theme_dark) + System -> stringResource(R.string.theme_system) + Light -> stringResource(R.string.theme_light) + Dark -> stringResource(R.string.theme_dark) } @Composable fun toPainter() = when (this) { - SYSTEM -> painterResource(R.drawable.ic_sync) - LIGHT -> painterResource(R.drawable.ic_light) - DARK -> painterResource(R.drawable.ic_night) + System -> painterResource(R.drawable.ic_sync) + Light -> painterResource(R.drawable.ic_light) + Dark -> painterResource(R.drawable.ic_night) } } diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/CustomColors.kt b/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeCustomColors.kt similarity index 93% rename from app/src/main/kotlin/com/aliucord/manager/ui/components/CustomColors.kt rename to app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeCustomColors.kt index 4ce07e8..ff572e4 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/components/CustomColors.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeCustomColors.kt @@ -1,9 +1,10 @@ -package com.aliucord.manager.ui.components +package com.aliucord.manager.ui.theme import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.* import androidx.compose.ui.graphics.Color +@Suppress("UnusedReceiverParameter") val MaterialTheme.customColors: CustomColors @Composable inline get() = LocalCustomColors.current diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeTypography.kt b/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeTypography.kt new file mode 100644 index 0000000..580e2ac --- /dev/null +++ b/app/src/main/kotlin/com/aliucord/manager/ui/theme/ThemeTypography.kt @@ -0,0 +1,54 @@ +package com.aliucord.manager.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.ExperimentalTextApi +import androidx.compose.ui.text.font.* +import com.aliucord.manager.R + +// This uses a variable font variant of Roboto. +// ref: https://medium.com/androiddevelopers/just-your-type-variable-fonts-in-compose-5bf63b357994 + +@OptIn(ExperimentalTextApi::class) +val ThemeTypography = run { + val baseline = Typography() + + val weights = arrayOf( + FontWeight.Thin, + FontWeight.ExtraLight, + FontWeight.Light, + FontWeight.Normal, + FontWeight.Medium, + FontWeight.SemiBold, + FontWeight.ExtraBold, + FontWeight.Bold, + FontWeight.Black, + ) + val fonts = weights.map { weight -> + Font( + resId = R.font.roboto_variable, + weight = weight, + variationSettings = FontVariation.Settings( + FontVariation.weight(weight.weight), + ) + ) + } + val fontFamily = FontFamily(fonts) + + Typography( + displayLarge = baseline.displayLarge.copy(fontFamily = fontFamily), + displayMedium = baseline.displayMedium.copy(fontFamily = fontFamily), + displaySmall = baseline.displaySmall.copy(fontFamily = fontFamily), + headlineLarge = baseline.headlineLarge.copy(fontFamily = fontFamily), + headlineMedium = baseline.headlineMedium.copy(fontFamily = fontFamily), + headlineSmall = baseline.headlineSmall.copy(fontFamily = fontFamily), + titleLarge = baseline.titleLarge.copy(fontFamily = fontFamily), + titleMedium = baseline.titleMedium.copy(fontFamily = fontFamily), + titleSmall = baseline.titleSmall.copy(fontFamily = fontFamily), + bodyLarge = baseline.bodyLarge.copy(fontFamily = fontFamily), + bodyMedium = baseline.bodyMedium.copy(fontFamily = fontFamily), + bodySmall = baseline.bodySmall.copy(fontFamily = fontFamily), + labelLarge = baseline.labelLarge.copy(fontFamily = fontFamily), + labelMedium = baseline.labelMedium.copy(fontFamily = fontFamily), + labelSmall = baseline.labelSmall.copy(fontFamily = fontFamily), + ) +} diff --git a/app/src/main/res/font/roboto_variable.ttf b/app/src/main/res/font/roboto_variable.ttf new file mode 100644 index 0000000..bba55f6 Binary files /dev/null and b/app/src/main/res/font/roboto_variable.ttf differ