From 0c2a6e2aad5c8e8ae05db397501470eda342abf0 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 30 Nov 2022 11:49:13 +0100 Subject: [PATCH] Switch between themes --- .../android/activities/BaseActivity.java | 57 +++++++++++++++++++ .../android/activities/BaseBarActivity.java | 56 ++++++++++++++++++ .../fedilab/android/helper/ThemeHelper.java | 4 +- .../settings/FragmentThemingSettings.java | 1 + 4 files changed, 116 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/BaseActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseActivity.java index 102d0f98..36d5b983 100644 --- a/app/src/main/java/app/fedilab/android/activities/BaseActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/BaseActivity.java @@ -16,14 +16,19 @@ package app.fedilab.android.activities; import android.annotation.SuppressLint; +import android.content.SharedPreferences; +import android.content.res.Configuration; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.preference.PreferenceManager; import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.one.EmojiOneProvider; +import app.fedilab.android.R; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.ThemeHelper; @@ -38,6 +43,58 @@ public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + + final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); + String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME)); + //Default automatic switch + if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) { + + + int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + switch (currentNightMode) { + case Configuration.UI_MODE_NIGHT_NO: + String defaultLight = sharedpreferences.getString(getString(R.string.SET_THEME_DEFAULT_LIGHT), "LIGHT"); + switch (defaultLight) { + case "LIGHT": + setTheme(R.style.AppTheme); + break; + case "SOLARIZED_LIGHT": + setTheme(R.style.SolarizedAppTheme); + break; + } + break; + case Configuration.UI_MODE_NIGHT_YES: + String defaultDark = sharedpreferences.getString(getString(R.string.SET_THEME_DEFAULT_DARK), "DARK"); + switch (defaultDark) { + case "DARK": + setTheme(R.style.AppTheme); + break; + case "SOLARIZED_DARK": + setTheme(R.style.SolarizedAppTheme); + break; + } + break; + } + } else { + switch (currentTheme) { + case "LIGHT": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + setTheme(R.style.AppTheme); + break; + case "DARK": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + setTheme(R.style.AppTheme); + break; + case "SOLARIZED_LIGHT": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + setTheme(R.style.SolarizedAppTheme); + break; + case "SOLARIZED_DARK": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + setTheme(R.style.SolarizedAppTheme); + break; + } + } super.onCreate(savedInstanceState); ThemeHelper.adjustFontScale(this, getResources().getConfiguration()); Helper.setLocale(this); diff --git a/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java b/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java index 41ba5d9c..d3fbedd3 100644 --- a/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/BaseBarActivity.java @@ -16,14 +16,19 @@ package app.fedilab.android.activities; import android.annotation.SuppressLint; +import android.content.SharedPreferences; +import android.content.res.Configuration; import android.os.Bundle; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.preference.PreferenceManager; import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.one.EmojiOneProvider; +import app.fedilab.android.R; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.ThemeHelper; @@ -38,6 +43,57 @@ public class BaseBarActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); + String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME)); + //Default automatic switch + if (currentTheme.equals(getString(R.string.SET_DEFAULT_THEME))) { + + int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + switch (currentNightMode) { + case Configuration.UI_MODE_NIGHT_NO: + String defaultLight = sharedpreferences.getString(getString(R.string.SET_THEME_DEFAULT_LIGHT), "LIGHT"); + switch (defaultLight) { + case "LIGHT": + setTheme(R.style.AppThemeBar); + break; + case "SOLARIZED_LIGHT": + setTheme(R.style.SolarizedAppThemeBar); + break; + } + break; + case Configuration.UI_MODE_NIGHT_YES: + String defaultDark = sharedpreferences.getString(getString(R.string.SET_THEME_DEFAULT_DARK), "DARK"); + switch (defaultDark) { + case "DARK": + setTheme(R.style.AppThemeBar); + break; + case "SOLARIZED_DARK": + setTheme(R.style.SolarizedAppThemeBar); + break; + } + break; + } + + } else { + switch (currentTheme) { + case "LIGHT": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + setTheme(R.style.AppThemeBar); + break; + case "DARK": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + setTheme(R.style.AppThemeBar); + break; + case "SOLARIZED_LIGHT": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + setTheme(R.style.SolarizedAppThemeBar); + break; + case "SOLARIZED_DARK": + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + setTheme(R.style.SolarizedAppThemeBar); + break; + } + } super.onCreate(savedInstanceState); ThemeHelper.adjustFontScale(this, getResources().getConfiguration()); Helper.setLocale(this); diff --git a/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java b/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java index 6e3a4bd9..15fd4b08 100644 --- a/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/ThemeHelper.java @@ -267,9 +267,9 @@ public class ThemeHelper { } public static void switchTo(String themePref) { - if (themes.LIGHT.name().equals(themePref)) { + if (themes.LIGHT.name().equals(themePref) || themes.SOLARIZED_LIGHT.name().equals(themePref)) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); - } else if (themes.DARK.name().equals(themePref)) { + } else if (themes.DARK.name().equals(themePref) || themes.SOLARIZED_DARK.name().equals(themePref)) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { diff --git a/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java b/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java index e4db6b9d..1f96672f 100644 --- a/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java +++ b/app/src/main/java/app/fedilab/android/ui/fragment/settings/FragmentThemingSettings.java @@ -62,6 +62,7 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements ListPreference SET_THEME_BASE = findPreference(getString(R.string.SET_THEME_BASE)); if (SET_THEME_BASE != null) { ThemeHelper.switchTo(SET_THEME_BASE.getValue()); + requireActivity().recreate(); } } Helper.recreateMainActivity(requireActivity());