diff options
Diffstat (limited to 'java/src/com/android/inputmethod/keyboard/KeyboardTheme.java')
| -rw-r--r-- | java/src/com/android/inputmethod/keyboard/KeyboardTheme.java | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java index 006d08696..2796c2e59 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java @@ -17,6 +17,7 @@ package com.android.inputmethod.keyboard; import android.content.Context; +import android.content.res.Configuration; import android.content.SharedPreferences; import android.os.Build; import android.os.Build.VERSION_CODES; @@ -41,7 +42,8 @@ public final class KeyboardTheme implements Comparable<KeyboardTheme> { public static final int THEME_ID_KLP = 2; public static final int THEME_ID_LXX_LIGHT = 3; public static final int THEME_ID_LXX_DARK = 4; - public static final int DEFAULT_THEME_ID = THEME_ID_KLP; + public static final int THEME_ID_AUTO_DARK = 5; + public static final int DEFAULT_THEME_ID = THEME_ID_AUTO_DARK; private static KeyboardTheme[] AVAILABLE_KEYBOARD_THEMES; @@ -59,6 +61,8 @@ public final class KeyboardTheme implements Comparable<KeyboardTheme> { new KeyboardTheme(THEME_ID_LXX_DARK, "LXXDark", R.style.KeyboardTheme_LXX_Dark, // This has never been selected as default theme. VERSION_CODES.BASE), + new KeyboardTheme(THEME_ID_AUTO_DARK, "AutoDark", 0, + Build.VERSION_CODES.Q), }; static { @@ -167,9 +171,7 @@ public final class KeyboardTheme implements Comparable<KeyboardTheme> { } public static KeyboardTheme getKeyboardTheme(final Context context) { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - final KeyboardTheme[] availableThemeArray = getAvailableThemeArray(context); - return getKeyboardTheme(prefs, BuildCompatUtils.EFFECTIVE_SDK_INT, availableThemeArray); + return getKeyboardTheme(context, BuildCompatUtils.EFFECTIVE_SDK_INT); } /* package private for testing */ @@ -192,24 +194,43 @@ public final class KeyboardTheme implements Comparable<KeyboardTheme> { } /* package private for testing */ - static KeyboardTheme getKeyboardTheme(final SharedPreferences prefs, final int sdkVersion, - final KeyboardTheme[] availableThemeArray) { - final String lxxThemeIdString = prefs.getString(LXX_KEYBOARD_THEME_KEY, null); - if (lxxThemeIdString == null) { - return getDefaultKeyboardTheme(prefs, sdkVersion, availableThemeArray); - } - try { - final int themeId = Integer.parseInt(lxxThemeIdString); - final KeyboardTheme theme = searchKeyboardThemeById(themeId, availableThemeArray); - if (theme != null) { - return theme; + static KeyboardTheme getKeyboardTheme(final Context context, final int sdkVersion) { + int themeId = getSelectedKeyboardThemeId(context); + if (THEME_ID_AUTO_DARK == themeId) { + Configuration cfg = context.getResources().getConfiguration(); + int nightMode = cfg.uiMode & Configuration.UI_MODE_NIGHT_MASK; + if (nightMode == Configuration.UI_MODE_NIGHT_YES) { + themeId = THEME_ID_LXX_DARK; + } else { + themeId = THEME_ID_LXX_LIGHT; } - Log.w(TAG, "Unknown keyboard theme in LXX preference: " + lxxThemeIdString); - } catch (final NumberFormatException e) { - Log.w(TAG, "Illegal keyboard theme in LXX preference: " + lxxThemeIdString, e); } + final KeyboardTheme[] availableThemeArray = getAvailableThemeArray(context); + final KeyboardTheme theme = searchKeyboardThemeById(themeId, availableThemeArray); + if (theme != null) { + return theme; + } + Log.w(TAG, "Unknown keyboard theme in LXX preference: " + themeId); // Remove preference that contains unknown or illegal theme id. + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.edit().remove(LXX_KEYBOARD_THEME_KEY).apply(); return getDefaultKeyboardTheme(prefs, sdkVersion, availableThemeArray); } + + public static int getSelectedKeyboardThemeId(final Context context) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + final KeyboardTheme[] availableThemeArray = getAvailableThemeArray(context); + final String lxxThemeIdString = prefs.getString(LXX_KEYBOARD_THEME_KEY, null); + if (lxxThemeIdString != null) { + try { + return Integer.parseInt(lxxThemeIdString); + } catch (final NumberFormatException e) { + Log.w(TAG, "Illegal keyboard theme in LXX preference: " + lxxThemeIdString, e); + } + } + // Remove preference that contains unknown or illegal theme id. + prefs.edit().remove(LXX_KEYBOARD_THEME_KEY).apply(); + return getDefaultKeyboardTheme(prefs, BuildCompatUtils.EFFECTIVE_SDK_INT, + availableThemeArray).mThemeId; + } } |
