change KeyboardTheme to kotlin

This commit is contained in:
Helium314 2024-01-23 21:53:42 +01:00
parent a270653082
commit 911c609f7c
5 changed files with 315 additions and 425 deletions

View file

@ -1,417 +0,0 @@
/*
* Copyright (C) 2014 The Android Open Source Project
* modified
* SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
*/
package org.dslul.openboard.inputmethod.keyboard;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Build;
import android.os.Build.VERSION_CODES;
import androidx.core.content.ContextCompat;
import org.dslul.openboard.inputmethod.latin.R;
import org.dslul.openboard.inputmethod.latin.common.Colors;
import org.dslul.openboard.inputmethod.latin.common.DynamicColors;
import org.dslul.openboard.inputmethod.latin.common.DefaultColors;
import org.dslul.openboard.inputmethod.latin.settings.Settings;
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils;
import java.util.Arrays;
public final class KeyboardTheme {
// old themes
public static final String STYLE_MATERIAL = "Material";
public static final String STYLE_HOLO = "Holo";
public static final String STYLE_ROUNDED = "Rounded";
// new themes using the custom colors
public static final String THEME_LIGHT = "light";
public static final String THEME_HOLO_WHITE = "holo_white";
public static final String THEME_DARK = "dark";
public static final String THEME_DARKER = "darker";
public static final String THEME_BLACK = "black";
public static final String THEME_DYNAMIC = "dynamic";
public static final String THEME_USER = "user";
public static final String THEME_USER_NIGHT = "user_night";
public static final String THEME_BLUE_GRAY = "blue_gray";
public static final String THEME_BROWN = "brown";
public static final String THEME_CHOCOLATE = "chocolate";
public static final String THEME_CLOUDY = "cloudy";
public static final String THEME_FOREST = "forest";
public static final String THEME_INDIGO = "indigo";
public static final String THEME_OCEAN = "ocean";
public static final String THEME_PINK = "pink";
public static final String THEME_SAND = "sand";
public static final String THEME_VIOLETTE = "violette";
public static final String[] COLORS = Build.VERSION.SDK_INT < Build.VERSION_CODES.S
? new String[] { THEME_LIGHT, THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_USER,
THEME_BLUE_GRAY, THEME_BROWN, THEME_CHOCOLATE, THEME_CLOUDY, THEME_FOREST, THEME_INDIGO,
THEME_PINK, THEME_OCEAN, THEME_SAND, THEME_VIOLETTE }
: new String[] { THEME_LIGHT, THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_DYNAMIC,
THEME_USER, THEME_BLUE_GRAY, THEME_BROWN, THEME_CHOCOLATE, THEME_CLOUDY, THEME_FOREST, THEME_INDIGO,
THEME_PINK, THEME_OCEAN, THEME_SAND, THEME_VIOLETTE } ;
public static final String[] COLORS_DARK = Build.VERSION.SDK_INT < Build.VERSION_CODES.S
? new String[] { THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_USER_NIGHT,
THEME_CHOCOLATE, THEME_CLOUDY, THEME_FOREST, THEME_OCEAN, THEME_VIOLETTE }
: new String[] { THEME_HOLO_WHITE, THEME_DARK, THEME_DARKER, THEME_BLACK, THEME_DYNAMIC,
THEME_USER_NIGHT, THEME_CHOCOLATE, THEME_CLOUDY, THEME_FOREST, THEME_OCEAN, THEME_VIOLETTE } ;
public static final String[] STYLES = { STYLE_MATERIAL, STYLE_HOLO, STYLE_ROUNDED };
// These should be aligned with Keyboard.themeId and Keyboard.Case.keyboardTheme
// attributes' values in attrs.xml.
public static final int THEME_ID_HOLO_BASE = 0;
public static final int THEME_ID_LXX_BASE = 1;
public static final int THEME_ID_LXX_BASE_BORDER = 2;
public static final int THEME_ID_ROUNDED_BASE = 3;
public static final int THEME_ID_ROUNDED_BASE_BORDER = 4;
public static final int DEFAULT_THEME_ID = THEME_ID_LXX_BASE;
/* package private for testing */
static final KeyboardTheme[] KEYBOARD_THEMES = {
new KeyboardTheme(THEME_ID_HOLO_BASE, "HoloBase", R.style.KeyboardTheme_HoloBase),
new KeyboardTheme(THEME_ID_LXX_BASE, "LXXBase", R.style.KeyboardTheme_LXX_Base),
new KeyboardTheme(THEME_ID_LXX_BASE_BORDER, "LXXBaseBorder", R.style.KeyboardTheme_LXX_Base_Border),
new KeyboardTheme(THEME_ID_ROUNDED_BASE, "RoundedBase", R.style.KeyboardTheme_Rounded_Base),
new KeyboardTheme(THEME_ID_ROUNDED_BASE_BORDER, "RoundedBaseBorder", R.style.KeyboardTheme_Rounded_Base_Border)
};
public final int mThemeId;
public final int mStyleId;
public final String mThemeName;
// Note: The themeId should be aligned with "themeId" attribute of Keyboard style
// in values/themes-<style>.xml.
private KeyboardTheme(final int themeId, final String themeName, final int styleId) {
mThemeId = themeId;
mThemeName = themeName;
mStyleId = styleId;
}
@Override
public boolean equals(final Object o) {
if (o == this) return true;
return (o instanceof KeyboardTheme) && ((KeyboardTheme)o).mThemeId == mThemeId;
}
@Override
public int hashCode() {
return mThemeId;
}
/* package private for testing */
static KeyboardTheme searchKeyboardThemeById(final int themeId,
final KeyboardTheme[] availableThemeIds) {
// TODO: This search algorithm isn't optimal if there are many themes.
for (final KeyboardTheme theme : availableThemeIds) {
if (theme.mThemeId == themeId) {
return theme;
}
}
return null;
}
public static String getKeyboardThemeName(final int themeId) {
final KeyboardTheme theme = searchKeyboardThemeById(themeId, KEYBOARD_THEMES);
return theme.mThemeName;
}
public static KeyboardTheme getKeyboardTheme(final Context context) {
final SharedPreferences prefs = DeviceProtectedUtils.getSharedPreferences(context);
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(STYLE_HOLO))
matchingId = THEME_ID_HOLO_BASE;
else if (style.equals(STYLE_ROUNDED))
matchingId = borders ? THEME_ID_ROUNDED_BASE_BORDER : THEME_ID_ROUNDED_BASE;
else
matchingId = borders ? THEME_ID_LXX_BASE_BORDER : THEME_ID_LXX_BASE;
for (KeyboardTheme keyboardTheme : KEYBOARD_THEMES) {
if (keyboardTheme.mThemeId == matchingId)
return keyboardTheme;
}
return KEYBOARD_THEMES[DEFAULT_THEME_ID];
}
public static int getThemeActionAndEmojiKeyLabelFlags(final int themeId) {
if (themeId == THEME_ID_LXX_BASE || themeId == THEME_ID_ROUNDED_BASE)
return Key.LABEL_FLAGS_KEEP_BACKGROUND_ASPECT_RATIO;
return 0;
}
public static Colors getThemeColors(final String themeColors, final String themeStyle, final Context context, final SharedPreferences prefs) {
final boolean hasBorders = prefs.getBoolean(Settings.PREF_THEME_KEY_BORDERS, false);
switch (themeColors) {
case THEME_USER:
return new DefaultColors(
themeStyle,
hasBorders,
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_ACCENT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_GESTURE_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_BACKGROUND_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_KEYS_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_FUNCTIONAL_KEYS_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_TEXT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_HINT_TEXT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SUGGESTION_TEXT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_TEXT_SUFFIX, false)
);
case THEME_USER_NIGHT:
return new DefaultColors(
themeStyle,
hasBorders,
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_ACCENT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_GESTURE_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_BACKGROUND_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_KEYS_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_FUNCTIONAL_KEYS_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_TEXT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_HINT_TEXT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SUGGESTION_TEXT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_TEXT_SUFFIX, true)
);
case THEME_DARK:
return new DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
// colors taken from the drawable
Color.parseColor("#263238"),
Color.parseColor("#364248"),
Color.parseColor("#2d393f"),
Color.parseColor("#364248"),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.spacebar_letter_color_lxx_dark)
);
case THEME_HOLO_WHITE:
return new DefaultColors(
themeStyle,
hasBorders,
Color.parseColor("#FFFFFF"),
Color.parseColor("#FFFFFF"),
// colors taken from the drawable
Color.parseColor("#282828"),
Color.parseColor("#FFFFFF"), // transparency!
Color.parseColor("#444444"), // should be 222222, but the key drawable is already grey
Color.parseColor("#FFFFFF"),
Color.parseColor("#FFFFFF"),
Color.parseColor("#282828"),
Color.parseColor("#FFFFFF"),
Color.parseColor("#80FFFFFF")
);
case THEME_DARKER:
return new DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
ContextCompat.getColor(context, R.color.keyboard_background_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_background_functional_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.spacebar_letter_color_lxx_dark)
);
case THEME_BLACK:
return new DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
ContextCompat.getColor(context, R.color.background_amoled_black),
ContextCompat.getColor(context, R.color.background_amoled_dark),
ContextCompat.getColor(context, R.color.background_amoled_dark),
ContextCompat.getColor(context, R.color.background_amoled_dark),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.spacebar_letter_color_lxx_dark)
);
case THEME_DYNAMIC:
if (Build.VERSION.SDK_INT >= VERSION_CODES.S) {
return new DynamicColors(context, themeStyle, hasBorders);
}
case THEME_BLUE_GRAY:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(120, 144, 156),
Color.rgb(120, 144, 156),
Color.rgb(236, 239, 241),
Color.rgb(255, 255, 255),
Color.rgb(207, 216, 220),
Color.rgb(255, 255, 255),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0)
);
case THEME_BROWN:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(141, 110, 99),
Color.rgb(141, 110, 99),
Color.rgb(239, 235, 233),
Color.rgb(255, 255, 255),
Color.rgb(215, 204, 200),
Color.rgb(255, 255, 255),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0)
);
case THEME_CHOCOLATE:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(80, 128, 255),
Color.rgb(80, 128, 255),
Color.rgb(140, 112, 94),
Color.rgb(193, 163, 146),
Color.rgb(168, 127, 103),
Color.rgb(193, 163, 146),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255)
);
case THEME_CLOUDY:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(255,113,129),
Color.rgb(255,113,129),
Color.rgb(81,97,113),
Color.rgb(117, 128, 142),
Color.rgb(99, 109, 121),
Color.rgb(117, 128, 142),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255)
);
case THEME_FOREST:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(75, 110, 75),
Color.rgb(75, 110, 75),
Color.rgb(181, 125, 88),
Color.rgb(228, 212, 191),
Color.rgb(212, 186, 153),
Color.rgb(228, 212, 191),
Color.rgb(0, 50, 0),
Color.rgb(0, 50, 0),
Color.rgb(0, 50, 0),
Color.rgb(0, 80, 0)
);
case THEME_INDIGO:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(92, 107, 192),
Color.rgb(92, 107, 192),
Color.rgb(232, 234, 246),
Color.rgb(255, 255, 255),
Color.rgb(197, 202, 233),
Color.rgb(255, 255, 255),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0)
);
case THEME_OCEAN:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(255, 124, 0),
Color.rgb(255, 124, 0),
Color.rgb(89, 109, 155),
Color.rgb(132, 157, 212),
Color.rgb(81, 116, 194),
Color.rgb(132, 157, 212),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255)
);
case THEME_PINK:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(236, 64, 122),
Color.rgb(236, 64, 122),
Color.rgb(252, 228, 236),
Color.rgb(255, 255, 255),
Color.rgb(248, 187, 208),
Color.rgb(255, 255, 255),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0)
);
case THEME_SAND:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(110, 155, 255),
Color.rgb(110, 155, 255),
Color.rgb(242, 232, 218),
Color.rgb(255, 255, 255),
Color.rgb(234, 211, 185),
Color.rgb(255, 255, 255),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0),
Color.rgb(0, 0, 0)
);
case THEME_VIOLETTE:
return new DefaultColors(
themeStyle,
hasBorders,
Color.rgb(255, 96, 255),
Color.rgb(255, 96, 255),
Color.rgb(112, 112, 174),
Color.rgb(150, 150, 216),
Color.rgb(123, 123, 206),
Color.rgb(150, 150, 216),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255),
Color.rgb(255, 255, 255)
);
case THEME_LIGHT:
default:
return new DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_light),
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_light),
ContextCompat.getColor(context, R.color.keyboard_background_lxx_light_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_light_border),
ContextCompat.getColor(context, R.color.key_background_functional_lxx_light_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_light_border),
ContextCompat.getColor(context, R.color.key_text_color_lxx_light),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_light),
ContextCompat.getColor(context, R.color.key_text_color_lxx_light),
ContextCompat.getColor(context, R.color.spacebar_letter_color_lxx_light)
);
}
}
}

View file

@ -0,0 +1,308 @@
/*
* Copyright (C) 2014 The Android Open Source Project
* modified
* SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only
*/
package org.dslul.openboard.inputmethod.keyboard
import android.content.Context
import android.content.SharedPreferences
import android.graphics.Color
import android.os.Build
import android.os.Build.VERSION_CODES
import androidx.core.content.ContextCompat
import org.dslul.openboard.inputmethod.latin.R
import org.dslul.openboard.inputmethod.latin.common.Colors
import org.dslul.openboard.inputmethod.latin.common.DefaultColors
import org.dslul.openboard.inputmethod.latin.common.DynamicColors
import org.dslul.openboard.inputmethod.latin.settings.Settings
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils
class KeyboardTheme // Note: The themeId should be aligned with "themeId" attribute of Keyboard style in values/themes-<style>.xml.
private constructor(val themeId: Int, @JvmField val mStyleId: Int) {
override fun equals(other: Any?) = if (other === this) true
else (other as? KeyboardTheme)?.themeId == themeId
override fun hashCode(): Int {
return themeId
}
companion object {
// old themes
const val STYLE_MATERIAL = "Material"
const val STYLE_HOLO = "Holo"
const val STYLE_ROUNDED = "Rounded"
// new themes using the custom colors
const val THEME_LIGHT = "light"
const val THEME_HOLO_WHITE = "holo_white"
const val THEME_DARK = "dark"
const val THEME_DARKER = "darker"
const val THEME_BLACK = "black"
const val THEME_DYNAMIC = "dynamic"
const val THEME_USER = "user"
const val THEME_USER_NIGHT = "user_night"
const val THEME_BLUE_GRAY = "blue_gray"
const val THEME_BROWN = "brown"
const val THEME_CHOCOLATE = "chocolate"
const val THEME_CLOUDY = "cloudy"
const val THEME_FOREST = "forest"
const val THEME_INDIGO = "indigo"
const val THEME_OCEAN = "ocean"
const val THEME_PINK = "pink"
const val THEME_SAND = "sand"
const val THEME_VIOLETTE = "violette"
val COLORS = listOfNotNull(
THEME_LIGHT, if (Build.VERSION.SDK_INT < VERSION_CODES.S) null else THEME_DYNAMIC, THEME_HOLO_WHITE, THEME_DARK,
THEME_DARKER, THEME_BLACK, THEME_BLUE_GRAY, THEME_BROWN, THEME_CHOCOLATE, THEME_CLOUDY, THEME_FOREST,
THEME_INDIGO, THEME_PINK, THEME_OCEAN, THEME_SAND, THEME_VIOLETTE, THEME_USER
)
val COLORS_DARK = listOfNotNull(
THEME_HOLO_WHITE, THEME_DARK, if (Build.VERSION.SDK_INT < VERSION_CODES.S) null else THEME_DYNAMIC,
THEME_DARKER, THEME_BLACK, THEME_CHOCOLATE, THEME_CLOUDY, THEME_FOREST, THEME_OCEAN, THEME_VIOLETTE, THEME_USER_NIGHT
)
val STYLES = arrayOf(STYLE_MATERIAL, STYLE_HOLO, STYLE_ROUNDED)
// These should be aligned with Keyboard.themeId and Keyboard.Case.keyboardTheme
// attributes' values in attrs.xml.
private const val THEME_ID_HOLO_BASE = 0
private const val THEME_ID_LXX_BASE = 1
private const val THEME_ID_LXX_BASE_BORDER = 2
private const val THEME_ID_ROUNDED_BASE = 3
private const val THEME_ID_ROUNDED_BASE_BORDER = 4
private const val DEFAULT_THEME_ID = THEME_ID_LXX_BASE
private val KEYBOARD_THEMES = arrayOf(
KeyboardTheme(THEME_ID_HOLO_BASE, R.style.KeyboardTheme_HoloBase),
KeyboardTheme(THEME_ID_LXX_BASE, R.style.KeyboardTheme_LXX_Base),
KeyboardTheme(THEME_ID_LXX_BASE_BORDER, R.style.KeyboardTheme_LXX_Base_Border),
KeyboardTheme(THEME_ID_ROUNDED_BASE, R.style.KeyboardTheme_Rounded_Base),
KeyboardTheme(THEME_ID_ROUNDED_BASE_BORDER, R.style.KeyboardTheme_Rounded_Base_Border)
)
@JvmStatic
fun getKeyboardTheme(context: Context): KeyboardTheme {
val prefs = DeviceProtectedUtils.getSharedPreferences(context)
val style = prefs.getString(Settings.PREF_THEME_STYLE, STYLE_MATERIAL)
val borders = prefs.getBoolean(Settings.PREF_THEME_KEY_BORDERS, false)
val matchingId = when (style) {
STYLE_HOLO -> THEME_ID_HOLO_BASE
STYLE_ROUNDED -> if (borders) THEME_ID_ROUNDED_BASE_BORDER else THEME_ID_ROUNDED_BASE
else -> if (borders) THEME_ID_LXX_BASE_BORDER else THEME_ID_LXX_BASE
}
return KEYBOARD_THEMES.firstOrNull { it.themeId == matchingId } ?: KEYBOARD_THEMES[DEFAULT_THEME_ID]
}
fun getThemeActionAndEmojiKeyLabelFlags(themeId: Int): Int {
return if (themeId == THEME_ID_LXX_BASE || themeId == THEME_ID_ROUNDED_BASE) Key.LABEL_FLAGS_KEEP_BACKGROUND_ASPECT_RATIO else 0
}
@JvmStatic
fun getThemeColors(themeColors: String, themeStyle: String, context: Context, prefs: SharedPreferences): Colors {
val hasBorders = prefs.getBoolean(Settings.PREF_THEME_KEY_BORDERS, false)
return when (themeColors) {
THEME_USER -> DefaultColors(
themeStyle,
hasBorders,
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_ACCENT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_BACKGROUND_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_KEYS_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_FUNCTIONAL_KEYS_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_TEXT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_HINT_TEXT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SUGGESTION_TEXT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_TEXT_SUFFIX, false),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_GESTURE_SUFFIX, false),
)
THEME_USER_NIGHT -> DefaultColors(
themeStyle,
hasBorders,
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_ACCENT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_BACKGROUND_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_KEYS_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_FUNCTIONAL_KEYS_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_TEXT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_HINT_TEXT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SUGGESTION_TEXT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_SPACEBAR_TEXT_SUFFIX, true),
Settings.readUserColor(prefs, context, Settings.PREF_COLOR_GESTURE_SUFFIX, true),
)
THEME_DYNAMIC -> {
if (Build.VERSION.SDK_INT >= VERSION_CODES.S) DynamicColors(context, themeStyle, hasBorders)
else getThemeColors(THEME_LIGHT, themeStyle, context, prefs)
}
THEME_DARK -> DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
Color.parseColor("#263238"),
Color.parseColor("#364248"),
Color.parseColor("#2d393f"),
Color.parseColor("#364248"),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_dark),
)
THEME_HOLO_WHITE -> DefaultColors(
themeStyle,
hasBorders,
Color.WHITE,
Color.parseColor("#282828"),
Color.WHITE, // drawable is transparent
Color.parseColor("#444444"), // should be 222222, but the key drawable is already grey
Color.WHITE,
Color.WHITE,
Color.parseColor("#282828"),
Color.WHITE,
Color.parseColor("#80FFFFFF"),
)
THEME_DARKER -> DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
ContextCompat.getColor(context, R.color.keyboard_background_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_background_functional_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_dark_border),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_dark),
)
THEME_BLACK -> DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_dark),
ContextCompat.getColor(context, R.color.background_amoled_black),
ContextCompat.getColor(context, R.color.background_amoled_dark),
ContextCompat.getColor(context, R.color.background_amoled_dark),
ContextCompat.getColor(context, R.color.background_amoled_dark),
ContextCompat.getColor(context, R.color.key_text_color_lxx_dark),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_dark),
)
THEME_BLUE_GRAY -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(120, 144, 156),
Color.rgb(236, 239, 241),
Color.WHITE,
Color.rgb(207, 216, 220),
Color.WHITE,
Color.BLACK,
Color.BLACK,
)
THEME_BROWN -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(141, 110, 99),
Color.rgb(239, 235, 233),
Color.WHITE,
Color.rgb(215, 204, 200),
Color.WHITE,
Color.BLACK,
Color.BLACK,
)
THEME_CHOCOLATE -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(80, 128, 255),
Color.rgb(140, 112, 94),
Color.rgb(193, 163, 146),
Color.rgb(168, 127, 103),
Color.rgb(193, 163, 146),
Color.WHITE,
Color.WHITE,
)
THEME_CLOUDY -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(255, 113, 129),
Color.rgb(81, 97, 113),
Color.rgb(117, 128, 142),
Color.rgb(99, 109, 121),
Color.rgb(117, 128, 142),
Color.WHITE,
Color.WHITE,
)
THEME_FOREST -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(75, 110, 75),
Color.rgb(181, 125, 88),
Color.rgb(228, 212, 191),
Color.rgb(212, 186, 153),
Color.rgb(228, 212, 191),
Color.rgb(0, 50, 0),
Color.rgb(0, 50, 0),
Color.rgb(0, 50, 0),
Color.rgb(0, 80, 0),
)
THEME_INDIGO -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(92, 107, 192),
Color.rgb(232, 234, 246),
Color.WHITE,
Color.rgb(197, 202, 233),
Color.WHITE,
Color.BLACK,
Color.BLACK,
)
THEME_OCEAN -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(255, 124, 0),
Color.rgb(89, 109, 155),
Color.rgb(132, 157, 212),
Color.rgb(81, 116, 194),
Color.rgb(132, 157, 212),
Color.WHITE,
Color.WHITE,
)
THEME_PINK -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(236, 64, 122),
Color.rgb(252, 228, 236),
Color.WHITE,
Color.rgb(248, 187, 208),
Color.WHITE,
Color.BLACK,
Color.BLACK,
)
THEME_SAND -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(110, 155, 255),
Color.rgb(242, 232, 218),
Color.WHITE,
Color.rgb(234, 211, 185),
Color.WHITE,
Color.BLACK,
Color.BLACK,
)
THEME_VIOLETTE -> DefaultColors(
themeStyle,
hasBorders,
Color.rgb(255, 96, 255),
Color.rgb(112, 112, 174),
Color.rgb(150, 150, 216),
Color.rgb(123, 123, 206),
Color.rgb(150, 150, 216),
Color.WHITE,
Color.WHITE,
)
else /* THEME_LIGHT */ -> DefaultColors(
themeStyle,
hasBorders,
ContextCompat.getColor(context, R.color.gesture_trail_color_lxx_light),
ContextCompat.getColor(context, R.color.keyboard_background_lxx_light_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_light_border),
ContextCompat.getColor(context, R.color.key_background_functional_lxx_light_border),
ContextCompat.getColor(context, R.color.key_background_normal_lxx_light_border),
ContextCompat.getColor(context, R.color.key_text_color_lxx_light),
ContextCompat.getColor(context, R.color.key_hint_letter_color_lxx_light),
)
}
}
}
}

View file

@ -21,8 +21,8 @@ import androidx.core.graphics.BlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat
import androidx.core.graphics.ColorUtils
import androidx.core.graphics.drawable.DrawableCompat
import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.STYLE_HOLO
import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.STYLE_MATERIAL
import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.Companion.STYLE_HOLO
import org.dslul.openboard.inputmethod.keyboard.KeyboardTheme.Companion.STYLE_MATERIAL
import org.dslul.openboard.inputmethod.latin.common.ColorType.*
import org.dslul.openboard.inputmethod.latin.R
import org.dslul.openboard.inputmethod.latin.utils.adjustLuminosityAndKeepAlpha
@ -350,15 +350,15 @@ class DefaultColors (
override val themeStyle: String,
override val hasKeyBorders: Boolean,
private val accent: Int,
private val gesture: Int,
private val background: Int,
private val keyBackground: Int,
private val functionalKey: Int,
private val spaceBar: Int,
private val keyText: Int,
private val keyHintText: Int,
private val suggestionText: Int,
private val spaceBarText: Int
private val suggestionText: Int = keyText,
private val spaceBarText: Int = keyHintText,
private val gesture: Int = accent,
) : Colors {
private val navBar: Int
/** brightened or darkened variant of [background], to be used if exact background color would be

View file

@ -89,7 +89,7 @@ class AppearanceSettingsFragment : SubScreenFragment() {
private fun setColorPrefs(style: String) {
colorsPref.apply {
entryValues = if (style == KeyboardTheme.STYLE_HOLO) KeyboardTheme.COLORS
entryValues = if (style == KeyboardTheme.STYLE_HOLO) KeyboardTheme.COLORS.toTypedArray()
else KeyboardTheme.COLORS.filterNot { it == KeyboardTheme.THEME_HOLO_WHITE }.toTypedArray()
entries = entryValues.getNamesFromResourcesIfAvailable("theme_name_")
if (value !in entryValues)
@ -103,7 +103,7 @@ class AppearanceSettingsFragment : SubScreenFragment() {
}
}
colorsNightPref?.apply {
entryValues = if (style == KeyboardTheme.STYLE_HOLO) KeyboardTheme.COLORS_DARK
entryValues = if (style == KeyboardTheme.STYLE_HOLO) KeyboardTheme.COLORS_DARK.toTypedArray()
else KeyboardTheme.COLORS_DARK.filterNot { it == KeyboardTheme.THEME_HOLO_WHITE }.toTypedArray()
entries = entryValues.getNamesFromResourcesIfAvailable("theme_name_")
if (value !in entryValues)

View file

@ -31,7 +31,6 @@
<!-- Color resources for the old LXX_Dark theme, now used for several dark themes. -->
<color name="key_text_color_lxx_dark">#FFFFFF</color>
<color name="key_hint_letter_color_lxx_dark">#80FFFFFF</color>
<color name="spacebar_letter_color_lxx_dark">#80FFFFFF</color>
<!-- Color resources for the old LXX_Dark_Border theme, now for THEME_DARKER. -->
<color name="keyboard_background_lxx_dark_border">#0d0d0d</color>