From 6be756ba195f823d7aa1e93630005fd81a6a69fe Mon Sep 17 00:00:00 2001 From: staticssleever668 <64694940+staticssleever668@users.noreply.github.com> Date: Sat, 27 Mar 2021 21:15:35 +0300 Subject: [PATCH] Implement 'follow system' theme option --- res/layout/settings_ui_theme_item.xml | 7 +++++++ res/values-ru/strings.xml | 1 + res/values/strings.xml | 1 + src/itkach/aard2/Application.java | 14 ++++++++++++-- src/itkach/aard2/SettingsListAdapter.java | 9 ++++++++- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/res/layout/settings_ui_theme_item.xml b/res/layout/settings_ui_theme_item.xml index 5fca7647..66de3543 100644 --- a/res/layout/settings_ui_theme_item.xml +++ b/res/layout/settings_ui_theme_item.xml @@ -25,6 +25,13 @@ android:layout_marginLeft="2dip" android:layout_marginRight="10dip" > + Добавить Использовать только избранные словари для случайного поиска Интерфейс + Следовать системе Тёмный Светлый Некорректная ссылка diff --git a/res/values/strings.xml b/res/values/strings.xml index 83b24b17..2b06988f 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -102,6 +102,7 @@ Use only favorite dictionaries for random lookup Invalid link User Interface Style + Follow system Light Dark Load Remote Content diff --git a/src/itkach/aard2/Application.java b/src/itkach/aard2/Application.java index f64fb5bc..63612ef8 100644 --- a/src/itkach/aard2/Application.java +++ b/src/itkach/aard2/Application.java @@ -6,6 +6,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.database.DataSetObserver; import android.net.Uri; import android.os.AsyncTask; @@ -71,6 +72,7 @@ public class Application extends android.app.Application { private static final String PREF = "app"; static final String PREF_RANDOM_FAV_LOOKUP = "onlyFavDictsForRandomLookup"; static final String PREF_UI_THEME = "UITheme"; + static final String PREF_UI_THEME_SYSTEM = "system"; static final String PREF_UI_THEME_LIGHT = "light"; static final String PREF_UI_THEME_DARK = "dark"; static final String PREF_USE_VOLUME_FOR_NAV = "useVolumeForNav"; @@ -227,8 +229,16 @@ SharedPreferences prefs() { } String getPreferredTheme() { - return prefs().getString(Application.PREF_UI_THEME, - Application.PREF_UI_THEME_LIGHT); + String theme = prefs().getString(Application.PREF_UI_THEME, + Application.PREF_UI_THEME_SYSTEM); + + if (theme.equals(PREF_UI_THEME_SYSTEM)) { + int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + + return (mode == Configuration.UI_MODE_NIGHT_YES) ? "dark" : "light"; + } + + return theme; } void installTheme(Activity activity) { diff --git a/src/itkach/aard2/SettingsListAdapter.java b/src/itkach/aard2/SettingsListAdapter.java index 07ad8611..a543fd46 100644 --- a/src/itkach/aard2/SettingsListAdapter.java +++ b/src/itkach/aard2/SettingsListAdapter.java @@ -121,7 +121,7 @@ private View getUIThemeSettingsView(View convertView, ViewGroup parent) { final SharedPreferences prefs = app.prefs(); String currentValue = prefs.getString(Application.PREF_UI_THEME, - Application.PREF_UI_THEME_LIGHT); + Application.PREF_UI_THEME_SYSTEM); Log.d("Settings", Application.PREF_UI_THEME + " current value: " + currentValue); View.OnClickListener clickListener = new View.OnClickListener() { @@ -130,6 +130,9 @@ public void onClick(View view) { SharedPreferences.Editor editor = prefs.edit(); String value = null; switch(view.getId()) { + case R.id.setting_ui_theme_system: + value = Application.PREF_UI_THEME_SYSTEM; + break; case R.id.setting_ui_theme_light: value = Application.PREF_UI_THEME_LIGHT; break; @@ -145,12 +148,16 @@ public void onClick(View view) { context.recreate(); } }; + RadioButton btnSystem = (RadioButton) view + .findViewById(R.id.setting_ui_theme_system); RadioButton btnLight = (RadioButton) view .findViewById(R.id.setting_ui_theme_light); RadioButton btnDark = (RadioButton) view .findViewById(R.id.setting_ui_theme_dark); + btnSystem.setOnClickListener(clickListener); btnLight.setOnClickListener(clickListener); btnDark.setOnClickListener(clickListener); + btnSystem.setChecked(currentValue.equals(Application.PREF_UI_THEME_SYSTEM)); btnLight.setChecked(currentValue.equals(Application.PREF_UI_THEME_LIGHT)); btnDark.setChecked(currentValue.equals(Application.PREF_UI_THEME_DARK)); };