From 306468afb41dea9cc97127891985151206023b89 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Fri, 11 Feb 2022 23:34:36 +0800 Subject: [PATCH] Refine configuration change (#1672) --- .../main/java/org/lsposed/manager/App.java | 12 +++++- .../manager/ui/fragment/SettingsFragment.java | 42 ++++++++----------- .../res/{values-id => values-in}/strings.xml | 0 .../res/{values-he => values-iw}/strings.xml | 0 .../res/{values-id => values-in}/strings.xml | 0 .../res/{values-he => values-iw}/strings.xml | 0 6 files changed, 29 insertions(+), 25 deletions(-) rename app/src/main/res/{values-id => values-in}/strings.xml (100%) rename app/src/main/res/{values-he => values-iw}/strings.xml (100%) rename daemon/src/main/res/{values-id => values-in}/strings.xml (100%) rename daemon/src/main/res/{values-he => values-iw}/strings.xml (100%) diff --git a/app/src/main/java/org/lsposed/manager/App.java b/app/src/main/java/org/lsposed/manager/App.java index f4d7d2fb..5dfbc05f 100644 --- a/app/src/main/java/org/lsposed/manager/App.java +++ b/app/src/main/java/org/lsposed/manager/App.java @@ -28,6 +28,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.os.Build; import android.os.Looper; import android.os.Process; @@ -192,6 +193,15 @@ public class App extends Application { }); } + @SuppressWarnings("deprecation") + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + LocaleDelegate.setDefaultLocale(getLocale()); + newConfig.setLocale(getLocale()); + getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); + super.onConfigurationChanged(newConfig); + } + @Override public void onCreate() { super.onCreate(); @@ -209,7 +219,7 @@ public class App extends Application { } DayNightDelegate.setApplicationContext(this); DayNightDelegate.setDefaultNightMode(ThemeUtil.getDarkTheme()); - LocaleDelegate.setDefaultLocale(getLocale()); + onConfigurationChanged(getResources().getConfiguration()); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("org.lsposed.manager.NOTIFICATION"); diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java index e9a613d5..188479b6 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/SettingsFragment.java @@ -239,16 +239,6 @@ public class SettingsFragment extends BaseFragment { } Preference primary_color = findPreference("theme_color"); - if (primary_color != null) { - primary_color.setOnPreferenceChangeListener((preference, newValue) -> { - MainActivity activity = (MainActivity) getActivity(); - if (activity != null) { - activity.restart(); - } - return true; - }); - } - SwitchPreference prefShowHiddenIcons = findPreference("show_hidden_icon_apps_enabled"); if (prefShowHiddenIcons != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { if (ConfigManager.isBinderAlive()) { @@ -277,20 +267,6 @@ public class SettingsFragment extends BaseFragment { SimpleMenuPreference language = findPreference("language"); if (language != null) { - language.setOnPreferenceChangeListener((preference, newValue) -> { - var locale = SYSTEM.equals(newValue) ? LocaleDelegate.getSystemLocale() : Locale.forLanguageTag((String) newValue); - LocaleDelegate.setDefaultLocale(locale); - var res = App.getInstance().getResources(); - var config = res.getConfiguration(); - config.setLocale(locale); - var metric = res.getDisplayMetrics(); - App.getInstance().getResources().updateConfiguration(config, metric); - MainActivity activity = (MainActivity) getActivity(); - if (activity != null) { - activity.restart(); - } - return true; - }); var tag = language.getValue(); var userLocale = App.getLocale(); var entries = new ArrayList(); @@ -331,6 +307,24 @@ public class SettingsFragment extends BaseFragment { translation_contributors.setSummary(translators); } } + + App.getPreferences().registerOnSharedPreferenceChangeListener((sharedPreferences, key) -> { + var newValue = sharedPreferences.getAll().getOrDefault(key, null); + if (newValue == null) return; + switch (key) { + case "language": + var app = App.getInstance(); + var config = app.getResources().getConfiguration(); + app.onConfigurationChanged(config); + case "theme_color": + case "follow_system_accent": + MainActivity activity = (MainActivity) getActivity(); + if (activity != null) { + activity.restart(); + } + break; + } + }); } @NonNull diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-in/strings.xml similarity index 100% rename from app/src/main/res/values-id/strings.xml rename to app/src/main/res/values-in/strings.xml diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-iw/strings.xml similarity index 100% rename from app/src/main/res/values-he/strings.xml rename to app/src/main/res/values-iw/strings.xml diff --git a/daemon/src/main/res/values-id/strings.xml b/daemon/src/main/res/values-in/strings.xml similarity index 100% rename from daemon/src/main/res/values-id/strings.xml rename to daemon/src/main/res/values-in/strings.xml diff --git a/daemon/src/main/res/values-he/strings.xml b/daemon/src/main/res/values-iw/strings.xml similarity index 100% rename from daemon/src/main/res/values-he/strings.xml rename to daemon/src/main/res/values-iw/strings.xml