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 b2e577422..b92918ac9 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 @@ -24,8 +24,8 @@ import java.util.Arrays; public final class KeyboardTheme implements Comparable { // old themes - public static final String THEME_STYLE_MATERIAL = "Material"; - public static final String THEME_STYLE_HOLO = "Holo"; + public static final String STYLE_MATERIAL = "Material"; + public static final String STYLE_HOLO = "Holo"; // new themes using the custom colors public static final String THEME_LIGHT = "light"; @@ -35,10 +35,10 @@ public final class KeyboardTheme implements Comparable { public static final String THEME_BLACK = "black"; public static final String THEME_USER = "user"; public static final String THEME_USER_NIGHT = "user_night"; - public static final String[] THEME_VARIANTS = new String[] { THEME_LIGHT, THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_USER }; - public static final String[] THEME_VARIANTS_DARK = new String[] { THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_USER_NIGHT}; + public static final String[] COLORS = new String[] { THEME_LIGHT, THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_USER }; + public static final String[] COLORS_DARK = new String[] { THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_USER_NIGHT}; - public static final String[] THEME_STYLES = { THEME_STYLE_MATERIAL, THEME_STYLE_HOLO }; + public static final String[] STYLES = { STYLE_MATERIAL, STYLE_HOLO }; // These should be aligned with Keyboard.themeId and Keyboard.Case.keyboardTheme // attributes' values in attrs.xml. @@ -114,10 +114,10 @@ public final class KeyboardTheme implements Comparable { public static KeyboardTheme getKeyboardTheme(final Context context) { final SharedPreferences prefs = DeviceProtectedUtils.getSharedPreferences(context); - final String style = prefs.getString(Settings.PREF_THEME_STYLE, THEME_STYLE_MATERIAL); + final String style = prefs.getString(Settings.PREF_THEME_STYLE, STYLE_MATERIAL); final boolean borders = prefs.getBoolean(Settings.PREF_THEME_KEY_BORDERS, false); final int matchingId; - if (style.equals(THEME_STYLE_HOLO)) + if (style.equals(STYLE_HOLO)) matchingId = THEME_ID_HOLO_BASE; else matchingId = borders ? THEME_ID_LXX_BASE_BORDER : THEME_ID_LXX_BASE; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Colors.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Colors.kt index f4019c502..2e6cb6ccb 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Colors.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Colors.kt @@ -13,8 +13,8 @@ import android.view.View import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat import androidx.core.graphics.drawable.DrawableCompat -import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.THEME_STYLE_HOLO -import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.THEME_STYLE_MATERIAL +import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.STYLE_HOLO +import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.STYLE_MATERIAL import org.dslul.openboard.inputmethod.keyboard.MainKeyboardView import org.dslul.openboard.inputmethod.keyboard.MoreKeysKeyboardView import org.dslul.openboard.inputmethod.keyboard.clipboard.ClipboardHistoryView @@ -70,7 +70,7 @@ class Colors ( init { accentColorFilter = colorFilter(accent) - if (themeStyle == THEME_STYLE_HOLO) { + if (themeStyle == STYLE_HOLO) { val darkerBackground = adjustLuminosityAndKeepAlpha(background, -0.2f) navBar = darkerBackground keyboardBackground = GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, intArrayOf(background, darkerBackground)) @@ -98,7 +98,7 @@ class Colors ( doubleAdjustedBackground = darken(adjustedBackground) } adjustedBackgroundStateList = stateList(doubleAdjustedBackground, adjustedBackground) - suggestionBackgroundList = if (!hasKeyBorders && themeStyle == THEME_STYLE_MATERIAL) + suggestionBackgroundList = if (!hasKeyBorders && themeStyle == STYLE_MATERIAL) stateList(doubleAdjustedBackground, Color.TRANSPARENT) else stateList(adjustedBackground, Color.TRANSPARENT) @@ -109,12 +109,12 @@ class Colors ( functionalKeyBackgroundFilter = colorFilter(functionalKey) spaceBarFilter = colorFilter(spaceBar) backgroundStateList = stateList(brightenOrDarken(background, true), background) - keyStateList = if (themeStyle == THEME_STYLE_HOLO) stateList(keyBackground, keyBackground) + keyStateList = if (themeStyle == STYLE_HOLO) stateList(keyBackground, keyBackground) else stateList(brightenOrDarken(keyBackground, true), keyBackground) functionalKeyStateList = stateList(brightenOrDarken(functionalKey, true), functionalKey) - actionKeyStateList = if (themeStyle == THEME_STYLE_HOLO) functionalKeyStateList + actionKeyStateList = if (themeStyle == STYLE_HOLO) functionalKeyStateList else stateList(brightenOrDarken(accent, true), accent) - spaceBarStateList = if (themeStyle == THEME_STYLE_HOLO) stateList(spaceBar, spaceBar) + spaceBarStateList = if (themeStyle == STYLE_HOLO) stateList(spaceBar, spaceBar) else stateList(brightenOrDarken(spaceBar, true), spaceBar) } else { // need to set color to background if key borders are disabled, or there will be ugly keys @@ -124,13 +124,13 @@ class Colors ( backgroundStateList = stateList(brightenOrDarken(background, true), background) keyStateList = stateList(brightenOrDarken(background, true), Color.TRANSPARENT) functionalKeyStateList = keyStateList - actionKeyStateList = if (themeStyle == THEME_STYLE_HOLO) functionalKeyStateList + actionKeyStateList = if (themeStyle == STYLE_HOLO) functionalKeyStateList else stateList(brightenOrDarken(accent, true), accent) spaceBarStateList = stateList(brightenOrDarken(spaceBar, true), spaceBar) } keyTextFilter = colorFilter(keyText, BlendModeCompat.SRC_ATOP) actionKeyIconColorFilter = when { - themeStyle == THEME_STYLE_HOLO -> keyTextFilter + themeStyle == STYLE_HOLO -> keyTextFilter // the white icon may not have enough contrast, and can't be adjusted by the user isBrightColor(accent) -> colorFilter(Color.DKGRAY, BlendModeCompat.SRC_ATOP) else -> null @@ -146,10 +146,10 @@ class Colors ( BackgroundType.ACTION -> actionKeyStateList BackgroundType.SPACE -> spaceBarStateList BackgroundType.ADJUSTED_BACKGROUND -> adjustedBackgroundStateList - BackgroundType.SUGGESTION -> if (!hasKeyBorders && themeStyle == THEME_STYLE_MATERIAL) + BackgroundType.SUGGESTION -> if (!hasKeyBorders && themeStyle == STYLE_MATERIAL) adjustedBackgroundStateList else backgroundStateList - BackgroundType.ACTION_MORE_KEYS -> if (themeStyle == THEME_STYLE_HOLO) + BackgroundType.ACTION_MORE_KEYS -> if (themeStyle == STYLE_HOLO) adjustedBackgroundStateList else actionKeyStateList } @@ -172,7 +172,7 @@ class Colors ( else attr.getDrawable(R.styleable.KeyboardView_spacebarNoBorderBackground) } BackgroundType.ACTION -> { - if (themeStyle == THEME_STYLE_HOLO && hasKeyBorders) // no borders has a very small pressed drawable otherwise + if (themeStyle == STYLE_HOLO && hasKeyBorders) // no borders has a very small pressed drawable otherwise attr.getDrawable(R.styleable.KeyboardView_functionalKeyBackground) else attr.getDrawable(R.styleable.KeyboardView_keyBackground) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AppearanceSettingsFragment.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AppearanceSettingsFragment.kt index 5bc69ec41..5408aeec2 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AppearanceSettingsFragment.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/AppearanceSettingsFragment.kt @@ -24,9 +24,9 @@ class AppearanceSettingsFragment : SubScreenFragment() { private var needsReload = false - private val themeFamilyPref: ListPreference by lazy { preferenceScreen.findPreference(Settings.PREF_THEME_STYLE)!! } - private val themeVariantPref: ListPreference by lazy { preferenceScreen.findPreference(Settings.PREF_THEME_VARIANT)!! } - private val themeVariantNightPref: ListPreference? by lazy { preferenceScreen.findPreference(Settings.PREF_THEME_VARIANT_NIGHT) } + private val stylePref: ListPreference by lazy { preferenceScreen.findPreference(Settings.PREF_THEME_STYLE)!! } + private val colorsPref: ListPreference by lazy { preferenceScreen.findPreference(Settings.PREF_THEME_COLORS)!! } + private val colorsNightPref: ListPreference? by lazy { preferenceScreen.findPreference(Settings.PREF_THEME_COLORS_NIGHT) } private val dayNightPref: TwoStatePreference? by lazy { preferenceScreen.findPreference(Settings.PREF_THEME_DAY_NIGHT) } private val userColorsPref: Preference by lazy { preferenceScreen.findPreference("theme_select_colors")!! } private val userColorsPrefNight: Preference? by lazy { preferenceScreen.findPreference("theme_select_colors_night") } @@ -38,7 +38,7 @@ class AppearanceSettingsFragment : SubScreenFragment() { removeUnsuitablePreferences() setupTheme() - setThemeVariantPrefs(sharedPreferences.getString(Settings.PREF_THEME_STYLE, KeyboardTheme.THEME_STYLE_MATERIAL)!!) + setThemeVariantPrefs(sharedPreferences.getString(Settings.PREF_THEME_STYLE, KeyboardTheme.STYLE_MATERIAL)!!) setupKeyboardHeight(Settings.PREF_KEYBOARD_HEIGHT_SCALE, SettingsValues.DEFAULT_SIZE_SCALE) } @@ -58,7 +58,7 @@ class AppearanceSettingsFragment : SubScreenFragment() { private fun removeUnsuitablePreferences() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { removePreference(Settings.PREF_THEME_DAY_NIGHT) - removePreference(Settings.PREF_THEME_VARIANT_NIGHT) + removePreference(Settings.PREF_THEME_COLORS_NIGHT) } else { // on P there is experimental support for night mode, exposed by some roms like LineageOS // try to detect this using UI_MODE_NIGHT_UNDEFINED, but actually the system could always report day too? @@ -66,7 +66,7 @@ class AppearanceSettingsFragment : SubScreenFragment() { && (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_UNDEFINED ) { removePreference(Settings.PREF_THEME_DAY_NIGHT) - removePreference(Settings.PREF_THEME_VARIANT_NIGHT) + removePreference(Settings.PREF_THEME_COLORS_NIGHT) removePreference("theme_select_colors_night") } } @@ -83,9 +83,9 @@ class AppearanceSettingsFragment : SubScreenFragment() { } private fun setThemeVariantPrefs(themeFamily: String) { - themeVariantPref.apply { - entryValues = if (themeFamily == KeyboardTheme.THEME_STYLE_HOLO) KeyboardTheme.THEME_VARIANTS - else KeyboardTheme.THEME_VARIANTS.filterNot { it == KeyboardTheme.THEME_HOLO_WHITE }.toTypedArray() + colorsPref.apply { + entryValues = if (themeFamily == KeyboardTheme.STYLE_HOLO) KeyboardTheme.COLORS + else KeyboardTheme.COLORS.filterNot { it == KeyboardTheme.THEME_HOLO_WHITE }.toTypedArray() entries = entryValues.map { val resId = resources.getIdentifier("theme_name_$it", "string", requireContext().packageName) if (resId == 0) it else getString(resId) @@ -100,9 +100,9 @@ class AppearanceSettingsFragment : SubScreenFragment() { true } } - themeVariantNightPref?.apply { - entryValues = if (themeFamily == KeyboardTheme.THEME_STYLE_HOLO) KeyboardTheme.THEME_VARIANTS_DARK - else KeyboardTheme.THEME_VARIANTS_DARK.filterNot { it == KeyboardTheme.THEME_HOLO_WHITE }.toTypedArray() + colorsNightPref?.apply { + entryValues = if (themeFamily == KeyboardTheme.STYLE_HOLO) KeyboardTheme.COLORS_DARK + else KeyboardTheme.COLORS_DARK.filterNot { it == KeyboardTheme.THEME_HOLO_WHITE }.toTypedArray() entries = entryValues.map { val resId = resources.getIdentifier("theme_name_$it", "string", requireContext().packageName) if (resId == 0) it else getString(resId) @@ -120,9 +120,9 @@ class AppearanceSettingsFragment : SubScreenFragment() { } private fun setupTheme() { - themeFamilyPref.apply { - entries = KeyboardTheme.THEME_STYLES - entryValues = KeyboardTheme.THEME_STYLES + stylePref.apply { + entries = KeyboardTheme.STYLES + entryValues = KeyboardTheme.STYLES onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, value -> summary = entries[entryValues.indexOfFirst { it == value }] setThemeVariantPrefs(value.toString()) @@ -131,13 +131,13 @@ class AppearanceSettingsFragment : SubScreenFragment() { summary = entries[entryValues.indexOfFirst { it == value }] } dayNightPref?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, value -> - themeVariantNightPref?.isVisible = value as Boolean - userColorsPrefNight?.isVisible = value && themeVariantNightPref?.value == KeyboardTheme.THEME_USER_NIGHT + colorsNightPref?.isVisible = value as Boolean + userColorsPrefNight?.isVisible = value && colorsNightPref?.value == KeyboardTheme.THEME_USER_NIGHT true } - themeVariantNightPref?.isVisible = dayNightPref?.isChecked == true - userColorsPref.isVisible = themeVariantPref.value == KeyboardTheme.THEME_USER - userColorsPrefNight?.isVisible = dayNightPref?.isChecked == true && themeVariantNightPref?.value == KeyboardTheme.THEME_USER_NIGHT + colorsNightPref?.isVisible = dayNightPref?.isChecked == true + userColorsPref.isVisible = colorsPref.value == KeyboardTheme.THEME_USER + userColorsPrefNight?.isVisible = dayNightPref?.isChecked == true && colorsNightPref?.value == KeyboardTheme.THEME_USER_NIGHT } private fun setupKeyboardHeight(prefKey: String, defaultValue: Float) { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java index c39f8a9d2..3df70692f 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java @@ -55,8 +55,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_SOUND_ON = "sound_on"; public static final String PREF_POPUP_ON = "popup_on"; public static final String PREF_THEME_STYLE = "theme_style"; - public static final String PREF_THEME_VARIANT = "theme_variant"; - public static final String PREF_THEME_VARIANT_NIGHT = "theme_variant_night"; + public static final String PREF_THEME_COLORS = "theme_variant"; + public static final String PREF_THEME_COLORS_NIGHT = "theme_variant_night"; public static final String PREF_THEME_KEY_BORDERS = "theme_key_borders"; public static final String PREF_THEME_DAY_NIGHT = "theme_auto_day_night"; public static final String PREF_THEME_USER_COLOR_PREFIX = "theme_color_"; @@ -473,9 +473,9 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang boolean isNight = ResourceUtils.isNight(context.getResources()); if (prefs.getBoolean(PREF_FORCE_OPPOSITE_THEME, false)) isNight = !isNight; final String themeColors = (isNight && prefs.getBoolean(PREF_THEME_DAY_NIGHT, context.getResources().getBoolean(R.bool.day_night_default))) - ? prefs.getString(Settings.PREF_THEME_VARIANT_NIGHT, KeyboardTheme.THEME_DARKER) - : prefs.getString(Settings.PREF_THEME_VARIANT, KeyboardTheme.THEME_LIGHT); - final String themeStyle = prefs.getString(Settings.PREF_THEME_STYLE, KeyboardTheme.THEME_STYLE_MATERIAL); + ? prefs.getString(Settings.PREF_THEME_COLORS_NIGHT, KeyboardTheme.THEME_DARKER) + : prefs.getString(Settings.PREF_THEME_COLORS, KeyboardTheme.THEME_LIGHT); + final String themeStyle = prefs.getString(Settings.PREF_THEME_STYLE, KeyboardTheme.STYLE_MATERIAL); return KeyboardTheme.getThemeColors(themeColors, themeStyle, context, prefs); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 858220b2a..7d1bca46f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -556,11 +556,15 @@ New dictionary: This resource is copied from packages/apps/Settings/res/values/strings.xml --> \u0020ABCDEFGHIJKLMNOPQRSTUVWXYZ - + + Style + + Colors + + Colors (night) + Theme family - Theme variant - Theme variant (night) Key borders @@ -585,15 +589,15 @@ New dictionary: User-Defined (night) - Adjust theme colors + Adjust colors - Adjust theme colors (night) + Adjust colors (night) Choose color automatically Click for preview - Select colors for text and background + Select colors for text and backgrounds Keyboard background diff --git a/app/src/main/res/xml/prefs_screen_appearance.xml b/app/src/main/res/xml/prefs_screen_appearance.xml index 959f99298..d7ed9b642 100644 --- a/app/src/main/res/xml/prefs_screen_appearance.xml +++ b/app/src/main/res/xml/prefs_screen_appearance.xml @@ -15,16 +15,12 @@ - - + android:title="@string/theme_colors"/> + + + android:title="@string/theme_colors_night"/>