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));
};