From 5e721d55f963f8ee729ce93b95116b51a9633c10 Mon Sep 17 00:00:00 2001 From: SpiritCroc Date: Thu, 8 Oct 2020 15:57:40 +0200 Subject: [PATCH] Add labs setting for following system dark mode < Android 10 Fixes https://github.com/SpiritCroc/SchildiChat-android/issues/19. Change-Id: I4fec536d3b491ef31c4ed51325a8300a5134e96c --- .../settings/VectorSettingsLabsFragment.kt | 23 +++++++++++++++++++ .../VectorSettingsPreferencesFragment.kt | 2 +- .../vector/app/features/themes/ThemeUtils.kt | 10 ++++++-- vector/src/main/res/values-de/strings_sc.xml | 2 ++ vector/src/main/res/values/strings_sc.xml | 2 ++ .../src/main/res/xml/vector_settings_labs.xml | 6 +++++ 6 files changed, 42 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt index c5366aa97e..599d07c3da 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt @@ -16,8 +16,11 @@ package im.vector.app.features.settings +import androidx.preference.Preference import im.vector.app.R +import im.vector.app.core.extensions.restart import im.vector.app.core.preference.VectorSwitchPreference +import im.vector.app.features.themes.ThemeUtils import javax.inject.Inject class VectorSettingsLabsFragment @Inject constructor( @@ -35,5 +38,25 @@ class VectorSettingsLabsFragment @Inject constructor( it.parent?.removePreference(it) } } + + val systemDarkThemePreTenPref = findPreference(ThemeUtils.SYSTEM_DARK_THEME_PRE_TEN) + systemDarkThemePreTenPref?.let { + if (ThemeUtils.darkThemeDefinitivelyPossible()) { + it.parent?.removePreference(it) + } + } + /* + systemDarkThemePreTenPref?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> + if (newValue is Boolean) { + if (ThemeUtils.shouldUseDarkTheme(requireContext())) { + // Restart the Activity | TODO: we need to do this AFTER the value is persisted... + activity?.restart() + } + true + } else { + false + } + } + */ } } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt index 0876dbda7a..2ead087ace 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt @@ -66,7 +66,7 @@ class VectorSettingsPreferencesFragment @Inject constructor( false } } - if (ThemeUtils.darkThemePossible()) { + if (ThemeUtils.darkThemePossible(requireContext())) { lightThemePref.title = getString(R.string.settings_light_theme) darkThemePref.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> if (newValue is String) { diff --git a/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt b/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt index 7f648754f2..aaa38c9292 100644 --- a/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt +++ b/vector/src/main/java/im/vector/app/features/themes/ThemeUtils.kt @@ -39,6 +39,7 @@ object ThemeUtils { // preference key const val APPLICATION_THEME_KEY = "APPLICATION_THEME_KEY" const val APPLICATION_DARK_THEME_KEY = "APPLICATION_DARK_THEME_KEY" + const val SYSTEM_DARK_THEME_PRE_TEN = "SYSTEM_DARK_THEME_PRE_TEN" // the theme possible values private const val THEME_DARK_VALUE = "dark" @@ -63,13 +64,18 @@ object ThemeUtils { /** * @return Whether a system-wide dark mode is available on this device */ - fun darkThemePossible(): Boolean { + fun darkThemePossible(context: Context): Boolean { + // On Lineage, available since 15.1: https://review.lineageos.org/c/LineageOS/android_frameworks_base/+/209022 + return darkThemeDefinitivelyPossible() || DefaultSharedPreferences.getInstance(context).getBoolean(SYSTEM_DARK_THEME_PRE_TEN, false) + } + + fun darkThemeDefinitivelyPossible(): Boolean { // Available since Android 10: https://developer.android.com/guide/topics/ui/look-and-feel/darktheme return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q } fun shouldUseDarkTheme(context: Context): Boolean { - if (!darkThemePossible()) { + if (!darkThemePossible(context)) { return false } val currentNightMode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK diff --git a/vector/src/main/res/values-de/strings_sc.xml b/vector/src/main/res/values-de/strings_sc.xml index 613c1823cb..892428865b 100644 --- a/vector/src/main/res/values-de/strings_sc.xml +++ b/vector/src/main/res/values-de/strings_sc.xml @@ -15,6 +15,8 @@ Helles Design Dunkles Design + Folge dem Systemdesign + Erlaube die separate Konfiguration eines hellen und dunklen Anwendungsdesigns. Deine aktuelle Android-Version unterstützt den Wechsel womöglich nicht! SC Hell SC Schwarz SC Dunkel diff --git a/vector/src/main/res/values/strings_sc.xml b/vector/src/main/res/values/strings_sc.xml index 15fdbbdf5f..ebff6f3451 100644 --- a/vector/src/main/res/values/strings_sc.xml +++ b/vector/src/main/res/values/strings_sc.xml @@ -15,6 +15,8 @@ Light theme Dark theme + Follow system dark theme + Provide separate theme settings for light and dark themes. Your current Android version might not support switching light and dark themes! SC Light SC Black SC Dark diff --git a/vector/src/main/res/xml/vector_settings_labs.xml b/vector/src/main/res/xml/vector_settings_labs.xml index 8183935e59..14571858de 100644 --- a/vector/src/main/res/xml/vector_settings_labs.xml +++ b/vector/src/main/res/xml/vector_settings_labs.xml @@ -34,6 +34,12 @@ + +