diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java index 2cbdc9bb..633a3e52 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java @@ -17,6 +17,7 @@ package org.dslul.openboard.inputmethod.keyboard; import android.content.Context; +import android.content.res.Configuration; import android.content.res.Resources; import android.util.Log; import android.view.ContextThemeWrapper; @@ -64,6 +65,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private KeyboardTheme mKeyboardTheme; private Context mThemeContext; + private int mCurrentUiMode; private static final KeyboardSwitcher sInstance = new KeyboardSwitcher(); @@ -96,9 +98,12 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private boolean updateKeyboardThemeAndContextThemeWrapper(final Context context, final KeyboardTheme keyboardTheme) { - if (mThemeContext == null || !keyboardTheme.equals(mKeyboardTheme)) { + final boolean nightModeChanged = (mCurrentUiMode & Configuration.UI_MODE_NIGHT_MASK) + != (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK); + if (mThemeContext == null || !keyboardTheme.equals(mKeyboardTheme) || nightModeChanged) { mKeyboardTheme = keyboardTheme; mThemeContext = new ContextThemeWrapper(context, keyboardTheme.mStyleId); + mCurrentUiMode = context.getResources().getConfiguration().uiMode; KeyboardLayoutSet.onKeyboardThemeChanged(); return true; } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java index 10c503a8..2dd892b7 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardTheme.java @@ -40,9 +40,12 @@ public final class KeyboardTheme implements Comparable { 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_AMOLED = 4; + public static final int THEME_ID_LXX_AUTO_AMOLED = 10; public static final int THEME_ID_LIGHT_BORDER = 5; public static final int THEME_ID_DARK_BORDER = 6; public static final int THEME_ID_LXX_DARK = 7; + public static final int THEME_ID_LXX_AUTO = 9; + public static final int THEME_ID_AUTO_BORDER = 8; public static final int DEFAULT_THEME_ID = THEME_ID_DARK_BORDER; private static KeyboardTheme[] AVAILABLE_KEYBOARD_THEMES; @@ -70,6 +73,15 @@ public final class KeyboardTheme implements Comparable { new KeyboardTheme(THEME_ID_DARK_BORDER, "LXXDarkBorder", R.style.KeyboardTheme_LXX_Dark_Border, // This has never been selected as default theme. VERSION_CODES.LOLLIPOP), + new KeyboardTheme(THEME_ID_AUTO_BORDER, "LXXAutoBorder", R.style.KeyboardTheme_LXX_Auto_Border, + // This has never been selected as default theme. + VERSION_CODES.LOLLIPOP), + new KeyboardTheme(THEME_ID_LXX_AUTO, "LXXAuto", R.style.KeyboardTheme_LXX_Auto, + // This has never been selected as default theme. + VERSION_CODES.LOLLIPOP), + new KeyboardTheme(THEME_ID_LXX_AUTO_AMOLED, "LXXAutoAmoled", R.style.KeyboardTheme_LXX_Auto_Amoled, + // This has never been selected as default theme. + VERSION_CODES.LOLLIPOP), }; static { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java index e2ca6f27..2495606f 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java @@ -775,6 +775,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen cleanupInternalStateForFinishInput(); } } + // KeyboardSwitcher will check by itself if theme update is necessary + mKeyboardSwitcher.updateKeyboardTheme(); super.onConfigurationChanged(conf); } diff --git a/app/src/main/res/values-night/themes-lxx-auto-amoled.xml b/app/src/main/res/values-night/themes-lxx-auto-amoled.xml new file mode 100644 index 00000000..e9032f1f --- /dev/null +++ b/app/src/main/res/values-night/themes-lxx-auto-amoled.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-night/themes-lxx-auto-border.xml b/app/src/main/res/values-night/themes-lxx-auto-border.xml new file mode 100644 index 00000000..900eb14f --- /dev/null +++ b/app/src/main/res/values-night/themes-lxx-auto-border.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-night/themes-lxx-auto.xml b/app/src/main/res/values-night/themes-lxx-auto.xml new file mode 100644 index 00000000..bd8f7bbd --- /dev/null +++ b/app/src/main/res/values-night/themes-lxx-auto.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 4c53fcce..cfa27898 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -238,9 +238,12 @@ + + + diff --git a/app/src/main/res/values/keyboard-themes.xml b/app/src/main/res/values/keyboard-themes.xml index fc002af0..75e6e986 100644 --- a/app/src/main/res/values/keyboard-themes.xml +++ b/app/src/main/res/values/keyboard-themes.xml @@ -20,8 +20,11 @@ + @string/keyboard_theme_auto_border @string/keyboard_theme_light_border @string/keyboard_theme_dark_border + @string/keyboard_theme_material_auto + @string/keyboard_theme_material_auto_amoled @string/keyboard_theme_material_light @string/keyboard_theme_material_dark @string/keyboard_theme_material_dark_amoled @@ -31,8 +34,11 @@ + 8 5 6 + 9 + 10 3 7 4 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c0d7809e..dac79eb9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -354,13 +354,21 @@ mobile devices. [CHAR LIMIT=25] --> Holo White Holo Blue + + Material Auto + + Material Auto (AMOLED) Material Dark - + Material Dark (AMOLED) Material Light + + Material Auto Border + Material Dark Border + Material Light Border diff --git a/app/src/main/res/values/themes-lxx-auto-amoled.xml b/app/src/main/res/values/themes-lxx-auto-amoled.xml new file mode 100644 index 00000000..1cb5b9eb --- /dev/null +++ b/app/src/main/res/values/themes-lxx-auto-amoled.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/themes-lxx-auto-border.xml b/app/src/main/res/values/themes-lxx-auto-border.xml new file mode 100644 index 00000000..0528256f --- /dev/null +++ b/app/src/main/res/values/themes-lxx-auto-border.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/themes-lxx-auto.xml b/app/src/main/res/values/themes-lxx-auto.xml new file mode 100644 index 00000000..62b726af --- /dev/null +++ b/app/src/main/res/values/themes-lxx-auto.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + +