From 3c59ad4c410a08c1e864952e9458a023a81a753b Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 6 Dec 2024 00:27:26 +0100 Subject: [PATCH] removed light theme; added dynamic theme (cf. #75) --- .../de/jrpie/android/launcher/Application.kt | 3 ++ .../launcher/preferences/theme/ColorTheme.kt | 41 ++++++++++++++++--- .../launcher/SettingsFragmentLauncher.kt | 11 +++++ app/src/main/res/values/donottranslate.xml | 2 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 11 +++++ 6 files changed, 63 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/Application.kt b/app/src/main/java/de/jrpie/android/launcher/Application.kt index a262e68..25e3e07 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Application.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Application.kt @@ -19,6 +19,9 @@ class Application : android.app.Application() { override fun onCreate() { super.onCreate() + // TODO Error: Invalid resource ID 0x00000000. + // DynamicColors.applyToActivitiesIfAvailable(this) + if (Build.VERSION.SDK_INT >= VERSION_CODES.M) { torchManager = TorchManager(this) diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt index 28963bc..1e57f9f 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/theme/ColorTheme.kt @@ -1,20 +1,49 @@ package de.jrpie.android.launcher.preferences.theme +import android.content.Context import android.content.res.Resources import de.jrpie.android.launcher.R +import com.google.android.material.color.DynamicColors @Suppress("unused") -enum class ColorTheme(private val id: Int, private val shadowId: Int) { - DEFAULT(R.style.colorThemeDefault, R.style.textShadow), - DARK(R.style.colorThemeDark, R.style.textShadow), - LIGHT(R.style.colorThemeLight, R.style.textShadowLight), +enum class ColorTheme( + private val id: Int, + private val labelResource: Int, + private val shadowId: Int, + val isAvailable: () -> Boolean +) { + DEFAULT( + R.style.colorThemeDefault, + R.string.settings_theme_color_theme_item_default, + R.style.textShadow, + { true }), + DARK( + R.style.colorThemeDark, + R.string.settings_theme_color_theme_item_dark, + R.style.textShadow, + { true }), + LIGHT( + R.style.colorThemeLight, + R.string.settings_theme_color_theme_item_light, + R.style.textShadowLight, + { false }), + DYNAMIC( + R.style.colorThemeDynamic, + R.string.settings_theme_color_theme_item_dynamic, + R.style.textShadow, + { DynamicColors.isDynamicColorAvailable() }), ; fun applyToTheme(theme: Resources.Theme, shadow: Boolean) { - theme.applyStyle(id, true) + val colorTheme = if (this.isAvailable()) this else DEFAULT + theme.applyStyle(colorTheme.id, true) if (shadow) { - theme.applyStyle(shadowId, true) + theme.applyStyle(colorTheme.shadowId, true) } } + + fun getLabel(context: Context): String { + return context.getString(labelResource) + } } \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt index 7352535..0ae08c2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/launcher/SettingsFragmentLauncher.kt @@ -9,6 +9,7 @@ import de.jrpie.android.launcher.R import de.jrpie.android.launcher.actions.lock.LockMethod import de.jrpie.android.launcher.actions.openAppsList import de.jrpie.android.launcher.preferences.LauncherPreferences +import de.jrpie.android.launcher.preferences.theme.ColorTheme import de.jrpie.android.launcher.setDefaultHomeScreen @@ -86,6 +87,16 @@ class SettingsFragmentLauncher : PreferenceFragmentCompat() { true } + findPreference( + LauncherPreferences.theme().keys().colorTheme() + )?.apply { + entries = ColorTheme.entries.filter { x -> x.isAvailable() } + .map { x -> x.getLabel(requireContext()) }.toTypedArray() + entryValues = ColorTheme.entries.filter { x -> x.isAvailable() } + .map { x -> x.name }.toTypedArray() + } + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { lockMethod?.isVisible = false } diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index bac7a81..5da4aa2 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -66,11 +66,13 @@ DEFAULT DARK LIGHT + DYNAMIC @string/settings_theme_color_theme_item_default @string/settings_theme_color_theme_item_dark @string/settings_theme_color_theme_item_light + @string/settings_theme_color_theme_item_dynamic theme.text_shadow diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cfbf3fa..365be7d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -90,6 +90,7 @@ Default Dark Light + Dynamic Text shadow Background (app list and setting) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index c62faf2..ca18e65 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -51,6 +51,15 @@ @color/lightTheme_text_color + +