Added auto theme selection for Android 10 devices

This commit is contained in:
Ullas-Aithal 2019-10-31 19:50:16 -05:00
parent 4f76f6a01d
commit b37ab71e95
6 changed files with 74 additions and 12 deletions

View file

@ -387,7 +387,8 @@ public class MainActivity extends BaseActivity
key.equals(getString(R.string.settings_key_enable_screenshot)) ||
key.equals(getString(R.string.settings_key_tag_functionality)) ||
key.equals(getString(R.string.settings_key_label_highlight_token)) ||
key.equals(getString(R.string.settings_key_card_layout))) {
key.equals(getString(R.string.settings_key_card_layout)) ||
key.equals(getString(R.string.settings_key_theme_mode))) {
recreate();
}
}

View file

@ -27,6 +27,7 @@ import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
@ -123,7 +124,8 @@ public class SettingsActivity extends BaseActivity
if (key.equals(getString(R.string.settings_key_theme)) ||
key.equals(getString(R.string.settings_key_locale)) ||
key.equals(getString(R.string.settings_key_special_features))) {
key.equals(getString(R.string.settings_key_special_features)) ||
key.equals(getString(R.string.settings_key_theme_mode))) {
recreate();
} else if(key.equals(getString(R.string.settings_key_encryption))) {
if (settings.getEncryption() != EncryptionType.PASSWORD) {
@ -240,6 +242,7 @@ public class SettingsActivity extends BaseActivity
public static class SettingsFragment extends PreferenceFragment {
PreferenceCategory catSecurity;
PreferenceCategory catUI;
Settings settings;
ListPreference encryption;
@ -249,6 +252,8 @@ public class SettingsActivity extends BaseActivity
OpenPgpAppPreference pgpProvider;
EditTextPreference pgpEncryptionKey;
OpenPgpKeyPreference pgpSigningKey;
ListPreference themeMode;
ListPreference theme;
public void encryptionChangeWithDialog(final EncryptionType encryptionType) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
@ -292,7 +297,10 @@ public class SettingsActivity extends BaseActivity
// Authentication
catSecurity = (PreferenceCategory) findPreference(getString(R.string.settings_key_cat_security));
catUI = (PreferenceCategory) findPreference(getString(R.string.settings_key_cat_ui));
encryption = (ListPreference) findPreference(getString(R.string.settings_key_encryption));
themeMode = (ListPreference) findPreference(getString(R.string.settings_key_theme_mode));
theme = (ListPreference) findPreference(getString(R.string.settings_key_theme));
encryption.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
@ -395,11 +403,21 @@ public class SettingsActivity extends BaseActivity
});
builder.create().show();
return false;
}
});
}
//Remove Theme Mode selection option for devices below Android 10. Disable theme selection if Theme Mode is set auto
//TODO: 29 needs to be replaced with VERSION_CODE.Q when compileSdk and targetSdk is updated to 29
if(Build.VERSION.SDK_INT < 29) {
catUI.removePreference(themeMode);
} else {
if(sharedPref.getString(getString(R.string.settings_key_theme_mode),getString(R.string.settings_default_theme_mode)).equals("auto")) {
theme.setEnabled(false);
} else {
theme.setEnabled(true);
}
}
}
}
}

View file

