improve automatic text color selection

This commit is contained in:
Helium314 2023-11-03 12:59:23 +01:00
parent f8165e5505
commit fec5bc97b4
2 changed files with 18 additions and 4 deletions

View file

@ -504,7 +504,15 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
return ContextCompat.getColor(getDayNightContext(context, isNight), R.color.accent); return ContextCompat.getColor(getDayNightContext(context, isNight), R.color.accent);
case PREF_COLOR_TEXT_SUFFIX: case PREF_COLOR_TEXT_SUFFIX:
// base it on background color, and not key, because it's also used for suggestions // base it on background color, and not key, because it's also used for suggestions
if (ColorUtilKt.isBrightColor(readUserColor(prefs, context, PREF_COLOR_BACKGROUND_SUFFIX, isNight))) return Color.BLACK; final int background = readUserColor(prefs, context, PREF_COLOR_BACKGROUND_SUFFIX, isNight);
if (ColorUtilKt.isBrightColor(background)) {
// but if key borders are enabled, we still want reasonable contrast
if (!prefs.getBoolean(Settings.PREF_THEME_KEY_BORDERS, false)
|| ColorUtilKt.isGoodContrast(Color.BLACK, readUserColor(prefs, context, PREF_COLOR_KEYS_SUFFIX, isNight)))
return Color.BLACK;
else
return Color.GRAY;
}
else return Color.WHITE; else return Color.WHITE;
case PREF_COLOR_HINT_TEXT_SUFFIX: case PREF_COLOR_HINT_TEXT_SUFFIX:
if (ColorUtilKt.isBrightColor(readUserColor(prefs, context, PREF_COLOR_KEYS_SUFFIX, isNight))) return Color.DKGRAY; if (ColorUtilKt.isBrightColor(readUserColor(prefs, context, PREF_COLOR_KEYS_SUFFIX, isNight))) return Color.DKGRAY;
@ -518,8 +526,11 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
case PREF_COLOR_SPACEBAR_TEXT_SUFFIX: case PREF_COLOR_SPACEBAR_TEXT_SUFFIX:
final int spacebar = readUserColor(prefs, context, PREF_COLOR_SPACEBAR_SUFFIX, isNight); final int spacebar = readUserColor(prefs, context, PREF_COLOR_SPACEBAR_SUFFIX, isNight);
final int hintText = readUserColor(prefs, context, PREF_COLOR_HINT_TEXT_SUFFIX, isNight); final int hintText = readUserColor(prefs, context, PREF_COLOR_HINT_TEXT_SUFFIX, isNight);
if (ColorUtilKt.colorDistanceSquared(hintText, spacebar) > 80 * 80) return hintText & 0x80FFFFFF; // add some transparency if (ColorUtilKt.isGoodContrast(hintText, spacebar)) return hintText & 0x80FFFFFF; // add some transparency
else return readUserColor(prefs, context, PREF_COLOR_TEXT_SUFFIX, isNight) & 0x80FFFFFF; final int text = readUserColor(prefs, context, PREF_COLOR_TEXT_SUFFIX, isNight);
if (ColorUtilKt.isGoodContrast(text, spacebar)) return text & 0x80FFFFFF;
if (ColorUtilKt.isBrightColor(spacebar)) return Color.BLACK & 0x80FFFFFF;
else return Color.WHITE & 0x80FFFFFF;
case PREF_COLOR_BACKGROUND_SUFFIX: case PREF_COLOR_BACKGROUND_SUFFIX:
default: default:
return ContextCompat.getColor(getDayNightContext(context, isNight), R.color.keyboard_background); return ContextCompat.getColor(getDayNightContext(context, isNight), R.color.keyboard_background);

View file

@ -16,7 +16,10 @@ fun isDarkColor(@ColorInt color: Int) =
if (android.R.color.transparent == color) true if (android.R.color.transparent == color) true
else getBrightnessSquared(color) < 50 * 50 else getBrightnessSquared(color) < 50 * 50
fun colorDistanceSquared(@ColorInt color1: Int, @ColorInt color2: Int): Int { fun isGoodContrast(@ColorInt color1: Int, @ColorInt color2: Int) =
colorDistanceSquared(color1, color2) > 80 * 80
private fun colorDistanceSquared(@ColorInt color1: Int, @ColorInt color2: Int): Int {
val diffR = Color.red(color1) - Color.red(color2) val diffR = Color.red(color1) - Color.red(color2)
val diffG = Color.green(color1) - Color.green(color2) val diffG = Color.green(color1) - Color.green(color2)
val diffB = Color.blue(color1) - Color.blue(color2) val diffB = Color.blue(color1) - Color.blue(color2)