From e85045e17ab01c6d54518c2e787b7362dd911108 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 13 Feb 2024 22:15:47 +0100 Subject: [PATCH] UI: re-add OLED friendly (aka black) theme. Fixes #1625. --- .../opentracks/AbstractActivity.java | 5 ++++ .../opentracks/settings/PreferencesUtils.java | 26 ++++++++++++++----- .../UserInterfaceSettingsFragment.java | 5 +++- src/main/res/values/settings.xml | 3 +++ src/main/res/values/strings.xml | 1 + src/main/res/values/styles_theme.xml | 25 ++++++++++++++++++ 6 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/AbstractActivity.java b/src/main/java/de/dennisguse/opentracks/AbstractActivity.java index 4a6a9bb67..2e0ce5983 100644 --- a/src/main/java/de/dennisguse/opentracks/AbstractActivity.java +++ b/src/main/java/de/dennisguse/opentracks/AbstractActivity.java @@ -22,6 +22,7 @@ import androidx.appcompat.app.AppCompatActivity; import de.dennisguse.opentracks.services.announcement.TTSManager; +import de.dennisguse.opentracks.settings.PreferencesUtils; /** * @author Jimmy Shih @@ -36,6 +37,10 @@ protected void onCreate(Bundle savedInstanceState) { setVolumeControlStream(TTSManager.AUDIO_STREAM); setContentView(getRootView()); + + if (PreferencesUtils.shouldApplyOledTheme()) { + setTheme(R.style.OpenTracksThemeOled); + } } @Override diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index a93d2f97c..0fb192e68 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -670,13 +670,29 @@ public static boolean getPreventReimportTracks() { } /** - * @return {@link androidx.appcompat.app.AppCompatDelegate}.MODE_* + * @return * {@link androidx.appcompat.app.AppCompatDelegate}.MODE_* + * * 3: Night OLED friendly */ - public static int getDefaultNightMode() { + private static String getUiMode() { final String defaultValue = getKey(R.string.night_mode_default); final String value = getString(R.string.night_mode_key, defaultValue); - return Integer.parseInt(value); + return value; + } + + public static boolean shouldApplyOledTheme() { + return resources.getString(R.string.night_mode_night_oled_value) + .equals(getUiMode()); + } + + public static void applyNightMode() { + String uiMode = getUiMode(); + if (resources.getString(R.string.night_mode_night_oled_value) + .equals(uiMode)) { + return; + } + + AppCompatDelegate.setDefaultNightMode(Integer.parseInt(uiMode)); } public static void resetPreferences(Context context, boolean readAgain) { @@ -823,10 +839,6 @@ public static void resetCustomLayoutPreferences() { } } - public static void applyNightMode() { - AppCompatDelegate.setDefaultNightMode(PreferencesUtils.getDefaultNightMode()); - } - //TODO Check if resetPreferences can be used instead. @Deprecated @VisibleForTesting diff --git a/src/main/java/de/dennisguse/opentracks/settings/UserInterfaceSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/UserInterfaceSettingsFragment.java index ca122b43d..442db3abf 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/UserInterfaceSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/UserInterfaceSettingsFragment.java @@ -20,7 +20,10 @@ public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat { private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { if (PreferencesUtils.isKey(R.string.night_mode_key, key)) { - getActivity().runOnUiThread(PreferencesUtils::applyNightMode); + getActivity().runOnUiThread(() -> { + PreferencesUtils.applyNightMode(); + getActivity().recreate(); + }); } }; diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 7610e13a1..2c276fec6 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -281,16 +281,19 @@ @string/night_mode_system_value 1 2 + 3 -1 @string/night_mode_system_value @string/night_mode_no_value @string/night_mode_yes_value + @string/night_mode_night_oled_value @string/settings_night_mode_option_system @string/settings_night_mode_option_day @string/settings_night_mode_option_night + @string/settings_night_mode_option_night_oled diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 756e3a42a..b3459bd2c 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -404,6 +404,7 @@ limitations under the License. System Day Night + Night (OLED friendly) Time interval Lap length diff --git a/src/main/res/values/styles_theme.xml b/src/main/res/values/styles_theme.xml index 5b4539976..7d5ffb056 100644 --- a/src/main/res/values/styles_theme.xml +++ b/src/main/res/values/styles_theme.xml @@ -31,4 +31,29 @@ + +