diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt index db8610c76..b95994cc6 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/KeyboardParser.kt @@ -19,10 +19,12 @@ import helium314.keyboard.latin.utils.POPUP_KEYS_LAYOUT import helium314.keyboard.latin.utils.POPUP_KEYS_NUMBER import helium314.keyboard.latin.utils.ScriptUtils import helium314.keyboard.latin.utils.ScriptUtils.script +import helium314.keyboard.latin.utils.ToolbarKey import helium314.keyboard.latin.utils.removeFirst import helium314.keyboard.latin.utils.replaceFirst import helium314.keyboard.latin.utils.splitAt import helium314.keyboard.latin.utils.sumOf +import helium314.keyboard.latin.utils.toolbarKeyStrings /** * Abstract parser class that handles creation of keyboard from [KeyData] arranged in rows, @@ -199,7 +201,7 @@ class KeyboardParser(private val params: KeyboardParams, private val context: Co if (!Settings.getInstance().current.mHasCustomFunctionalLayout) { // remove keys that should only exist on specific layouts or depend on setting (emoji, numpad, language switch) if (!Settings.getInstance().current.mShowsEmojiKey || !params.mId.isAlphabetKeyboard) - functionalKeysBottom.removeFirst { it.label == KeyLabel.EMOJI } + functionalKeysBottom.removeFirst { it.label == toolbarKeyStrings[ToolbarKey.EMOJI] } if (!Settings.getInstance().current.isLanguageSwitchKeyEnabled || !params.mId.isAlphabetKeyboard) functionalKeysBottom.removeFirst { it.label == KeyLabel.LANGUAGE_SWITCH } if (params.mId.mElementId != KeyboardId.ELEMENT_SYMBOLS) diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt index 20f224c13..36c9229e5 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyCode.kt @@ -144,7 +144,7 @@ object KeyCode { fun Int.checkAndConvertCode(): Int = if (this > 0) this else when (this) { // working CURRENCY_SLOT_1, CURRENCY_SLOT_2, CURRENCY_SLOT_3, CURRENCY_SLOT_4, CURRENCY_SLOT_5, CURRENCY_SLOT_6, - VOICE_INPUT, LANGUAGE_SWITCH, SETTINGS, DELETE, ALPHA, SYMBOL, EMOJI, CLIPBOARD, + VOICE_INPUT, LANGUAGE_SWITCH, SETTINGS, DELETE, ALPHA, SYMBOL, EMOJI, CLIPBOARD, CLIPBOARD_CUT, UNDO, REDO, ARROW_DOWN, ARROW_UP, ARROW_RIGHT, ARROW_LEFT, CLIPBOARD_COPY, CLIPBOARD_SELECT_ALL, CLIPBOARD_SELECT_WORD, TOGGLE_INCOGNITO_MODE, TOGGLE_AUTOCORRECT, MOVE_START_OF_LINE, MOVE_END_OF_LINE, SHIFT, CAPS_LOCK, MULTIPLE_CODE_POINTS, UNSPECIFIED, CTRL, ALT, FN, CLIPBOARD_CLEAR_HISTORY, diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyLabel.kt b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyLabel.kt index 8e0905d4d..6d039aa46 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyLabel.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/keyboard_parser/floris/KeyLabel.kt @@ -1,10 +1,11 @@ package helium314.keyboard.keyboard.internal.keyboard_parser.floris import helium314.keyboard.keyboard.internal.KeyboardParams +import helium314.keyboard.latin.utils.ToolbarKey +import helium314.keyboard.latin.utils.toolbarKeyStrings /** labels for functional / special keys */ object KeyLabel { - const val EMOJI = "emoji" const val COM = "com" const val LANGUAGE_SWITCH = "language_switch" const val ACTION = "action" @@ -38,8 +39,8 @@ object KeyLabel { "view_numeric_advanced" -> NUMPAD "view_phone" -> ALPHA // phone keyboard is treated like alphabet, just with different layout "view_phone2" -> SYMBOL // phone symbols - "ime_ui_mode_media" -> EMOJI - "ime_ui_mode_clipboard" -> "clipboard" // todo: is this supported? when yes -> add to readme, and add a test + "ime_ui_mode_media" -> toolbarKeyStrings[ToolbarKey.EMOJI]!! + "ime_ui_mode_clipboard" -> toolbarKeyStrings[ToolbarKey.CLIPBOARD]!! "ime_ui_mode_text" -> ALPHA "currency_slot_1" -> CURRENCY "currency_slot_2" -> CURRENCY1 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 bf2827dff..d34d589d3 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 @@ -427,8 +427,8 @@ sealed interface KeyData : AbstractKeyData { // functional keys when (label) { // or use code? KeyLabel.SYMBOL_ALPHA, KeyLabel.SYMBOL, KeyLabel.ALPHA, KeyLabel.COMMA, KeyLabel.PERIOD, KeyLabel.DELETE, - KeyLabel.EMOJI, KeyLabel.COM, KeyLabel.LANGUAGE_SWITCH, KeyLabel.NUMPAD, KeyLabel.CTRL, KeyLabel.ALT, - KeyLabel.FN, KeyLabel.META -> return Key.BACKGROUND_TYPE_FUNCTIONAL + KeyLabel.COM, KeyLabel.LANGUAGE_SWITCH, KeyLabel.NUMPAD, KeyLabel.CTRL, KeyLabel.ALT, + KeyLabel.FN, KeyLabel.META, toolbarKeyStrings[ToolbarKey.EMOJI] -> return Key.BACKGROUND_TYPE_FUNCTIONAL KeyLabel.SPACE, KeyLabel.ZWNJ -> return Key.BACKGROUND_TYPE_SPACEBAR KeyLabel.ACTION -> return Key.BACKGROUND_TYPE_ACTION KeyLabel.SHIFT -> return getShiftBackground(params) @@ -465,7 +465,7 @@ sealed interface KeyData : AbstractKeyData { KeyLabel.ACTION -> "${getActionKeyLabel(params)}|${getActionKeyCode(params)}" KeyLabel.DELETE -> "!icon/delete_key|!code/key_delete" KeyLabel.SHIFT -> "${getShiftLabel(params)}|!code/key_shift" - KeyLabel.EMOJI -> "!icon/emoji_normal_key|!code/key_emoji" +// KeyLabel.EMOJI -> "!icon/emoji_normal_key|!code/key_emoji" // todo (later): label and popupKeys for .com should be in localeKeyTexts, handled similar to currency key KeyLabel.COM -> ".com" KeyLabel.LANGUAGE_SWITCH -> "!icon/language_switch_key|!code/key_language_switch" @@ -480,7 +480,7 @@ sealed interface KeyData : AbstractKeyData { KeyLabel.CTRL, KeyLabel.ALT, KeyLabel.FN, KeyLabel.META -> label.uppercase(Locale.US) KeyLabel.TAB -> "!icon/tab_key|" else -> { - if (label in toolbarKeyStrings) { + if (label in toolbarKeyStrings.values) { "!icon/$label|" } else label } @@ -498,7 +498,7 @@ sealed interface KeyData : AbstractKeyData { KeyLabel.META -> KeyCode.META KeyLabel.TAB -> KeyCode.TAB else -> { - if (label in toolbarKeyStrings) { + if (label in toolbarKeyStrings.values) { getCodeForToolbarKey(ToolbarKey.valueOf(label.uppercase(Locale.US))) } else code } @@ -519,7 +519,7 @@ sealed interface KeyData : AbstractKeyData { } KeyLabel.SPACE -> if (params.mId.isNumberLayout) Key.LABEL_FLAGS_ALIGN_ICON_TO_BOTTOM else 0 KeyLabel.SHIFT -> Key.LABEL_FLAGS_PRESERVE_CASE or if (!params.mId.isAlphabetKeyboard) Key.LABEL_FLAGS_FOLLOW_FUNCTIONAL_TEXT_COLOR else 0 - KeyLabel.EMOJI -> KeyboardTheme.getThemeActionAndEmojiKeyLabelFlags(params.mThemeId) + toolbarKeyStrings[ToolbarKey.EMOJI] -> KeyboardTheme.getThemeActionAndEmojiKeyLabelFlags(params.mThemeId) KeyLabel.COM -> Key.LABEL_FLAGS_AUTO_X_SCALE or Key.LABEL_FLAGS_FONT_NORMAL or Key.LABEL_FLAGS_HAS_POPUP_HINT or Key.LABEL_FLAGS_PRESERVE_CASE KeyLabel.ZWNJ -> Key.LABEL_FLAGS_HAS_POPUP_HINT KeyLabel.CURRENCY -> Key.LABEL_FLAGS_FOLLOW_KEY_LETTER_RATIO diff --git a/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt index a4019bc08..dcb09294d 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/ToolbarUtils.kt @@ -14,6 +14,7 @@ import helium314.keyboard.keyboard.internal.keyboard_parser.floris.KeyCode import helium314.keyboard.latin.R import helium314.keyboard.latin.settings.Settings import helium314.keyboard.latin.utils.ToolbarKey.* +import java.util.EnumMap import java.util.Locale fun createToolbarKey(context: Context, keyboardAttr: TypedArray, key: ToolbarKey): ImageButton { @@ -114,7 +115,7 @@ enum class ToolbarKey { FULL_LEFT, FULL_RIGHT, INCOGNITO, AUTOCORRECT, CLEAR_CLIPBOARD, CLOSE_HISTORY, EMOJI } -val toolbarKeyStrings: Set = entries.mapTo(HashSet()) { it.toString().lowercase(Locale.US) } +val toolbarKeyStrings = entries.associateWithTo(EnumMap(ToolbarKey::class.java)) { it.toString().lowercase(Locale.US) } val defaultToolbarPref = entries.filterNot { it == CLOSE_HISTORY }.joinToString(";") { when (it) {