From a297b6037c955506e364cdc5907da7dfaa6d4d28 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sat, 8 Jun 2024 11:31:40 +0200 Subject: [PATCH] fix missing preview popups for keys with icon and negative code --- .../main/java/helium314/keyboard/keyboard/Key.java | 11 ++++++++--- .../keyboard/keyboard/internal/KeySpecParser.java | 2 +- .../internal/keyboard_parser/floris/TextKeyData.kt | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/keyboard/Key.java b/app/src/main/java/helium314/keyboard/keyboard/Key.java index c288fefb9..3f8e2b8a1 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/Key.java +++ b/app/src/main/java/helium314/keyboard/keyboard/Key.java @@ -921,6 +921,8 @@ public class Key implements Comparable { public final boolean isAccentColored() { if (hasActionKeyBackground()) return true; final String iconName = getIconName(); + // todo: other way of identifying the color? + // if yes, NAME_CLIPBOARD_ACTION_KEY and NAME_CLIPBOARD_NORMAL_KEY could be merged return iconName.equals(KeyboardIconsSet.NAME_NEXT_KEY) || iconName.equals(KeyboardIconsSet.NAME_PREVIOUS_KEY) || iconName.equals(KeyboardIconsSet.NAME_CLIPBOARD_ACTION_KEY) @@ -1149,12 +1151,15 @@ public class Key implements Comparable { || (mCode == KeyCode.SYMBOL_ALPHA && !params.mId.isAlphabetKeyboard()) ) actionFlags |= ACTION_FLAGS_ENABLE_LONG_PRESS; - if (mCode <= Constants.CODE_SPACE && mCode != KeyCode.MULTIPLE_CODE_POINTS) + if (mCode <= Constants.CODE_SPACE && mCode != KeyCode.MULTIPLE_CODE_POINTS && mIconName.equals(KeyboardIconsSet.NAME_UNDEFINED)) actionFlags |= ACTION_FLAGS_NO_KEY_PREVIEW; + switch (mCode) { + case KeyCode.DELETE, KeyCode.SHIFT, Constants.CODE_ENTER, KeyCode.SHIFT_ENTER, KeyCode.ALPHA, Constants.CODE_SPACE, + KeyCode.SYMBOL, KeyCode.SYMBOL_ALPHA -> actionFlags |= ACTION_FLAGS_NO_KEY_PREVIEW; // no preview even if icon! + case KeyCode.SETTINGS, KeyCode.LANGUAGE_SWITCH -> actionFlags |= ACTION_FLAGS_ALT_CODE_WHILE_TYPING; + } if (mCode == KeyCode.DELETE) actionFlags |= ACTION_FLAGS_IS_REPEATABLE; - if (mCode == KeyCode.SETTINGS || mCode == KeyCode.LANGUAGE_SWITCH) - actionFlags |= ACTION_FLAGS_ALT_CODE_WHILE_TYPING; mActionFlags = actionFlags; final int altCodeInAttr; // settings and language switch keys have alt code space, all others nothing diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/KeySpecParser.java b/app/src/main/java/helium314/keyboard/keyboard/internal/KeySpecParser.java index 1c2ba1074..3463ed451 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/KeySpecParser.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/KeySpecParser.java @@ -221,7 +221,7 @@ public final class KeySpecParser { return defaultCode; } - @NonNull + @NonNull // todo: why not null instead of NAME_UNDEFINED? public static String getIconName(@Nullable final String keySpec) { if (keySpec == null) { // TODO: Throw {@link KeySpecParserError} once Key.keyLabel attribute becomes mandatory. diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt index 76b876ad1..bf2827dff 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/TextKeyData.kt @@ -113,6 +113,7 @@ sealed interface KeyData : AbstractKeyData { else "!icon/space_key_for_number_layout|!code/key_space" // todo: emoji and language switch popups should actually disappear depending on current layout (including functional keys) + // keys could be replaced with toolbar keys, but parsing needs to be adjusted (should happen anyway...) private fun getCommaPopupKeys(params: KeyboardParams): List { val keys = mutableListOf() if (!params.mId.mDeviceLocked)