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 85bfb1e2b..0fca466cf 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 @@ -177,7 +177,7 @@ public final class KeyboardTheme implements Comparable { Color.parseColor("#FFFFFF"), Color.parseColor("#FFFFFF"), Color.parseColor("#282828"), - Color.parseColor("#282828") + Color.parseColor("#80FFFFFF") ); case THEME_DARKER: return new Colors( diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java index 8f976f034..429ce6d0a 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardView.java @@ -32,6 +32,7 @@ import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.common.BackgroundType; import org.dslul.openboard.inputmethod.latin.common.Colors; import org.dslul.openboard.inputmethod.latin.common.Constants; +import org.dslul.openboard.inputmethod.latin.common.StringUtils; import org.dslul.openboard.inputmethod.latin.settings.Settings; import org.dslul.openboard.inputmethod.latin.suggestions.MoreSuggestionsView; import org.dslul.openboard.inputmethod.latin.utils.TypefaceUtils; @@ -428,7 +429,10 @@ public class KeyboardView extends View { } if (key.isEnabled()) { - paint.setColor(key.selectTextColor(params)); + if (StringUtils.mightBeEmoji(label)) + paint.setColor(key.selectTextColor(params) | 0xFF000000); // ignore alpha for emojis (though actually color isn't applied anyway and we could just set white) + else + paint.setColor(key.selectTextColor(params)); // Set a drop shadow for the text if the shadow radius is positive value. if (mKeyTextShadowRadius > 0.0f) { paint.setShadowLayer(mKeyTextShadowRadius, 0.0f, 0.0f, params.mTextShadowColor); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java index aa005a38d..c122c10b7 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/MainKeyboardView.java @@ -64,10 +64,8 @@ import java.util.WeakHashMap; * A view that is responsible for detecting key presses and touch movements. * * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarTextRatio - * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarTextColor * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarTextShadowRadius * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarTextShadowColor - * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarFinalAlpha * @attr ref R.styleable#MainKeyboardView_languageOnSpacebarFadeoutAnimator * @attr ref R.styleable#MainKeyboardView_altCodeKeyWhileTypingFadeoutAnimator * @attr ref R.styleable#MainKeyboardView_altCodeKeyWhileTypingFadeinAnimator @@ -203,15 +201,13 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy mLanguageOnSpacebarTextRatio = mainKeyboardViewAttr.getFraction( R.styleable.MainKeyboardView_languageOnSpacebarTextRatio, 1, 1, 1.0f); final Colors colors = Settings.getInstance().getCurrent().mColors; - mLanguageOnSpacebarTextColor = colors.getSpaceBarText(); //mainKeyboardViewAttr.getColor(R.styleable.MainKeyboardView_languageOnSpacebarTextColor, 0); + mLanguageOnSpacebarTextColor = colors.getSpaceBarText(); mLanguageOnSpacebarTextShadowRadius = mainKeyboardViewAttr.getFloat( R.styleable.MainKeyboardView_languageOnSpacebarTextShadowRadius, LANGUAGE_ON_SPACEBAR_TEXT_SHADOW_RADIUS_DISABLED); mLanguageOnSpacebarTextShadowColor = mainKeyboardViewAttr.getColor( R.styleable.MainKeyboardView_languageOnSpacebarTextShadowColor, 0); - mLanguageOnSpacebarFinalAlpha = mainKeyboardViewAttr.getInt( - R.styleable.MainKeyboardView_languageOnSpacebarFinalAlpha, - Constants.Color.ALPHA_OPAQUE); + mLanguageOnSpacebarFinalAlpha = Color.alpha(mLanguageOnSpacebarTextColor); final int languageOnSpacebarFadeoutAnimatorResId = mainKeyboardViewAttr.getResourceId( R.styleable.MainKeyboardView_languageOnSpacebarFadeoutAnimator, 0); final int altCodeKeyWhileTypingFadeoutAnimatorResId = mainKeyboardViewAttr.getResourceId( @@ -249,6 +245,8 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy mMoreKeysKeyboardContainer = inflater.inflate(moreKeysKeyboardLayoutId, null); mMoreKeysKeyboardForActionContainer = inflater.inflate(moreKeysKeyboardForActionLayoutId, null); mLanguageOnSpacebarFadeoutAnimator = loadObjectAnimator(languageOnSpacebarFadeoutAnimatorResId, this); + if (mLanguageOnSpacebarFadeoutAnimator != null) + mLanguageOnSpacebarFadeoutAnimator.setIntValues(255, mLanguageOnSpacebarFinalAlpha); mAltCodeKeyWhileTypingFadeoutAnimator = loadObjectAnimator(altCodeKeyWhileTypingFadeoutAnimatorResId, this); mAltCodeKeyWhileTypingFadeinAnimator = loadObjectAnimator(altCodeKeyWhileTypingFadeinAnimatorResId, this); 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 e45c5108d..59b8b49d4 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 @@ -126,11 +126,11 @@ class Colors ( else stateList(brightenOrDarken(accent, true), accent) spaceBarStateList = stateList(brightenOrDarken(spaceBar, true), spaceBar) } - keyTextFilter = colorFilter(keyText, BlendModeCompat.SRC_ATOP) + keyTextFilter = colorFilter(keyText) actionKeyIconColorFilter = when { 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) + isBrightColor(accent) -> colorFilter(Color.DKGRAY) else -> null } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/ColorsSettingsFragment.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/ColorsSettingsFragment.kt index f077a105e..9bc832347 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/ColorsSettingsFragment.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/ColorsSettingsFragment.kt @@ -98,9 +98,7 @@ open class ColorsSettingsFragment : Fragment(R.layout.color_settings) { val hidden = RichInputMethodManager.getInstance().inputMethodManager.hideSoftInputFromWindow(binding.dummyText.windowToken, 0) val initialColor = Settings.readUserColor(prefs, requireContext(), colorPrefs[index], isNight) val picker = ColorPickerView(requireContext()) - // todo: later alpha bar should be activated, but currently setting alpha leads to glitches, - // e.g. when setting alpha on key text it's not applied for key icons, but for emojis - picker.showAlpha(false) + picker.showAlpha(colorPref != Settings.PREF_COLOR_BACKGROUND_SUFFIX) // background behind background looks broken and sometimes is dark, sometimes light picker.showHex(true) picker.showPreview(true) picker.color = initialColor 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 cad025f39..8a304310f 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 @@ -522,8 +522,10 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang case PREF_COLOR_SPACEBAR_SUFFIX: return readUserColor(prefs, context, PREF_COLOR_KEYS_SUFFIX, isNight); case PREF_COLOR_SPACEBAR_TEXT_SUFFIX: - if (ColorUtilKt.isBrightColor(readUserColor(prefs, context, PREF_COLOR_SPACEBAR_SUFFIX, isNight))) return Color.DKGRAY; - else return readUserColor(prefs, context, PREF_COLOR_TEXT_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); + if (ColorUtilKt.colorDistanceSquared(hintText, spacebar) > 80 * 80) return hintText & 0x80FFFFFF; // add some transparency + else return readUserColor(prefs, context, PREF_COLOR_TEXT_SUFFIX, isNight) & 0x80FFFFFF; case PREF_COLOR_BACKGROUND_SUFFIX: default: return ContextCompat.getColor(getDayNightContext(context, isNight), R.color.keyboard_background); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/SuggestionStripView.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/SuggestionStripView.java index 96169331b..532da77aa 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/SuggestionStripView.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/suggestions/SuggestionStripView.java @@ -203,13 +203,13 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick mToolbarArrowIcon = ContextCompat.getDrawable(context, R.drawable.ic_arrow_right); mDefaultBackground = mToolbarKey.getBackground(); colors.setBackgroundColor(mDefaultBackground, BackgroundType.SUGGESTION); - mEnabledToolKeyBackground.setColors(new int[] {colors.getAccent(), Color.TRANSPARENT}); + mEnabledToolKeyBackground.setColors(new int[] {colors.getAccent() | 0xFF000000, Color.TRANSPARENT}); // ignore alpha on accent color mEnabledToolKeyBackground.setGradientType(GradientDrawable.RADIAL_GRADIENT); mEnabledToolKeyBackground.setGradientRadius(mToolbarKey.getLayoutParams().height / 2f); // nothing else has a usable height at this state mToolbarKey.setOnClickListener(this); mToolbarKey.setImageDrawable(Settings.getInstance().getCurrent().mIncognitoModeEnabled ? mIncognitoIcon : mToolbarArrowIcon); - mToolbarKey.setColorFilter(colors.getKeyText()); // maybe different color? + mToolbarKey.setColorFilter(colors.getKeyTextFilter()); // maybe different color? mToolbarKey.setBackground(new ShapeDrawable(new OvalShape())); // ShapeDrawable color is black, need src_atop filter mToolbarKey.getBackground().setColorFilter(colors.getDoubleAdjustedBackground(), PorterDuff.Mode.SRC_ATOP); mToolbarKey.getLayoutParams().height *= 0.82; // shrink the whole key a little (drawable not affected) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ColorUtil.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ColorUtil.kt index 02806672a..662cc1013 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ColorUtil.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ColorUtil.kt @@ -5,6 +5,8 @@ package org.dslul.openboard.inputmethod.latin.utils import android.graphics.Color import androidx.annotation.ColorInt import androidx.core.graphics.ColorUtils +import kotlin.math.max +import kotlin.math.min fun isBrightColor(@ColorInt color: Int) = if (android.R.color.transparent == color) true @@ -14,6 +16,13 @@ fun isDarkColor(@ColorInt color: Int) = if (android.R.color.transparent == color) true else getBrightnessSquared(color) < 50 * 50 +fun colorDistanceSquared(@ColorInt color1: Int, @ColorInt color2: Int): Int { + val diffR = Color.red(color1) - Color.red(color2) + val diffG = Color.green(color1) - Color.green(color2) + val diffB = Color.blue(color1) - Color.blue(color2) + return diffR * diffR + diffB * diffB + diffG * diffG +} + @ColorInt fun brightenOrDarken(@ColorInt color: Int, preferDarken: Boolean) = if (preferDarken) { diff --git a/app/src/main/res/animator/language_on_spacebar_fadeout.xml b/app/src/main/res/animator/language_on_spacebar_fadeout.xml index 8b7c8de98..e92c9f0f7 100644 --- a/app/src/main/res/animator/language_on_spacebar_fadeout.xml +++ b/app/src/main/res/animator/language_on_spacebar_fadeout.xml @@ -12,4 +12,4 @@ android:startOffset="1200" android:duration="200" android:valueFrom="255" - android:valueTo="@integer/config_language_on_spacebar_final_alpha" /> + android:valueTo="128" /> diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml index 6ecabab35..97082d3d1 100644 --- a/app/src/main/res/drawable/ic_delete.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -8,6 +8,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/layout/language_list_item.xml b/app/src/main/res/layout/language_list_item.xml index f7ebdb9d5..d51216682 100644 --- a/app/src/main/res/layout/language_list_item.xml +++ b/app/src/main/res/layout/language_list_item.xml @@ -3,6 +3,7 @@ SPDX-License-Identifier: GPL-3.0-only --> - - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a8e66ec07..47ff8988f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -49,7 +49,7 @@ #B337474F - #B337474F + #8037474F #37474F diff --git a/app/src/main/res/values/config-common.xml b/app/src/main/res/values/config-common.xml index 95e9359f4..a8bc47851 100644 --- a/app/src/main/res/values/config-common.xml +++ b/app/src/main/res/values/config-common.xml @@ -47,7 +47,6 @@ -1 8.0dp - 128 3dp 200 diff --git a/app/src/main/res/values/themes-common.xml b/app/src/main/res/values/themes-common.xml index 1f03e52ed..cd1f78d86 100644 --- a/app/src/main/res/values/themes-common.xml +++ b/app/src/main/res/values/themes-common.xml @@ -67,7 +67,6 @@ @layout/more_keys_keyboard @bool/config_show_more_keys_keyboard_at_touched_point @fraction/config_language_on_spacebar_text_ratio - @integer/config_language_on_spacebar_final_alpha @animator/language_on_spacebar_fadeout -1.0