@ -24,6 +24,8 @@ package org.shadowice.flocke.andotp.Utilities;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Base64;
@ -332,16 +334,34 @@ public class Settings {
}
public int getTheme() {
String themeName = getString(R.string.settings_key_theme, R.string.settings_default_theme);
int theme = R.style.AppTheme_NoActionBar;
String themeMode = getString(R.string.settings_key_theme_mode, R.string.settings_default_theme_mode);
if (themeName.equals("light")) {
theme = R.style.AppTheme_NoActionBar;
} else if (themeName.equals("dark")) {
theme = R.style.AppTheme_Dark_NoActionBar;
} else if (themeName.equals("black")) {
theme = R.style.AppTheme_Black_NoActionBar;
//TODO: 29 needs to be replaced with VERSION_CODE.Q when compileSdk and targetSdk is updated to 29
if(Build.VERSION.SDK_INT >= 29 && themeMode.equals("auto")){
switch (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) {
//Dark Mode
case Configuration.UI_MODE_NIGHT_YES:
theme = R.style.AppTheme_Dark_NoActionBar;
break;
//Light Mode / Undefined mode / Default mode
case Configuration.UI_MODE_NIGHT_NO:
case Configuration.UI_MODE_NIGHT_UNDEFINED:
default:
theme = R.style.AppTheme_NoActionBar;
break;
}
} else {
String themeName = getString(R.string.settings_key_theme, R.string.settings_default_theme);
if (themeName.equals("light")) {
theme = R.style.AppTheme_NoActionBar;
} else if (themeName.equals("dark")) {
theme = R.style.AppTheme_Dark_NoActionBar;
} else if (themeName.equals("black")) {
theme = R.style.AppTheme_Black_NoActionBar;
}
}
return theme;

View file

@ -17,8 +17,10 @@
<string name="settings_key_panic" translatable="false">pref_panic</string>
<string name="settings_key_relock_screen_off" translatable="false">pref_relock_screen_off</string>
<string name="settings_key_cat_ui" translatable="false">perf_cat_ui</string>
<string name="settings_key_lang" translatable="false">pref_lang</string> <!-- Deprecated -->
<string name="settings_key_locale" translatable="false">pref_locale</string>
<string name="settings_key_theme_mode" translatable="false">perf_theme_mode</string>
<string name="settings_key_theme" translatable="false">pref_theme</string>
<string name="settings_key_label_size" translatable="false">pref_label_size_sp</string>
<string name="settings_key_card_layout" translatable="false">pref_card_layout</string>
@ -59,6 +61,7 @@
<integer name="settings_default_tap_to_reveal_timeout">30</integer>
<string name="settings_default_encryption" translatable="false">keystore</string>
<string name="settings_default_locale" translatable="false">system</string>
<string name="settings_default_theme_mode" translatable="false">auto</string>
<string name="settings_default_theme" translatable="false">light</string>
<integer name="settings_default_label_size">18</integer>
<string name="settings_default_card_layout" translatable="false">default</string>
@ -131,6 +134,11 @@
<item>zh_TW</item>
</string-array>
<string-array name="settings_values_theme_mode" translatable="false">
<item>auto</item>
<item>manual</item>
</string-array>
<string-array name="settings_values_theme" translatable="false">
<item>light</item>
<item>dark</item>

View file

@ -18,6 +18,7 @@
<string name="settings_title_relock_screen_off">Re-lock on screen off</string>
<string name="settings_title_lang">Language</string>
<string name="settings_title_theme_mode">Theme Mode</string>
<string name="settings_title_theme">Theme</string>
<string name="settings_title_card_layout">Card layout</string>
<string name="settings_title_label_size">Label font size</string>
@ -167,6 +168,11 @@
<item>Tags</item>
</string-array>
<string-array name="settings_entries_theme_mode">
<item>Auto</item>
<item>Manual</item>
</string-array>
<string-array name="settings_entries_theme">
<item>Light theme</item>
<item>Dark theme</item>

View file

@ -51,7 +51,8 @@
</PreferenceCategory>
<PreferenceCategory
android:title="@string/settings_category_title_ui">
android:title="@string/settings_category_title_ui"
android:key="@string/settings_key_cat_ui">
<ListPreference
android:key="@string/settings_key_locale"
@ -61,6 +62,14 @@
android:entryValues="@array/settings_values_locale"
android:defaultValue="@string/settings_default_locale" />
<ListPreference
android:key="@string/settings_key_theme_mode"
android:title="@string/settings_title_theme_mode"
android:summary="%s"
android:entries="@array/settings_entries_theme_mode"
android:entryValues="@array/settings_values_theme_mode"
android:defaultValue="@string/settings_default_theme_mode" />
<ListPreference
android:key="@string/settings_key_theme"
android:title="@string/settings_title_theme"