From 1359386d7277a04fb7ebd567ea68ddc7dbedcd2d Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Sun, 20 Feb 2022 16:14:12 +0100 Subject: [PATCH 01/11] Implemented one-handed mode feature --- .../keyboard/KeyboardSwitcher.java | 35 +- .../keyboard/internal/KeyboardCodesSet.java | 10 +- .../keyboard/internal/KeyboardIconsSet.java | 6 + .../keyboard/internal/KeyboardState.java | 29 +- .../keyboard/internal/KeyboardTextsTable.java | 572 ++++++++---------- .../inputmethod/latin/KeyboardWrapperView.kt | 131 ++++ .../openboard/inputmethod/latin/LatinIME.java | 4 +- .../inputmethod/latin/common/Constants.java | 8 +- .../latin/inputlogic/InputLogic.java | 9 + .../inputmethod/latin/settings/Settings.java | 22 + .../latin/settings/SettingsValues.java | 4 + .../latin/utils/ResourceUtils.java | 9 + ...sym_keyboard_start_onehanded_holo_dark.png | Bin 0 -> 1092 bytes .../sym_keyboard_start_onehanded_lxx_dark.png | Bin 0 -> 808 bytes ...sym_keyboard_start_onehanded_lxx_light.png | Bin 0 -> 929 bytes .../sym_keyboard_stop_onehanded_holo_dark.png | Bin 0 -> 832 bytes .../sym_keyboard_stop_onehanded_lxx_dark.png | Bin 0 -> 648 bytes .../sym_keyboard_stop_onehanded_lxx_light.png | Bin 0 -> 765 bytes ...ym_keyboard_switch_onehanded_holo_dark.png | Bin 0 -> 374 bytes ...sym_keyboard_switch_onehanded_lxx_dark.png | Bin 0 -> 371 bytes ...ym_keyboard_switch_onehanded_lxx_light.png | Bin 0 -> 351 bytes ...sym_keyboard_start_onehanded_holo_dark.png | Bin 0 -> 730 bytes .../sym_keyboard_stop_onehanded_holo_dark.png | Bin 0 -> 491 bytes ...ym_keyboard_switch_onehanded_holo_dark.png | Bin 0 -> 247 bytes ...sym_keyboard_start_onehanded_holo_dark.png | Bin 0 -> 1304 bytes .../sym_keyboard_start_onehanded_lxx_dark.png | Bin 0 -> 1066 bytes ...sym_keyboard_start_onehanded_lxx_light.png | Bin 0 -> 1318 bytes .../sym_keyboard_stop_onehanded_holo_dark.png | Bin 0 -> 773 bytes .../sym_keyboard_stop_onehanded_lxx_dark.png | Bin 0 -> 878 bytes .../sym_keyboard_stop_onehanded_lxx_light.png | Bin 0 -> 951 bytes ...ym_keyboard_switch_onehanded_holo_dark.png | Bin 0 -> 314 bytes ...sym_keyboard_switch_onehanded_lxx_dark.png | Bin 0 -> 372 bytes ...ym_keyboard_switch_onehanded_lxx_light.png | Bin 0 -> 391 bytes ...sym_keyboard_start_onehanded_holo_dark.png | Bin 0 -> 2041 bytes .../sym_keyboard_start_onehanded_lxx_dark.png | Bin 0 -> 1508 bytes ...sym_keyboard_start_onehanded_lxx_light.png | Bin 0 -> 1716 bytes .../sym_keyboard_stop_onehanded_holo_dark.png | Bin 0 -> 1547 bytes .../sym_keyboard_stop_onehanded_lxx_dark.png | Bin 0 -> 1214 bytes .../sym_keyboard_stop_onehanded_lxx_light.png | Bin 0 -> 1322 bytes ...ym_keyboard_switch_onehanded_holo_dark.png | Bin 0 -> 527 bytes ...sym_keyboard_switch_onehanded_lxx_dark.png | Bin 0 -> 560 bytes ...ym_keyboard_switch_onehanded_lxx_light.png | Bin 0 -> 617 bytes ...sym_keyboard_start_onehanded_holo_dark.png | Bin 0 -> 2323 bytes .../sym_keyboard_start_onehanded_lxx_dark.png | Bin 0 -> 2123 bytes ...sym_keyboard_start_onehanded_lxx_light.png | Bin 0 -> 2404 bytes .../sym_keyboard_stop_onehanded_holo_dark.png | Bin 0 -> 1409 bytes .../sym_keyboard_stop_onehanded_lxx_dark.png | Bin 0 -> 1581 bytes .../sym_keyboard_stop_onehanded_lxx_light.png | Bin 0 -> 1782 bytes ...ym_keyboard_switch_onehanded_holo_dark.png | Bin 0 -> 468 bytes ...sym_keyboard_switch_onehanded_lxx_dark.png | Bin 0 -> 539 bytes ...ym_keyboard_switch_onehanded_lxx_light.png | Bin 0 -> 641 bytes .../main/res/layout/main_keyboard_frame.xml | 29 +- app/src/main/res/values/attrs.xml | 3 + app/src/main/res/values/config.xml | 3 + .../main/res/values/keyboard-icons-holo.xml | 3 + .../values/keyboard-icons-lxx-dark-parent.xml | 3 + .../keyboard-icons-lxx-light-parent.xml | 3 + app/src/main/res/xml/key_styles_settings.xml | 26 +- .../values/donottranslate-more-keys.xml | 1 + 59 files changed, 577 insertions(+), 333 deletions(-) create mode 100644 app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-mdpi/sym_keyboard_start_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-mdpi/sym_keyboard_stop_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-mdpi/sym_keyboard_switch_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_light.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_holo_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png create mode 100644 app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_light.png diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java index ba365d20f..aa15605f6 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java @@ -32,6 +32,7 @@ import org.dslul.openboard.inputmethod.keyboard.emoji.EmojiPalettesView; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardState; import org.dslul.openboard.inputmethod.keyboard.internal.KeyboardTextsSet; import org.dslul.openboard.inputmethod.latin.InputView; +import org.dslul.openboard.inputmethod.latin.KeyboardWrapperView; import org.dslul.openboard.inputmethod.latin.LatinIME; import org.dslul.openboard.inputmethod.latin.R; import org.dslul.openboard.inputmethod.latin.RichInputMethodManager; @@ -51,6 +52,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private static final String TAG = KeyboardSwitcher.class.getSimpleName(); private InputView mCurrentInputView; + private KeyboardWrapperView mKeyboardViewWrapper; private View mMainKeyboardFrame; private MainKeyboardView mKeyboardView; private EmojiPalettesView mEmojiPalettesView; @@ -117,7 +119,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder( mThemeContext, editorInfo); final Resources res = mThemeContext.getResources(); - final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res); + final int keyboardWidth = ResourceUtils.getKeyboardWidth(res, settingsValues); final int keyboardHeight = ResourceUtils.getKeyboardHeight(res, settingsValues); builder.setKeyboardGeometry(keyboardWidth, keyboardHeight); builder.setSubtype(mRichImm.getCurrentSubtype()); @@ -129,7 +131,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { && settingsValues.mIsSplitKeyboardEnabled); mKeyboardLayoutSet = builder.build(); try { - mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState); + mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState, + settingsValues.mOneHandedModeEnabled); mKeyboardTextsSet.setLocale(mRichImm.getCurrentSubtypeLocale(), mThemeContext); } catch (KeyboardLayoutSetException e) { Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause()); @@ -424,6 +427,30 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { } } + // Implements {@link KeyboardState.SwitchActions}. + @Override + public void setOneHandedModeEnabled(boolean enabled) { + if (mKeyboardViewWrapper.getOneHandedModeEnabled() == enabled) { + return; + } + final Settings settings = Settings.getInstance(); + mKeyboardViewWrapper.setOneHandedModeEnabled(enabled); + mKeyboardViewWrapper.setOneHandedGravity(settings.getCurrent().mOneHandedModeGravity); + + settings.writeOneHandedModeEnabled(enabled); + + // Reload the entire keyboard set with the same parameters + loadKeyboard(mLatinIME.getCurrentInputEditorInfo(), settings.getCurrent(), + mLatinIME.getCurrentAutoCapsState(), mLatinIME.getCurrentRecapitalizeState()); + } + + // Implements {@link KeyboardState.SwitchActions}. + @Override + public void switchOneHandedMode() { + mKeyboardViewWrapper.switchOneHandedModeSide(); + Settings.getInstance().writeOneHandedModeGravity(mKeyboardViewWrapper.getOneHandedGravity()); + } + // Implements {@link KeyboardState.SwitchActions}. @Override public boolean isInDoubleTapShiftKeyTimeout() { @@ -476,7 +503,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { } else if (isShowingClipboardHistory()) { return mClipboardHistoryView; } - return mKeyboardView; + return mKeyboardViewWrapper; } public MainKeyboardView getMainKeyboardView() { @@ -509,6 +536,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { mEmojiPalettesView = mCurrentInputView.findViewById(R.id.emoji_palettes_view); mClipboardHistoryView = mCurrentInputView.findViewById(R.id.clipboard_history_view); + mKeyboardViewWrapper = mCurrentInputView.findViewById(R.id.keyboard_view_wrapper); + mKeyboardViewWrapper.setKeyboardActionListener(mLatinIME); mKeyboardView = mCurrentInputView.findViewById(R.id.keyboard_view); mKeyboardView.setHardwareAcceleratedDrawingEnabled(isHardwareAcceleratedDrawingEnabled); mKeyboardView.setKeyboardActionListener(mLatinIME); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardCodesSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardCodesSet.java index 9218b2e05..3cda8b46b 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardCodesSet.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardCodesSet.java @@ -54,7 +54,10 @@ public final class KeyboardCodesSet { "key_alpha_from_emoji", "key_unspecified", "key_clipboard", - "key_alpha_from_clipboard" + "key_alpha_from_clipboard", + "key_start_onehanded", + "key_stop_onehanded", + "key_switch_onehanded" }; private static final int[] DEFAULT = { @@ -76,7 +79,10 @@ public final class KeyboardCodesSet { Constants.CODE_ALPHA_FROM_EMOJI, Constants.CODE_UNSPECIFIED, Constants.CODE_CLIPBOARD, - Constants.CODE_ALPHA_FROM_CLIPBOARD + Constants.CODE_ALPHA_FROM_CLIPBOARD, + Constants.CODE_START_ONE_HANDED_MODE, + Constants.CODE_STOP_ONE_HANDED_MODE, + Constants.CODE_SWITCH_ONE_HANDED_MODE }; static { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java index d97223b3d..44f1cf358 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardIconsSet.java @@ -62,6 +62,9 @@ public final class KeyboardIconsSet { public static final String NAME_CLIPBOARD_ACTION_KEY = "clipboard_action_key"; public static final String NAME_CLIPBOARD_NORMAL_KEY = "clipboard_normal_key"; public static final String NAME_CLEAR_CLIPBOARD_KEY = "clear_clipboard_key"; + public static final String NAME_START_ONEHANDED_KEY = "start_onehanded_mode_key"; + public static final String NAME_STOP_ONEHANDED_KEY = "stop_onehanded_mode_key"; + public static final String NAME_SWITCH_ONEHANDED_KEY = "switch_onehanded_key"; private static final SparseIntArray ATTR_ID_TO_ICON_ID = new SparseIntArray(); @@ -95,6 +98,9 @@ public final class KeyboardIconsSet { NAME_CLIPBOARD_ACTION_KEY, R.styleable.Keyboard_iconClipboardActionKey, NAME_CLIPBOARD_NORMAL_KEY, R.styleable.Keyboard_iconClipboardNormalKey, NAME_CLEAR_CLIPBOARD_KEY, R.styleable.Keyboard_iconClearClipboardKey, + NAME_START_ONEHANDED_KEY, R.styleable.Keyboard_iconStartOneHandedMode, + NAME_STOP_ONEHANDED_KEY, R.styleable.Keyboard_iconStopOneHandedMode, + NAME_SWITCH_ONEHANDED_KEY, R.styleable.Keyboard_iconSwitchOneHandedMode, }; private static int NUM_ICONS = NAMES_AND_ATTR_IDS.length / 2; diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java index 098de98f8..fa80f445f 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardState.java @@ -30,7 +30,7 @@ import org.dslul.openboard.inputmethod.latin.utils.RecapitalizeStatus; * * This class contains all keyboard state transition logic. * - * The input events are {@link #onLoadKeyboard(int, int)}, {@link #onSaveKeyboardState()}, + * The input events are {@link #onLoadKeyboard(int, int, boolean)}, {@link #onSaveKeyboardState()}, * {@link #onPressKey(int,boolean,int,int)}, {@link #onReleaseKey(int,boolean,int,int)}, * {@link #onEvent(Event,int,int)}, {@link #onFinishSlidingInput(int,int)}, * {@link #onUpdateShiftState(int,int)}, {@link #onResetKeyboardStateToAlphabet(int,int)}. @@ -65,6 +65,9 @@ public final class KeyboardState { void startDoubleTapShiftKeyTimer(); boolean isInDoubleTapShiftKeyTimeout(); void cancelDoubleTapShiftKeyTimer(); + + void setOneHandedModeEnabled(boolean enabled); + void switchOneHandedMode(); } private final SwitchActions mSwitchActions; @@ -130,7 +133,8 @@ public final class KeyboardState { mRecapitalizeMode = RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE; } - public void onLoadKeyboard(final int autoCapsFlags, final int recapitalizeMode) { + public void onLoadKeyboard(final int autoCapsFlags, final int recapitalizeMode, + final boolean onHandedModeEnabled) { if (DEBUG_EVENT) { Log.d(TAG, "onLoadKeyboard: " + stateToString(autoCapsFlags, recapitalizeMode)); } @@ -147,6 +151,7 @@ public final class KeyboardState { // Reset keyboard to alphabet mode. setAlphabetKeyboard(autoCapsFlags, recapitalizeMode); } + mSwitchActions.setOneHandedModeEnabled(onHandedModeEnabled); } // Constants for {@link SavedKeyboardState#mShiftMode} and {@link #setShifted(int)}. @@ -368,6 +373,20 @@ public final class KeyboardState { mSwitchActions.setClipboardKeyboard(); } + private void setOneHandedModeEnabled(boolean enabled) { + if (DEBUG_INTERNAL_ACTION) { + Log.d(TAG, "setOneHandedModeEnabled"); + } + mSwitchActions.setOneHandedModeEnabled(enabled); + } + + private void switchOneHandedMode() { + if (DEBUG_INTERNAL_ACTION) { + Log.d(TAG, "switchOneHandedMode"); + } + mSwitchActions.switchOneHandedMode(); + } + public void onPressKey(final int code, final boolean isSinglePointer, final int autoCapsFlags, final int recapitalizeMode) { if (DEBUG_EVENT) { @@ -697,6 +716,12 @@ public final class KeyboardState { } } else if (code == Constants.CODE_ALPHA_FROM_CLIPBOARD) { setAlphabetKeyboard(autoCapsFlags, recapitalizeMode); + } else if (code == Constants.CODE_START_ONE_HANDED_MODE) { + setOneHandedModeEnabled(true); + } else if (code == Constants.CODE_STOP_ONE_HANDED_MODE) { + setOneHandedModeEnabled(false); + } else if (code == Constants.CODE_SWITCH_ONE_HANDED_MODE) { + switchOneHandedMode(); } } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java index 5336cbaaf..a3ce4246a 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -81,26 +81,26 @@ public final class KeyboardTextsTable { private static final String[] NAMES = { // /* index:histogram */ "name", - /* 0:35 */ "morekeys_a", - /* 1:35 */ "morekeys_o", - /* 2:34 */ "morekeys_e", - /* 3:33 */ "morekeys_u", - /* 4:31 */ "morekeys_i", - /* 5:31 */ "keylabel_to_alpha", - /* 6:27 */ "morekeys_n", + /* 0:34 */ "morekeys_a", + /* 1:34 */ "morekeys_o", + /* 2:33 */ "morekeys_e", + /* 3:32 */ "morekeys_u", + /* 4:31 */ "keylabel_to_alpha", + /* 5:30 */ "morekeys_i", + /* 6:26 */ "morekeys_n", /* 7:25 */ "morekeys_c", - /* 8:25 */ "double_quotes", - /* 9:24 */ "morekeys_s", - /* 10:24 */ "single_quotes", + /* 8:24 */ "double_quotes", + /* 9:23 */ "morekeys_s", + /* 10:23 */ "single_quotes", /* 11:19 */ "keyspec_currency", /* 12:17 */ "morekeys_y", /* 13:16 */ "morekeys_z", /* 14:14 */ "morekeys_d", - /* 15:11 */ "single_angle_quotes", - /* 16:11 */ "double_angle_quotes", - /* 17:10 */ "morekeys_t", - /* 18:10 */ "morekeys_l", - /* 19:10 */ "morekeys_g", + /* 15:10 */ "morekeys_t", + /* 16:10 */ "morekeys_l", + /* 17:10 */ "morekeys_g", + /* 18:10 */ "single_angle_quotes", + /* 19:10 */ "double_angle_quotes", /* 20: 8 */ "morekeys_r", /* 21: 6 */ "morekeys_k", /* 22: 6 */ "morekeys_cyrillic_ie", @@ -260,6 +260,7 @@ public final class KeyboardTextsTable { /* 176: 0 */ "keyspec_emoji_normal_key", /* 177: 0 */ "keyspec_clipboard_action_key", /* 178: 0 */ "keyspec_clipboard_normal_key", + /* 179: 0 */ "keyspec_start_onehanded_mode", }; private static final String EMPTY = ""; @@ -267,23 +268,24 @@ public final class KeyboardTextsTable { /* Default texts */ private static final String[] TEXTS_DEFAULT = { /* morekeys_a ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, - /* ~ morekeys_i */ + EMPTY, EMPTY, EMPTY, EMPTY, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. /* keylabel_to_alpha */ "ABC", - /* morekeys_n */ EMPTY, - /* morekeys_c */ EMPTY, + /* morekeys_i ~ */ + EMPTY, EMPTY, EMPTY, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_lqm_rqm", /* morekeys_s */ EMPTY, /* single_quotes */ "!text/single_lqm_rqm", /* keyspec_currency */ "$", /* morekeys_y ~ */ - EMPTY, EMPTY, EMPTY, - /* ~ morekeys_d */ + EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + /* ~ morekeys_g */ /* single_angle_quotes */ "!text/single_laqm_raqm", /* double_angle_quotes */ "!text/double_laqm_raqm", - /* morekeys_t ~ */ - EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, + /* morekeys_r ~ */ + EMPTY, EMPTY, EMPTY, /* ~ morekeys_cyrillic_ie */ /* keyspec_symbols_1 */ "1", /* keyspec_symbols_2 */ "2", @@ -486,6 +488,7 @@ public final class KeyboardTextsTable { /* keyspec_emoji_normal_key */ "!icon/emoji_normal_key|!code/key_emoji", /* keyspec_clipboard_action_key */ "!icon/clipboard_action_key|!code/key_clipboard", /* keyspec_clipboard_normal_key */ "!icon/clipboard_normal_key|!code/key_clipboard", + /* keyspec_start_onehanded_mode */ "!icon/start_onehanded_mode_key|!code/key_start_onehanded", }; /* Locale af: Afrikaans */ @@ -523,6 +526,7 @@ public final class KeyboardTextsTable { // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS @@ -531,7 +535,6 @@ public final class KeyboardTextsTable { // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+0133: "ij" LATIN SMALL LIGATURE IJ /* morekeys_i */ "\u00ED,\u00EC,\u00EF,\u00EE,\u012F,\u012B,\u0133", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -546,17 +549,17 @@ public final class KeyboardTextsTable { /* Locale ar: Arabic */ private static final String[] TEXTS_ar = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0623: "أ" ARABIC LETTER ALEF WITH HAMZA ABOVE // U+200C: ZERO WIDTH NON-JOINER // U+0628: "ب" ARABIC LETTER BEH // U+062C: "ج" ARABIC LETTER JEEM /* keylabel_to_alpha */ "\u0623\u200C\u0628\u200C\u062C", - /* morekeys_n ~ */ + /* morekeys_i ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, + null, null, null, /* ~ morekeys_cyrillic_ie */ // U+0661: "١" ARABIC-INDIC DIGIT ONE /* keyspec_symbols_1 */ "\u0661", @@ -699,6 +702,7 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", + /* keylabel_to_alpha */ null, // U+0131: "ı" LATIN SMALL LETTER DOTLESS I // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS @@ -707,7 +711,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+0148: "ň" LATIN SMALL LETTER N WITH CARON // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE /* morekeys_n */ "\u0148,\u00F1", @@ -728,7 +731,7 @@ public final class KeyboardTextsTable { // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON /* morekeys_z */ "\u017E", /* morekeys_d ~ */ - null, null, null, null, null, + null, null, null, /* ~ morekeys_l */ // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE /* morekeys_g */ "\u011F", @@ -737,15 +740,16 @@ public final class KeyboardTextsTable { /* Locale be: Belarusian */ private static final String[] TEXTS_be = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_9qm_lqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_lqm", @@ -773,15 +777,16 @@ public final class KeyboardTextsTable { /* Locale bg: Bulgarian */ private static final String[] TEXTS_bg = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ // single_quotes of Bulgarian is default single_quotes_right_left. /* double_quotes */ "!text/double_9qm_lqm", }; @@ -789,15 +794,15 @@ public final class KeyboardTextsTable { /* Locale bn_BD: Bangla (Bangladesh) */ private static final String[] TEXTS_bn_BD = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0995: "क" BENGALI LETTER KA // U+0996: "ख" BENGALI LETTER KHA // U+0997: "ग" BENGALI LETTER GA /* keylabel_to_alpha */ "\u0995\u0996\u0997", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+09F3: "৳" BENGALI RUPEE SIGN /* keyspec_currency */ "\u09F3", @@ -849,15 +854,15 @@ public final class KeyboardTextsTable { /* Locale bn_IN: Bangla (India) */ private static final String[] TEXTS_bn_IN = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0995: "क" BENGALI LETTER KA // U+0996: "ख" BENGALI LETTER KHA // U+0997: "ग" BENGALI LETTER GA /* keylabel_to_alpha */ "\u0995\u0996\u0997", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20B9: "₹" INDIAN RUPEE SIGN /* keyspec_currency */ "\u20B9", @@ -900,6 +905,7 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -907,7 +913,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -916,7 +921,7 @@ public final class KeyboardTextsTable { // U+010D: "č" LATIN SMALL LETTER C WITH CARON /* morekeys_c */ "\u00E7,\u0107,\u010D", /* double_quotes ~ */ - null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, /* ~ morekeys_t */ // U+00B7: "·" MIDDLE DOT // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE @@ -925,6 +930,7 @@ public final class KeyboardTextsTable { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, + null, null, /* ~ morekeys_swiss_row2_11 */ // U+00B7: "·" MIDDLE DOT /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&", @@ -974,6 +980,7 @@ public final class KeyboardTextsTable { // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS @@ -981,7 +988,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+0148: "ň" LATIN SMALL LETTER N WITH CARON // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE @@ -1006,12 +1012,12 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E,\u017A,\u017C", // U+010F: "ď" LATIN SMALL LETTER D WITH CARON /* morekeys_d */ "\u010F", - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", // U+0165: "ť" LATIN SMALL LETTER T WITH CARON /* morekeys_t */ "\u0165", /* morekeys_l */ null, /* morekeys_g */ null, + /* single_angle_quotes */ "!text/single_raqm_laqm", + /* double_angle_quotes */ "!text/double_raqm_laqm", // U+0159: "ř" LATIN SMALL LETTER R WITH CARON /* morekeys_r */ "\u0159", }; @@ -1045,10 +1051,10 @@ public final class KeyboardTextsTable { // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS /* morekeys_i */ "\u00ED,\u00EF", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -1066,14 +1072,15 @@ public final class KeyboardTextsTable { /* morekeys_z */ null, // U+00F0: "ð" LATIN SMALL LETTER ETH /* morekeys_d */ "\u00F0", - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", /* morekeys_t */ null, // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE /* morekeys_l */ "\u0142", - /* morekeys_g ~ */ + /* morekeys_g */ null, + /* single_angle_quotes */ "!text/single_raqm_laqm", + /* double_angle_quotes */ "!text/double_raqm_laqm", + /* morekeys_r ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, null, /* ~ morekeys_tablet_period */ // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE /* keyspec_nordic_row1_11 */ "\u00E5", @@ -1122,8 +1129,8 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FC,%,\u00FB,\u00F9,\u00FA,\u016B", - /* morekeys_i */ null, /* keylabel_to_alpha */ null, + /* morekeys_i */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -1135,14 +1142,14 @@ public final class KeyboardTextsTable { /* morekeys_s */ "\u00DF,\u015B,\u0161", /* single_quotes */ "!text/single_9qm_lqm", /* keyspec_currency ~ */ - null, null, null, null, - /* ~ morekeys_d */ + null, null, null, null, null, null, null, + /* ~ morekeys_g */ /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", - /* morekeys_t ~ */ + /* morekeys_r ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, /* ~ morekeys_nordic_row2_11 */ // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS /* keyspec_swiss_row1_11 */ "\u00FC", @@ -1190,8 +1197,8 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - /* morekeys_i */ null, /* keylabel_to_alpha */ null, + /* morekeys_i */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -1203,14 +1210,14 @@ public final class KeyboardTextsTable { /* morekeys_s */ "\u00DF,%,\u015B,\u0161", /* single_quotes */ "!text/single_9qm_lqm", /* keyspec_currency ~ */ - null, null, null, null, - /* ~ morekeys_d */ + null, null, null, null, null, null, null, + /* ~ morekeys_g */ /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", - /* morekeys_t ~ */ + /* morekeys_r ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, /* ~ morekeys_nordic_row2_11 */ // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS /* keyspec_swiss_row1_11 */ "\u00FC", @@ -1229,8 +1236,8 @@ public final class KeyboardTextsTable { /* Locale el: Greek */ private static final String[] TEXTS_el = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0391: "Α" GREEK CAPITAL LETTER ALPHA // U+0392: "Β" GREEK CAPITAL LETTER BETA @@ -1270,13 +1277,13 @@ public final class KeyboardTextsTable { // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE /* morekeys_n */ "\u00F1", // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA @@ -1331,6 +1338,7 @@ public final class KeyboardTextsTable { // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK // U+00B5: "µ" MICRO SIGN /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B,\u0169,\u0171,\u0173,\u00B5", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS @@ -1341,7 +1349,6 @@ public final class KeyboardTextsTable { // U+0131: "ı" LATIN SMALL LETTER DOTLESS I // U+0133: "ij" LATIN SMALL LIGATURE IJ /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u0129,\u00EC,\u012F,\u012B,\u0131,\u0133", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA @@ -1376,8 +1383,6 @@ public final class KeyboardTextsTable { // U+010F: "ď" LATIN SMALL LETTER D WITH CARON // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE /* morekeys_d */ "\u00F0,\u010F,\u0111", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, // U+0165: "ť" LATIN SMALL LETTER T WITH CARON // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA @@ -1393,6 +1398,8 @@ public final class KeyboardTextsTable { // U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA /* morekeys_g */ "\u011F,\u0121,\u0123", + /* single_angle_quotes */ null, + /* double_angle_quotes */ null, // U+0159: "ř" LATIN SMALL LETTER R WITH CARON // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA @@ -1473,6 +1480,7 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -1480,7 +1488,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -1538,6 +1545,7 @@ public final class KeyboardTextsTable { // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE /* morekeys_u */ "\u00FC,\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u016F,\u0171", + /* keylabel_to_alpha */ null, // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK @@ -1546,7 +1554,6 @@ public final class KeyboardTextsTable { // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+0131: "ı" LATIN SMALL LETTER DOTLESS I /* morekeys_i */ "\u012B,\u00EC,\u012F,\u00ED,\u00EE,\u00EF,\u0131", - /* keylabel_to_alpha */ null, // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE @@ -1572,8 +1579,6 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E,\u017C,\u017A", // U+010F: "ď" LATIN SMALL LETTER D WITH CARON /* morekeys_d */ "\u010F", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA // U+0165: "ť" LATIN SMALL LETTER T WITH CARON /* morekeys_t */ "\u0163,\u0165", @@ -1585,6 +1590,8 @@ public final class KeyboardTextsTable { // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE /* morekeys_g */ "\u0123,\u011F", + /* single_angle_quotes */ null, + /* double_angle_quotes */ null, // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA // U+0159: "ř" LATIN SMALL LETTER R WITH CARON // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE @@ -1642,6 +1649,7 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -1649,7 +1657,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -1662,16 +1669,16 @@ public final class KeyboardTextsTable { /* Locale fa: Persian */ private static final String[] TEXTS_fa = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0627: "ا" ARABIC LETTER ALEF // U+200C: ZERO WIDTH NON-JOINER // U+0628: "ب" ARABIC LETTER BEH // U+067E: "پ" ARABIC LETTER PEH /* keylabel_to_alpha */ "\u0627\u200C\u0628\u200C\u067E", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+FDFC: "﷼" RIAL SIGN /* keyspec_currency */ "\uFDFC", @@ -1825,7 +1832,7 @@ public final class KeyboardTextsTable { /* morekeys_e */ null, // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS /* morekeys_u */ "\u00FC", - /* morekeys_i ~ */ + /* keylabel_to_alpha ~ */ null, null, null, null, null, /* ~ double_quotes */ // U+0161: "š" LATIN SMALL LETTER S WITH CARON @@ -1895,6 +1902,7 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00F9,\u00FB,%,\u00FC,\u00FA,\u016B", + /* keylabel_to_alpha */ null, // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -1902,7 +1910,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00EE,%,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - /* keylabel_to_alpha */ null, /* morekeys_n */ null, // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE @@ -1969,6 +1976,7 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -1976,7 +1984,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -1989,15 +1996,15 @@ public final class KeyboardTextsTable { /* Locale hi: Hindi */ private static final String[] TEXTS_hi = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0915: "क" DEVANAGARI LETTER KA // U+0916: "ख" DEVANAGARI LETTER KHA // U+0917: "ग" DEVANAGARI LETTER GA /* keylabel_to_alpha */ "\u0915\u0916\u0917", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20B9: "₹" INDIAN RUPEE SIGN /* keyspec_currency */ "\u20B9", @@ -2076,7 +2083,7 @@ public final class KeyboardTextsTable { private static final String[] TEXTS_hr = { /* morekeys_a ~ */ null, null, null, null, null, null, - /* ~ keylabel_to_alpha */ + /* ~ morekeys_i */ // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -2098,6 +2105,9 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E,\u017A,\u017C", // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE /* morekeys_d */ "\u0111", + /* morekeys_t ~ */ + null, null, null, + /* ~ morekeys_g */ /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", }; @@ -2116,17 +2126,17 @@ public final class KeyboardTextsTable { // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE /* morekeys_u */ "\u00FA,\u00FC,\u0171", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE /* morekeys_i */ "\u00ED", - /* keylabel_to_alpha ~ */ - null, null, null, - /* ~ morekeys_c */ + /* morekeys_n */ null, + /* morekeys_c */ null, /* double_quotes */ "!text/double_9qm_rqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_rqm", /* keyspec_currency ~ */ - null, null, null, null, - /* ~ morekeys_d */ + null, null, null, null, null, null, null, + /* ~ morekeys_g */ /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", }; @@ -2134,17 +2144,17 @@ public final class KeyboardTextsTable { /* Locale hy: Armenian */ private static final String[] TEXTS_hy = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0531: "Ա" ARMENIAN CAPITAL LETTER AYB // U+0532: "Բ" ARMENIAN CAPITAL LETTER BEN // U+0533: "Գ" ARMENIAN CAPITAL LETTER GIM /* keylabel_to_alpha */ "\u0531\u0532\u0533", - /* morekeys_n ~ */ + /* morekeys_i ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, null, /* ~ additional_morekeys_symbols_0 */ /* morekeys_tablet_period */ "!text/morekeys_punctuation", /* keyspec_nordic_row1_11 ~ */ @@ -2228,6 +2238,7 @@ public final class KeyboardTextsTable { // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX @@ -2235,9 +2246,8 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EF,\u00EE,\u00EC,\u012F,\u012B", - /* keylabel_to_alpha ~ */ - null, null, null, - /* ~ morekeys_c */ + /* morekeys_n */ null, + /* morekeys_c */ null, /* double_quotes */ "!text/double_9qm_lqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_lqm", @@ -2248,8 +2258,6 @@ public final class KeyboardTextsTable { /* morekeys_z */ null, // U+00F0: "ð" LATIN SMALL LETTER ETH /* morekeys_d */ "\u00F0", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, // U+00FE: "þ" LATIN SMALL LETTER THORN /* morekeys_t */ "\u00FE", }; @@ -2291,6 +2299,7 @@ public final class KeyboardTextsTable { // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u016B", + /* keylabel_to_alpha */ null, // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX @@ -2298,11 +2307,11 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B", - /* keylabel_to_alpha ~ */ + /* morekeys_n ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, /* ~ morekeys_nordic_row2_11 */ // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS /* keyspec_swiss_row1_11 */ "\u00FC", @@ -2321,15 +2330,16 @@ public final class KeyboardTextsTable { /* Locale iw: Hebrew */ private static final String[] TEXTS_iw = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+05D0: "א" HEBREW LETTER ALEF // U+05D1: "ב" HEBREW LETTER BET // U+05D2: "ג" HEBREW LETTER GIMEL /* keylabel_to_alpha */ "\u05D0\u05D1\u05D2", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_rqm_9qm", /* morekeys_s */ null, /* single_quotes */ "!text/single_rqm_9qm", @@ -2379,15 +2389,16 @@ public final class KeyboardTextsTable { /* Locale ka: Georgian */ private static final String[] TEXTS_ka = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+10D0: "ა" GEORGIAN LETTER AN // U+10D1: "ბ" GEORGIAN LETTER BAN // U+10D2: "გ" GEORGIAN LETTER GAN /* keylabel_to_alpha */ "\u10D0\u10D1\u10D2", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_9qm_lqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_lqm", @@ -2396,16 +2407,16 @@ public final class KeyboardTextsTable { /* Locale kk: Kazakh */ private static final String[] TEXTS_kk = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n ~ */ + /* morekeys_i ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, + null, null, /* ~ morekeys_k */ // U+0451: "ё" CYRILLIC SMALL LETTER IO /* morekeys_cyrillic_ie */ "\u0451", @@ -2455,14 +2466,14 @@ public final class KeyboardTextsTable { /* Locale km: Khmer */ private static final String[] TEXTS_km = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+1780: "ក" KHMER LETTER KA // U+1781: "ខ" KHMER LETTER KHA // U+1782: "គ" KHMER LETTER KO /* keylabel_to_alpha */ "\u1780\u1781\u1782", - /* morekeys_n ~ */ + /* morekeys_i ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, @@ -2471,7 +2482,7 @@ public final class KeyboardTextsTable { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, + null, null, null, null, /* ~ morekeys_cyrillic_a */ // U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL /* morekeys_currency_dollar */ "\u17DB,\u00A2,\u00A3,\u20AC,\u00A5,\u20B1", @@ -2480,15 +2491,15 @@ public final class KeyboardTextsTable { /* Locale kn: Kannada */ private static final String[] TEXTS_kn = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0C85: "ಅ" KANNADA LETTER A // U+0C86: "ಆ" KANNADA LETTER AA // U+0C87: "ಇ" KANNADA LETTER I /* keylabel_to_alpha */ "\u0C85\u0C86\u0C87", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20B9: "₹" INDIAN RUPEE SIGN /* keyspec_currency */ "\u20B9", @@ -2497,16 +2508,16 @@ public final class KeyboardTextsTable { /* Locale ky: Kyrgyz */ private static final String[] TEXTS_ky = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n ~ */ + /* morekeys_i ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, + null, null, /* ~ morekeys_k */ // U+0451: "ё" CYRILLIC SMALL LETTER IO /* morekeys_cyrillic_ie */ "\u0451", @@ -2538,73 +2549,18 @@ public final class KeyboardTextsTable { /* morekeys_cyrillic_o */ "\u04E9", }; - /* Locale lb: Luxembourgish */ - private static final String[] TEXTS_lb = { - // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS - // U+0040: "@" COMMERCIAL AT - // U+00E2: "â" LATIN SMALL LETTER A WITH CIRCUMFLEX - // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE - // U+00E1: "á" LATIN SMALL LETTER A WITH ACUTE - // U+00E6: "æ" LATIN SMALL LETTER AE - // U+00E3: "ã" LATIN SMALL LETTER A WITH TILDE - // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE - // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON - /* morekeys_a */ "\u00E4,@,\u00E2,\u00E0,\u00E1,\u00E6,\u00E3,\u00E5,\u0101", - // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS - // U+00F4: "ô" LATIN SMALL LETTER O WITH CIRCUMFLEX - // U+00F2: "ò" LATIN SMALL LETTER O WITH GRAVE - // U+00F3: "ó" LATIN SMALL LETTER O WITH ACUTE - // U+00F5: "õ" LATIN SMALL LETTER O WITH TILDE - // U+0153: "œ" LATIN SMALL LIGATURE OE - // U+00F8: "ø" LATIN SMALL LETTER O WITH STROKE - // U+014D: "ō" LATIN SMALL LETTER O WITH MACRON - /* morekeys_o */ "\u00F6,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u00F8,\u014D", - // U+00E9: "é" LATIN SMALL LETTER E WITH ACUTE - // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE - // U+00EA: "ê" LATIN SMALL LETTER E WITH CIRCUMFLEX - // U+00EB: "ë" LATIN SMALL LETTER E WITH DIAERESIS - /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB", - // U+00FC: "ü" LATIN SMALL LETTER U WITH DIAERESIS - // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX - // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE - // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE - // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON - /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE - // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE - // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX - // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS - /* morekeys_i */ "\u00ED,\u00EC,\u00EE,\u00EF", - /* keylabel_to_alpha */ null, - // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE - // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE - /* morekeys_n */ "\u00F1,\u0144", - /* morekeys_c */ null, - /* double_quotes */ "!text/double_9qm_lqm", - // U+00DF: "ß" LATIN SMALL LETTER SHARP S - // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE - // U+0161: "š" LATIN SMALL LETTER S WITH CARON - /* morekeys_s */ "\u00DF,\u015B,\u0161", - /* single_quotes */ "!text/single_9qm_lqm", - /* keyspec_currency ~ */ - null, null, null, null, - /* ~ morekeys_d */ - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", - }; - /* Locale lo: Lao */ private static final String[] TEXTS_lo = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0E81: "ກ" LAO LETTER KO // U+0E82: "ຂ" LAO LETTER KHO SUNG // U+0E84: "ຄ" LAO LETTER KHO TAM /* keylabel_to_alpha */ "\u0E81\u0E82\u0E84", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20AD: "₭" KIP SIGN /* keyspec_currency */ "\u20AD", @@ -2650,6 +2606,7 @@ public final class KeyboardTextsTable { // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE /* morekeys_u */ "\u016B,\u0173,\u00FC,\u016B,\u00F9,\u00FA,\u00FB,\u016F,\u0171", + /* keylabel_to_alpha */ null, // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -2658,7 +2615,6 @@ public final class KeyboardTextsTable { // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+0131: "ı" LATIN SMALL LETTER DOTLESS I /* morekeys_i */ "\u012F,\u012B,\u00EC,\u00ED,\u00EE,\u00EF,\u0131", - /* keylabel_to_alpha */ null, // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE @@ -2684,8 +2640,6 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E,\u017C,\u017A", // U+010F: "ď" LATIN SMALL LETTER D WITH CARON /* morekeys_d */ "\u010F", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA // U+0165: "ť" LATIN SMALL LETTER T WITH CARON /* morekeys_t */ "\u0163,\u0165", @@ -2697,6 +2651,8 @@ public final class KeyboardTextsTable { // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE /* morekeys_g */ "\u0123,\u011F", + /* single_angle_quotes */ null, + /* double_angle_quotes */ null, // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA // U+0159: "ř" LATIN SMALL LETTER R WITH CARON // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE @@ -2744,6 +2700,7 @@ public final class KeyboardTextsTable { // U+016F: "ů" LATIN SMALL LETTER U WITH RING ABOVE // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE /* morekeys_u */ "\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u00FC,\u016F,\u0171", + /* keylabel_to_alpha */ null, // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -2752,7 +2709,6 @@ public final class KeyboardTextsTable { // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+0131: "ı" LATIN SMALL LETTER DOTLESS I /* morekeys_i */ "\u012B,\u012F,\u00EC,\u00ED,\u00EE,\u00EF,\u0131", - /* keylabel_to_alpha */ null, // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE @@ -2778,8 +2734,6 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E,\u017C,\u017A", // U+010F: "ď" LATIN SMALL LETTER D WITH CARON /* morekeys_d */ "\u010F", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA // U+0165: "ť" LATIN SMALL LETTER T WITH CARON /* morekeys_t */ "\u0163,\u0165", @@ -2791,6 +2745,8 @@ public final class KeyboardTextsTable { // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE /* morekeys_g */ "\u0123,\u011F", + /* single_angle_quotes */ null, + /* double_angle_quotes */ null, // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA // U+0159: "ř" LATIN SMALL LETTER R WITH CARON // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE @@ -2802,15 +2758,16 @@ public final class KeyboardTextsTable { /* Locale mk: Macedonian */ private static final String[] TEXTS_mk = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_9qm_lqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_lqm", @@ -2841,13 +2798,13 @@ public final class KeyboardTextsTable { /* Locale ml: Malayalam */ private static final String[] TEXTS_ml = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0D05: "അ" MALAYALAM LETTER A /* keylabel_to_alpha */ "\u0D05", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20B9: "₹" INDIAN RUPEE SIGN /* keyspec_currency */ "\u20B9", @@ -2856,15 +2813,15 @@ public final class KeyboardTextsTable { /* Locale mn: Mongolian */ private static final String[] TEXTS_mn = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20AE: "₮" TUGRIK SIGN /* keyspec_currency */ "\u20AE", @@ -2873,15 +2830,15 @@ public final class KeyboardTextsTable { /* Locale mr: Marathi */ private static final String[] TEXTS_mr = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0915: "क" DEVANAGARI LETTER KA // U+0916: "ख" DEVANAGARI LETTER KHA // U+0917: "ग" DEVANAGARI LETTER GA /* keylabel_to_alpha */ "\u0915\u0916\u0917", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20B9: "₹" INDIAN RUPEE SIGN /* keyspec_currency */ "\u20B9", @@ -2925,18 +2882,18 @@ public final class KeyboardTextsTable { /* Locale my: Burmese */ private static final String[] TEXTS_my = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+1000: "က" MYANMAR LETTER KA // U+1001: "ခ" MYANMAR LETTER KHA // U+1002: "ဂ" MYANMAR LETTER GA /* keylabel_to_alpha */ "\u1000\u1001\u1002", - /* morekeys_n ~ */ + /* morekeys_i ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, + null, null, null, null, /* ~ morekeys_cyrillic_soft_sign */ /* keyspec_period */ "\u104B", /* morekeys_period */ null, @@ -2994,7 +2951,7 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", - /* morekeys_i ~ */ + /* keylabel_to_alpha ~ */ null, null, null, null, /* ~ morekeys_c */ /* double_quotes */ "!text/double_9qm_rqm", @@ -3023,15 +2980,15 @@ public final class KeyboardTextsTable { /* Locale ne: Nepali */ private static final String[] TEXTS_ne = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0915: "क" DEVANAGARI LETTER KA // U+0916: "ख" DEVANAGARI LETTER KHA // U+0917: "ग" DEVANAGARI LETTER GA /* keylabel_to_alpha */ "\u0915\u0916\u0917", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN /* keyspec_currency */ "\u0930\u0941.", @@ -3114,6 +3071,7 @@ public final class KeyboardTextsTable { // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -3122,7 +3080,6 @@ public final class KeyboardTextsTable { // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+0133: "ij" LATIN SMALL LIGATURE IJ /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B,\u0133", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -3166,7 +3123,7 @@ public final class KeyboardTextsTable { /* morekeys_e */ "\u0119,\u00E8,\u00E9,\u00EA,\u00EB,\u0117,\u0113", /* morekeys_u ~ */ null, null, null, - /* ~ keylabel_to_alpha */ + /* ~ morekeys_i */ // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE /* morekeys_n */ "\u0144,\u00F1", @@ -3186,9 +3143,8 @@ public final class KeyboardTextsTable { // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON /* morekeys_z */ "\u017C,\u017A,\u017E", - /* morekeys_d ~ */ - null, null, null, null, - /* ~ morekeys_t */ + /* morekeys_d */ null, + /* morekeys_t */ null, // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE /* morekeys_l */ "\u0142", }; @@ -3228,6 +3184,7 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -3235,7 +3192,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EE,\u00EC,\u00EF,\u012F,\u012B", - /* keylabel_to_alpha */ null, /* morekeys_n */ null, // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA // U+010D: "č" LATIN SMALL LETTER C WITH CARON @@ -3269,8 +3225,8 @@ public final class KeyboardTextsTable { // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON /* morekeys_a */ "\u0103,\u00E2,\u00E3,\u00E0,\u00E1,\u00E4,\u00E6,\u00E5,\u0101", /* morekeys_o ~ */ - null, null, null, - /* ~ morekeys_u */ + null, null, null, null, + /* ~ keylabel_to_alpha */ // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -3278,9 +3234,8 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - /* keylabel_to_alpha ~ */ - null, null, null, - /* ~ morekeys_c */ + /* morekeys_n */ null, + /* morekeys_c */ null, /* double_quotes */ "!text/double_9qm_rqm", // U+0219: "ș" LATIN SMALL LETTER S WITH COMMA BELOW // U+00DF: "ß" LATIN SMALL LETTER SHARP S @@ -3289,8 +3244,8 @@ public final class KeyboardTextsTable { /* morekeys_s */ "\u0219,\u00DF,\u015B,\u0161", /* single_quotes */ "!text/single_9qm_rqm", /* keyspec_currency ~ */ - null, null, null, null, null, null, - /* ~ double_angle_quotes */ + null, null, null, null, + /* ~ morekeys_d */ // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW /* morekeys_t */ "\u021B", }; @@ -3298,15 +3253,16 @@ public final class KeyboardTextsTable { /* Locale ru: Russian */ private static final String[] TEXTS_ru = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_9qm_lqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_lqm", @@ -3334,14 +3290,14 @@ public final class KeyboardTextsTable { /* Locale si: Sinhala */ private static final String[] TEXTS_si = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0D85: "අ" SINHALA LETTER AYANNA // U+0D86: "ආ" SINHALA LETTER AAYANNA /* keylabel_to_alpha */ "\u0D85,\u0D86", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+0DBB/U+0DD4: "රු" SINHALA LETTER RAYANNA/SINHALA VOWEL SIGN KETTI PAA-PILLA /* keyspec_currency */ "\u0DBB\u0DD4", @@ -3386,6 +3342,7 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE /* morekeys_u */ "\u00FA,\u016F,\u00FC,\u016B,\u0173,\u00F9,\u00FB,\u0171", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK @@ -3394,7 +3351,6 @@ public final class KeyboardTextsTable { // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+0131: "ı" LATIN SMALL LETTER DOTLESS I /* morekeys_i */ "\u00ED,\u012B,\u012F,\u00EC,\u00EE,\u00EF,\u0131", - /* keylabel_to_alpha */ null, // U+0148: "ň" LATIN SMALL LETTER N WITH CARON // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE @@ -3421,8 +3377,6 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E,\u017C,\u017A", // U+010F: "ď" LATIN SMALL LETTER D WITH CARON /* morekeys_d */ "\u010F", - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", // U+0165: "ť" LATIN SMALL LETTER T WITH CARON // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA /* morekeys_t */ "\u0165,\u0163", @@ -3434,6 +3388,8 @@ public final class KeyboardTextsTable { // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE /* morekeys_g */ "\u0123,\u011F", + /* single_angle_quotes */ "!text/single_raqm_laqm", + /* double_angle_quotes */ "!text/double_raqm_laqm", // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE // U+0159: "ř" LATIN SMALL LETTER R WITH CARON // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA @@ -3460,6 +3416,9 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E", // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE /* morekeys_d */ "\u0111", + /* morekeys_t ~ */ + null, null, null, + /* ~ morekeys_g */ /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", }; @@ -3467,27 +3426,27 @@ public final class KeyboardTextsTable { /* Locale sr: Serbian */ private static final String[] TEXTS_sr = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // END: More keys definitions for Serbian (Cyrillic) // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_9qm_lqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_lqm", /* keyspec_currency ~ */ - null, null, null, null, - /* ~ morekeys_d */ + null, null, null, null, null, null, null, + /* ~ morekeys_g */ /* single_angle_quotes */ "!text/single_raqm_laqm", /* double_angle_quotes */ "!text/double_raqm_laqm", - /* morekeys_t ~ */ - null, null, null, null, null, - /* ~ morekeys_k */ + /* morekeys_r */ null, + /* morekeys_k */ null, // U+0450: "ѐ" CYRILLIC SMALL LETTER IE WITH GRAVE /* morekeys_cyrillic_ie */ "\u0450", /* keyspec_symbols_1 ~ */ @@ -3534,9 +3493,9 @@ public final class KeyboardTextsTable { // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE /* morekeys_e */ "\u00E8", /* morekeys_u */ null, + /* keylabel_to_alpha */ null, // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE /* morekeys_i */ "\u00EC", - /* keylabel_to_alpha */ null, /* morekeys_n */ null, // U+010D: "č" LATIN SMALL LETTER C WITH CARON // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE @@ -3551,7 +3510,7 @@ public final class KeyboardTextsTable { /* morekeys_z */ "\u017E,%", // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE /* morekeys_d */ "\u0111,%", - /* single_angle_quotes ~ */ + /* morekeys_t ~ */ null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, @@ -3602,12 +3561,12 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FC,\u00FA,\u00F9,\u00FB,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS /* morekeys_i */ "\u00ED,\u00EC,\u00EE,\u00EF", - /* keylabel_to_alpha */ null, // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0148: "ň" LATIN SMALL LETTER N WITH CARON @@ -3634,14 +3593,14 @@ public final class KeyboardTextsTable { // U+00F0: "ð" LATIN SMALL LETTER ETH // U+010F: "ď" LATIN SMALL LETTER D WITH CARON /* morekeys_d */ "\u00F0,\u010F", - /* single_angle_quotes */ "!text/single_raqm_laqm", - /* double_angle_quotes */ "!text/double_raqm_laqm", // U+0165: "ť" LATIN SMALL LETTER T WITH CARON // U+00FE: "þ" LATIN SMALL LETTER THORN /* morekeys_t */ "\u0165,\u00FE", // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE /* morekeys_l */ "\u0142", /* morekeys_g */ null, + /* single_angle_quotes */ "!text/single_raqm_laqm", + /* double_angle_quotes */ "!text/double_raqm_laqm", // U+0159: "ř" LATIN SMALL LETTER R WITH CARON /* morekeys_r */ "\u0159", /* morekeys_k ~ */ @@ -3697,13 +3656,13 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B", + /* keylabel_to_alpha */ null, // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE /* morekeys_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE /* morekeys_n */ "\u00F1", // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA @@ -3712,7 +3671,7 @@ public final class KeyboardTextsTable { // U+00DF: "ß" LATIN SMALL LETTER SHARP S /* morekeys_s */ "\u00DF", /* single_quotes ~ */ - null, null, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, /* ~ morekeys_l */ /* morekeys_g */ "g\'", }; @@ -3720,15 +3679,15 @@ public final class KeyboardTextsTable { /* Locale ta_IN: Tamil (India) */ private static final String[] TEXTS_ta_IN = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0BA4: "த" TAMIL LETTER TA // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+0BF9: "௹" TAMIL RUPEE SIGN /* keyspec_currency */ "\u0BF9", @@ -3737,15 +3696,15 @@ public final class KeyboardTextsTable { /* Locale ta_LK: Tamil (Sri Lanka) */ private static final String[] TEXTS_ta_LK = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0BA4: "த" TAMIL LETTER TA // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I // U+0BB4/U+0BCD: "ழ்" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+0DBB/U+0DD4: "රු" SINHALA LETTER RAYANNA/SINHALA VOWEL SIGN KETTI PAA-PILLA /* keyspec_currency */ "\u0DBB\u0DD4", @@ -3754,8 +3713,8 @@ public final class KeyboardTextsTable { /* Locale ta_SG: Tamil (Singapore) */ private static final String[] TEXTS_ta_SG = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0BA4: "த" TAMIL LETTER TA // U+0BAE/U+0BBF: "மி" TAMIL LETTER MA/TAMIL VOWEL SIGN I @@ -3766,15 +3725,15 @@ public final class KeyboardTextsTable { /* Locale te: Telugu */ private static final String[] TEXTS_te = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0C05: "అ" TELUGU LETTER A // U+0C06: "ఆ" TELUGU LETTER AA // U+0C07: "ఇ" TELUGU LETTER I /* keylabel_to_alpha */ "\u0C05\u0C06\u0C07", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+20B9: "₹" INDIAN RUPEE SIGN /* keyspec_currency */ "\u20B9", @@ -3783,15 +3742,15 @@ public final class KeyboardTextsTable { /* Locale th: Thai */ private static final String[] TEXTS_th = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0E01: "ก" THAI CHARACTER KO KAI // U+0E02: "ข" THAI CHARACTER KHO KHAI // U+0E04: "ค" THAI CHARACTER KHO KHWAI /* keylabel_to_alpha */ "\u0E01\u0E02\u0E04", - /* morekeys_n ~ */ - null, null, null, null, null, + /* morekeys_i ~ */ + null, null, null, null, null, null, /* ~ single_quotes */ // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT /* keyspec_currency */ "\u0E3F", @@ -3834,6 +3793,7 @@ public final class KeyboardTextsTable { // U+00FB: "û" LATIN SMALL LETTER U WITH CIRCUMFLEX // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE @@ -3841,7 +3801,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE /* morekeys_n */ "\u00F1,\u0144", @@ -3875,6 +3834,7 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", + /* keylabel_to_alpha */ null, // U+0131: "ı" LATIN SMALL LETTER DOTLESS I // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS @@ -3883,7 +3843,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+0148: "ň" LATIN SMALL LETTER N WITH CARON // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE /* morekeys_n */ "\u0148,\u00F1", @@ -3904,7 +3863,7 @@ public final class KeyboardTextsTable { // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON /* morekeys_z */ "\u017E", /* morekeys_d ~ */ - null, null, null, null, null, + null, null, null, /* ~ morekeys_l */ // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE /* morekeys_g */ "\u011F", @@ -3913,15 +3872,16 @@ public final class KeyboardTextsTable { /* Locale uk: Ukrainian */ private static final String[] TEXTS_uk = { /* morekeys_a ~ */ - null, null, null, null, null, - /* ~ morekeys_i */ + null, null, null, null, + /* ~ morekeys_u */ // Label for "switch to alphabetic" key. // U+0410: "А" CYRILLIC CAPITAL LETTER A // U+0411: "Б" CYRILLIC CAPITAL LETTER BE // U+0412: "В" CYRILLIC CAPITAL LETTER VE /* keylabel_to_alpha */ "\u0410\u0411\u0412", - /* morekeys_n */ null, - /* morekeys_c */ null, + /* morekeys_i ~ */ + null, null, null, + /* ~ morekeys_c */ /* double_quotes */ "!text/double_9qm_lqm", /* morekeys_s */ null, /* single_quotes */ "!text/single_9qm_lqm", @@ -3980,6 +3940,7 @@ public final class KeyboardTextsTable { // U+00FA: "ú" LATIN SMALL LETTER U WITH ACUTE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B", + /* keylabel_to_alpha */ null, // U+0131: "ı" LATIN SMALL LETTER DOTLESS I // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS @@ -3988,7 +3949,6 @@ public final class KeyboardTextsTable { // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B", - /* keylabel_to_alpha */ null, // U+0148: "ň" LATIN SMALL LETTER N WITH CARON // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE /* morekeys_n */ "\u0148,\u00F1", @@ -4009,7 +3969,7 @@ public final class KeyboardTextsTable { // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON /* morekeys_z */ "\u017E", /* morekeys_d ~ */ - null, null, null, null, null, + null, null, null, /* ~ morekeys_l */ // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE /* morekeys_g */ "\u011F", @@ -4077,14 +4037,15 @@ public final class KeyboardTextsTable { // U+1EEF: "ữ" LATIN SMALL LETTER U WITH HORN AND TILDE // U+1EF1: "ự" LATIN SMALL LETTER U WITH HORN AND DOT BELOW /* morekeys_u */ "\u00F9,\u00FA,\u1EE7,\u0169,\u1EE5,\u01B0,\u1EEB,\u1EE9,\u1EED,\u1EEF,\u1EF1", + /* keylabel_to_alpha */ null, // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+1EC9: "ỉ" LATIN SMALL LETTER I WITH HOOK ABOVE // U+0129: "ĩ" LATIN SMALL LETTER I WITH TILDE // U+1ECB: "ị" LATIN SMALL LETTER I WITH DOT BELOW /* morekeys_i */ "\u00EC,\u00ED,\u1EC9,\u0129,\u1ECB", - /* keylabel_to_alpha ~ */ - null, null, null, null, null, null, + /* morekeys_n ~ */ + null, null, null, null, null, /* ~ single_quotes */ // U+20AB: "₫" DONG SIGN /* keyspec_currency */ "\u20AB", @@ -4132,13 +4093,13 @@ public final class KeyboardTextsTable { // U+00F9: "ù" LATIN SMALL LETTER U WITH GRAVE // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B", + /* keylabel_to_alpha */ null, // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE /* morekeys_n */ "\u00F1", // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA @@ -4195,6 +4156,7 @@ public final class KeyboardTextsTable { // U+0171: "ű" LATIN SMALL LETTER U WITH DOUBLE ACUTE // U+0173: "ų" LATIN SMALL LETTER U WITH OGONEK /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u0169,\u016B,\u016D,\u016F,\u0171,\u0173", + /* keylabel_to_alpha */ null, // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX @@ -4206,7 +4168,6 @@ public final class KeyboardTextsTable { // U+0131: "ı" LATIN SMALL LETTER DOTLESS I // U+0133: "ij" LATIN SMALL LIGATURE IJ /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u0129,\u012B,\u012D,\u012F,\u0131,\u0133", - /* keylabel_to_alpha */ null, // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA @@ -4243,8 +4204,6 @@ public final class KeyboardTextsTable { // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE // U+00F0: "ð" LATIN SMALL LETTER ETH /* morekeys_d */ "\u010F,\u0111,\u00F0", - /* single_angle_quotes */ null, - /* double_angle_quotes */ null, // U+00FE: "þ" LATIN SMALL LETTER THORN // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA // U+0165: "ť" LATIN SMALL LETTER T WITH CARON @@ -4261,6 +4220,8 @@ public final class KeyboardTextsTable { // U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA /* morekeys_g */ "\u011D,\u011F,\u0121,\u0123", + /* single_angle_quotes */ null, + /* double_angle_quotes */ null, // U+0155: "ŕ" LATIN SMALL LETTER R WITH ACUTE // U+0157: "ŗ" LATIN SMALL LETTER R WITH CEDILLA // U+0159: "ř" LATIN SMALL LETTER R WITH CARON @@ -4290,10 +4251,10 @@ public final class KeyboardTextsTable { private static final Object[] LOCALES_AND_TEXTS = { // "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */ - "DEFAULT", TEXTS_DEFAULT, /* 179/179 DEFAULT */ + "DEFAULT", TEXTS_DEFAULT, /* 180/180 DEFAULT */ "af" , TEXTS_af, /* 7/ 13 Afrikaans */ "ar" , TEXTS_ar, /* 55/110 Arabic */ - "az" , TEXTS_az, /* 11/ 20 Azerbaijani */ + "az" , TEXTS_az, /* 11/ 18 Azerbaijani */ "be" , TEXTS_be, /* 9/ 54 Belarusian */ "bg" , TEXTS_bg, /* 2/ 9 Bulgarian */ "bn_BD" , TEXTS_bn_BD, /* 27/ 57 Bangla (Bangladesh) */ @@ -4303,7 +4264,7 @@ public final class KeyboardTextsTable { "da" , TEXTS_da, /* 19/ 58 Danish */ "de" , TEXTS_de, /* 16/ 64 German */ "de_DE" , TEXTS_de_DE, /* 16/ 64 German (Germany) */ - "el" , TEXTS_el, /* 1/ 6 Greek */ + "el" , TEXTS_el, /* 1/ 5 Greek */ "en" , TEXTS_en, /* 8/ 10 English */ "eo" , TEXTS_eo, /* 26/126 Esperanto */ "es" , TEXTS_es, /* 8/ 65 Spanish */ @@ -4315,10 +4276,10 @@ public final class KeyboardTextsTable { "gl" , TEXTS_gl, /* 7/ 8 Galician */ "hi" , TEXTS_hi, /* 27/ 57 Hindi */ "hi_ZZ" , TEXTS_hi_ZZ, /* 9/118 Hindi (Unknown Region) */ - "hr" , TEXTS_hr, /* 9/ 17 Croatian */ - "hu" , TEXTS_hu, /* 9/ 17 Hungarian */ + "hr" , TEXTS_hr, /* 9/ 20 Croatian */ + "hu" , TEXTS_hu, /* 9/ 20 Hungarian */ "hy" , TEXTS_hy, /* 9/134 Armenian */ - "is" , TEXTS_is, /* 10/ 18 Icelandic */ + "is" , TEXTS_is, /* 10/ 16 Icelandic */ "it" , TEXTS_it, /* 11/ 64 Italian */ "iw" , TEXTS_iw, /* 20/131 Hebrew */ "ka" , TEXTS_ka, /* 3/ 11 Georgian */ @@ -4326,7 +4287,6 @@ public final class KeyboardTextsTable { "km" , TEXTS_km, /* 2/130 Khmer */ "kn" , TEXTS_kn, /* 2/ 12 Kannada */ "ky" , TEXTS_ky, /* 10/ 92 Kyrgyz */ - "lb" , TEXTS_lb, /* 11/ 17 Luxembourgish */ "lo" , TEXTS_lo, /* 2/ 12 Lao */ "lt" , TEXTS_lt, /* 18/ 22 Lithuanian */ "lv" , TEXTS_lv, /* 18/ 22 Latvian */ @@ -4338,27 +4298,27 @@ public final class KeyboardTextsTable { "nb" , TEXTS_nb, /* 11/ 58 Norwegian Bokmål */ "ne" , TEXTS_ne, /* 27/ 57 Nepali */ "nl" , TEXTS_nl, /* 9/ 13 Dutch */ - "pl" , TEXTS_pl, /* 10/ 19 Polish */ + "pl" , TEXTS_pl, /* 10/ 17 Polish */ "pt" , TEXTS_pt, /* 6/ 8 Portuguese */ "rm" , TEXTS_rm, /* 1/ 2 Romansh */ - "ro" , TEXTS_ro, /* 6/ 18 Romanian */ + "ro" , TEXTS_ro, /* 6/ 16 Romanian */ "ru" , TEXTS_ru, /* 9/ 54 Russian */ "si" , TEXTS_si, /* 2/ 12 Sinhala */ "sk" , TEXTS_sk, /* 20/ 22 Slovak */ - "sl" , TEXTS_sl, /* 8/ 17 Slovenian */ + "sl" , TEXTS_sl, /* 8/ 20 Slovenian */ "sr" , TEXTS_sr, /* 11/ 97 Serbian */ "sr_ZZ" , TEXTS_sr_ZZ, /* 14/118 Serbian (Unknown Region) */ "sv" , TEXTS_sv, /* 21/ 58 Swedish */ - "sw" , TEXTS_sw, /* 9/ 20 Swahili */ + "sw" , TEXTS_sw, /* 9/ 18 Swahili */ "ta_IN" , TEXTS_ta_IN, /* 2/ 12 Tamil (India) */ "ta_LK" , TEXTS_ta_LK, /* 2/ 12 Tamil (Sri Lanka) */ - "ta_SG" , TEXTS_ta_SG, /* 1/ 6 Tamil (Singapore) */ + "ta_SG" , TEXTS_ta_SG, /* 1/ 5 Tamil (Singapore) */ "te" , TEXTS_te, /* 2/ 12 Telugu */ "th" , TEXTS_th, /* 2/ 12 Thai */ "tl" , TEXTS_tl, /* 7/ 8 Tagalog */ - "tr" , TEXTS_tr, /* 11/ 20 Turkish */ + "tr" , TEXTS_tr, /* 11/ 18 Turkish */ "uk" , TEXTS_uk, /* 11/ 91 Ukrainian */ - "uz" , TEXTS_uz, /* 11/ 20 Uzbek */ + "uz" , TEXTS_uz, /* 11/ 18 Uzbek */ "vi" , TEXTS_vi, /* 8/ 15 Vietnamese */ "zu" , TEXTS_zu, /* 8/ 10 Zulu */ "zz" , TEXTS_zz, /* 19/120 Alphabet */ diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt new file mode 100644 index 000000000..8aa4cb942 --- /dev/null +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt @@ -0,0 +1,131 @@ +package org.dslul.openboard.inputmethod.latin + +import android.annotation.SuppressLint +import android.content.Context +import android.util.AttributeSet +import android.view.Gravity +import android.view.View +import android.widget.FrameLayout +import android.widget.ImageButton +import org.dslul.openboard.inputmethod.keyboard.KeyboardActionListener +import org.dslul.openboard.inputmethod.latin.common.Constants + +class KeyboardWrapperView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyle: Int = 0 +) : FrameLayout(context, attrs, defStyle), View.OnClickListener { + + var keyboardActionListener: KeyboardActionListener? = null + + private lateinit var stopOneHandedModeBtn: ImageButton + private lateinit var switchOneHandedModeBtn: ImageButton + private lateinit var keyboardView: View + private val iconStopOneHandedModeId: Int + private val iconSwitchOneHandedModeId: Int + + var oneHandedModeEnabled = false + set(enabled) { + field = enabled + updateViewsVisibility() + requestLayout() + } + + var oneHandedGravity = Gravity.NO_GRAVITY + set(value) { + field = value + updateSwitchButtonSide() + requestLayout() + } + + + override fun onFinishInflate() { + super.onFinishInflate() + stopOneHandedModeBtn = findViewById(R.id.btn_stop_one_handed_mode) + stopOneHandedModeBtn.setImageResource(iconStopOneHandedModeId) + stopOneHandedModeBtn.visibility = GONE + switchOneHandedModeBtn = findViewById(R.id.btn_switch_one_handed_mode) + switchOneHandedModeBtn.setImageResource(iconSwitchOneHandedModeId) + switchOneHandedModeBtn.visibility = GONE + keyboardView = findViewById(R.id.keyboard_view) + + stopOneHandedModeBtn.setOnClickListener(this) + switchOneHandedModeBtn.setOnClickListener(this) + } + + @SuppressLint("RtlHardcoded") + fun switchOneHandedModeSide() { + oneHandedGravity = if (oneHandedGravity == Gravity.LEFT) Gravity.RIGHT else Gravity.LEFT + } + + private fun updateViewsVisibility() { + stopOneHandedModeBtn.visibility = if (oneHandedModeEnabled) VISIBLE else GONE + switchOneHandedModeBtn.visibility = if (oneHandedModeEnabled) VISIBLE else GONE + } + + private fun updateSwitchButtonSide() { + switchOneHandedModeBtn.scaleX = if (oneHandedGravity == Gravity.RIGHT) -1f else 1f + } + + override fun onClick(view: View) { + if (view === stopOneHandedModeBtn) { + keyboardActionListener?.onCodeInput(Constants.CODE_STOP_ONE_HANDED_MODE, + Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, + false /* isKeyRepeat */) + } else if (view === switchOneHandedModeBtn) { + keyboardActionListener?.onCodeInput(Constants.CODE_SWITCH_ONE_HANDED_MODE, + Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, + false /* isKeyRepeat */) + } + } + + @SuppressLint("RtlHardcoded") + override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) { + if (!oneHandedModeEnabled) { + super.onLayout(changed, left, top, right, bottom) + return + } + + val isLeftGravity = oneHandedGravity == Gravity.LEFT + val width = right - left + val spareWidth = width - keyboardView.measuredWidth + + val keyboardLeft = if (isLeftGravity) 0 else spareWidth + keyboardView.layout( + keyboardLeft, + 0, + keyboardLeft + keyboardView.measuredWidth, + keyboardView.measuredHeight + ) + + val buttonsLeft = if (isLeftGravity) keyboardView.measuredWidth else 0 + stopOneHandedModeBtn.layout( + buttonsLeft + (spareWidth - stopOneHandedModeBtn.measuredWidth) / 2, + stopOneHandedModeBtn.measuredHeight / 2, + buttonsLeft + (spareWidth + stopOneHandedModeBtn.measuredWidth) / 2, + 3 * stopOneHandedModeBtn.measuredHeight / 2 + ) + switchOneHandedModeBtn.layout( + buttonsLeft + (spareWidth - switchOneHandedModeBtn.measuredWidth) / 2, + 2 * stopOneHandedModeBtn.measuredHeight, + buttonsLeft + (spareWidth + switchOneHandedModeBtn.measuredWidth) / 2, + 2 * stopOneHandedModeBtn.measuredHeight + switchOneHandedModeBtn.measuredHeight + ) + } + + init { + val keyboardAttr = context.obtainStyledAttributes(attrs, + R.styleable.Keyboard, defStyle, R.style.Keyboard) + iconStopOneHandedModeId = keyboardAttr.getResourceId(R.styleable.Keyboard_iconStopOneHandedMode, 0) + iconSwitchOneHandedModeId = keyboardAttr.getResourceId(R.styleable.Keyboard_iconSwitchOneHandedMode, 0) + keyboardAttr.recycle() + + val themeAttr = context.obtainStyledAttributes(attrs, + R.styleable.KeyboardTheme, defStyle, 0) + val keyboardViewStyleId = themeAttr.getResourceId(R.styleable.KeyboardTheme_mainKeyboardViewStyle, 0) + themeAttr.recycle() + val styleAttr = context.obtainStyledAttributes(keyboardViewStyleId, intArrayOf(android.R.attr.background)) + setBackgroundResource(styleAttr.getResourceId(0, 0)) + styleAttr.recycle() + } +} \ No newline at end of file diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java index b104e64cb..87a93a8d0 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/LatinIME.java @@ -1341,11 +1341,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } } - int getCurrentAutoCapsState() { + public int getCurrentAutoCapsState() { return mInputLogic.getCurrentAutoCapsState(mSettings.getCurrent()); } - int getCurrentRecapitalizeState() { + public int getCurrentRecapitalizeState() { return mInputLogic.getCurrentRecapitalizeState(); } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Constants.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Constants.java index 7311d8b55..d65f5112c 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Constants.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Constants.java @@ -247,8 +247,11 @@ public final class Constants { public static final int CODE_SYMBOL_SHIFT = -14; public static final int CODE_ALPHA_FROM_EMOJI = -15; public static final int CODE_ALPHA_FROM_CLIPBOARD = -16; + public static final int CODE_START_ONE_HANDED_MODE = -17; + public static final int CODE_STOP_ONE_HANDED_MODE = -18; + public static final int CODE_SWITCH_ONE_HANDED_MODE = -19; // Code value representing the code is not specified. - public static final int CODE_UNSPECIFIED = -17; + public static final int CODE_UNSPECIFIED = -20; public static boolean isLetterCode(final int code) { return code >= CODE_SPACE; @@ -276,6 +279,9 @@ public final class Constants { case CODE_TAB: return "tab"; case CODE_ENTER: return "enter"; case CODE_SPACE: return "space"; + case CODE_START_ONE_HANDED_MODE: return "startOneHandedMode"; + case CODE_STOP_ONE_HANDED_MODE: return "stopOneHandedMode"; + case CODE_SWITCH_ONE_HANDED_MODE: return "switchOneHandedMode"; default: if (code < CODE_SPACE) return String.format("\\u%02X", code); if (code < 0x100) return String.format("%c", code); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java index 1f85f6622..333d0957d 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java @@ -717,6 +717,15 @@ public final class InputLogic { // line, so that does affect the contents of the editor. inputTransaction.setDidAffectContents(); break; + case Constants.CODE_START_ONE_HANDED_MODE: + case Constants.CODE_STOP_ONE_HANDED_MODE: + // Note: One-handed mode activation is being + // handled in {@link KeyboardState#onEvent(Event,int)}. + break; + case Constants.CODE_SWITCH_ONE_HANDED_MODE: + // Note: Switching one-handed side is being + // handled in {@link KeyboardState#onEvent(Event,int)}. + break; default: throw new RuntimeException("Unknown key code : " + event.getMKeyCode()); } 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 7400620e2..24990a334 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 @@ -16,6 +16,7 @@ package org.dslul.openboard.inputmethod.latin.settings; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; @@ -24,6 +25,7 @@ import android.content.res.Resources; import android.os.Build; import android.util.Log; +import android.view.Gravity; import org.dslul.openboard.inputmethod.latin.AudioAndHapticFeedbackManager; import org.dslul.openboard.inputmethod.latin.InputAttributes; import org.dslul.openboard.inputmethod.latin.R; @@ -107,6 +109,9 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang "pref_gesture_floating_preview_text"; public static final String PREF_SHOW_SETUP_WIZARD_ICON = "pref_show_setup_wizard_icon"; + public static final String PREF_ONE_HANDED_MODE = "pref_one_handed_mode_enabled"; + public static final String PREF_ONE_HANDED_GRAVITY = "pref_one_handed_mode_gravity"; + public static final String PREF_KEY_IS_INTERNAL = "pref_key_is_internal"; public static final String PREF_ENABLE_METRICS_LOGGING = "pref_enable_metrics_logging"; @@ -403,6 +408,23 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang return prefs.getBoolean(PREF_SHOW_SETUP_WIZARD_ICON, false); } + public static boolean readOneHandedModeEnabled(final SharedPreferences prefs) { + return prefs.getBoolean(PREF_ONE_HANDED_MODE, false); + } + + public void writeOneHandedModeEnabled(final boolean enabled) { + mPrefs.edit().putBoolean(PREF_ONE_HANDED_MODE, enabled).apply(); + } + + @SuppressLint("RtlHardcoded") + public static int readOneHandedModeGravity(final SharedPreferences prefs) { + return prefs.getInt(PREF_ONE_HANDED_GRAVITY, Gravity.LEFT); + } + + public void writeOneHandedModeGravity(final int gravity) { + mPrefs.edit().putInt(PREF_ONE_HANDED_GRAVITY, gravity).apply(); + } + public static boolean readHasHardwareKeyboard(final Configuration conf) { // The standard way of finding out whether we have a hardware keyboard. This code is taken // from InputMethodService#onEvaluateInputShown, which canonically determines this. diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java index 76c536ca5..009018892 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java @@ -82,6 +82,8 @@ public class SettingsValues { public final boolean mDeleteSwipeEnabled; public final boolean mClipboardHistoryEnabled; public final long mClipboardHistoryRetentionTime; + public final boolean mOneHandedModeEnabled; + public final int mOneHandedModeGravity; // Use bigrams to predict the next word when there is no input for it yet public final boolean mBigramPredictionEnabled; public final boolean mGestureInputEnabled; @@ -237,6 +239,8 @@ public class SettingsValues { mDeleteSwipeEnabled = Settings.readDeleteSwipeEnabled(prefs); mClipboardHistoryEnabled = Settings.readClipboardHistoryEnabled(prefs); mClipboardHistoryRetentionTime = Settings.readClipboardHistoryRetentionTime(prefs, res); + mOneHandedModeEnabled = Settings.readOneHandedModeEnabled(prefs); + mOneHandedModeGravity = Settings.readOneHandedModeGravity(prefs); } public boolean isMetricsLoggingEnabled() { diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java index 25fd4ea62..ecf9df1e0 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java @@ -182,6 +182,15 @@ public final class ResourceUtils { return matchedAll; } + public static int getKeyboardWidth(final Resources res, final SettingsValues settingsValues) { + final int defaultKeyboardWidth = getDefaultKeyboardWidth(res); + if (settingsValues.mOneHandedModeEnabled) { + return (int) res.getFraction(R.fraction.config_one_handed_mode_width_ratio, + defaultKeyboardWidth, defaultKeyboardWidth); + } + return defaultKeyboardWidth; + } + public static int getDefaultKeyboardWidth(final Resources res) { final DisplayMetrics dm = res.getDisplayMetrics(); return dm.widthPixels; diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_holo_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5575ae649b1ce579fabebf49e8a66716cdc489cb GIT binary patch literal 1092 zcmV-K1iSl*P)NF)}73b9d^mR<=9AvQ!J zsaS}GdZk{aUWxR!CG{wZ6TiQi%iQB$Qay7`rT^rgIrp2H@B9AeG3Rmf@`mxB!}Gim z0qtAyM|E}e=(e`D%49NG#nl^9B1pc7q#KMet*{*tN3cz@pNkDtyXq>bGRaRS@oVt2 z@zH~ABln7eE>#k6r0px`pk_yqT$z%lT&e`A@#!Re4}J{RPt%oPfaNN#F*Fdo*~31eX)a3o+0TnoDbo6t>*%u~0rV>*RH0h+a61va4vzcpUe6P-f=>&>qM77Ppc z6NUxkLI6&RVWDjoVlRM|;xs;ITj3hYQvxwR?#EgH2~Q;PtHxhB_Tumf+=Z=zd*7dl ztpHxkXDZk1*lvCX6ExZE(E493kww69Y+8-BnREerO=ba`P3C#v?*$0dvWJrv^D{X? zL%8v!^d!jbx@267l(w9XQV zh`Ru7(B~Sz--e-Xa*QQ!Ron&Wh@>2chmF4pPeEO(gCO->9|gZ%!i@ldZc>P|wK&zl z3`4d4()gQs*Kj95-H2Au#B|5Fujy=XyC0wx%5ZoH#~SuhsV3NP$P zQGm+oq|)5(iE%gv$6DuTxezIc(@v#LuyYs`a9DujP`(@eY)JBL9b7|c5J z)cPoO>Kp|+5m4)F0Ea<0Do*-mpZ3h`3i>2pprWR#!tD5iM$ihHnZrwEm(bT|9TgSb zS*a#Af~+?FB<2$R_&u)$q#e^a2r`af`cI(8&f+i8PuFb4Z^Dih83;Cspa%%vX=gJ) zXpMD|3Yi~Czt4tXa?`GD0|`7f178zq3~6(85+Q6Uj-;P2;yrM{s=zFTrM>Y0#Xa4?^nw zSU|HiN$JlDZAJAb_pA`L`I*YSGPPQ4lFkGrrvaIT_T$4CviJs@p4tFJC{iT=0000< KMNUMnLSTYukoxri literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3454ccd331d653a953279f0dc71a598fabeacb23 GIT binary patch literal 808 zcmV+@1K0eCP)3wLxs@*@| z)DTRiQn|Ffz5NP3r#&esq;sAA_=W_9I?#Rb#u~P_EYNQX{Y9VA6nYp3LRVry9~gg-S<=4hL0!IQq6h&(hsepGS!U}zaC?2< z;0ORJq6xHw%BTR;c-@vT5a;O84y3}RQfZ9DcecnE43>aAV9)zN$BcKUMwd+ti1Fhl6i7jF z6_tSur8Q>hI{n=qkRBn^=#hny7SJ{HL%EDC=JWYe)-Mc5gGriEvIUaSTcCz5tOJr< z+rh`%JLed$_Ll7n0&1i9sEL+MrZW19(NTbgV?c2jwcS{E&M6LAJCK6H{UkodVAC3H z@OhqBiwO^?7KH=ZS<4u4} z9tRN$<8t+IJskw3V3zbQqge@AB3}afhM(Rb{ZiEhi9HzHHqlb~1wyof-$)XmPQA=y z^xY&|E~jPu27`eV`YFS=TK=&y>n|LhhPVf5% z1xCFX-ZatD)w;pAnBgKGhkf5fp~nVLa}-!LyN?3Dcw9Qa4$MdLPHLuo&%^=L0Ol7c z^3p_Cp1WzrrN@o>ON_lsPNpF+E->$+$SB3G0`>&GL4}xJpoL2G+rH1wZ&;+GzhU~) myMM(v^`jK(@N-&`H2wkY4O-f41ON#D0000Cf-cc z7-RIHi5ES1Qxl^RH8BbXq>73}z7*nb%C0UG66kE(6EFE^cXnsq`|aB|v(wsaTUG+o zG_4ZV=_-@&m(&DIM@Pr;&d$zJ^gJ96w+JX*cDa91j6fBrS_DKju~_VSJRV;_b6s6s zm#eC(YJl4vjYcD!2juYuH335wA_TtB-rk<{dcA&tZUeK3=DB{==kqmncXz+;?d_eW z&l8~PWIqKnfc!l@J#R#CB#te8eSLQfARw+K5{V4Q8QLpof=o3Ot+sTatR5^&c3KI( z1}K?K9y0-bMvY`i)RY@JWS^Ey2I3WM2$V{t8aeKvuFf(6hJmY;{VH3&K)k-m!NI`; z{r&y-Y0q-~Jy1;rdxeTX%^W}I?e7$P5M zTJCbW%-2f~1VBYwTiYSlm~#|h>&VE6-+(GP5dF$Rp-=-3jMaDwJp^dGet!)RYfESy zprdA>fq{X2%0R*hUQc%3=|P2)8NOeqJsyus0-EBp5aa$m1BmmR0G$Bfhv>uo$v_|w z1$;~yNOT5hSPa$!FQ?P#mzhka9w;-=3JcyBf(w{joAY_DkN*5nVrgkHY)>& zEGIP8{We7`_A+BuK+HfW%R@GbiKApZiJK+h5{~BN04gFwpU^f@qe>=H%Z4h6lW$hD z#Q0@u@)@=1m*eDR;-?H*dMX^sK{hM#FwD}g{0cd&RM2K)d>QY(6{q8>Sz_E0Fn7gg zN%pT~II0HfJdUUHh2nLuFtbL<^j_JoB?BtJw&WtI7e8$_Tmtky3!IOVov_HX?9;LV zRZEc{;WP4zV6*YnMe|>6>5zXoF0!Ie0CI)Q>?#V3VK{dHwv%j~1nd!8jJIf9h_*Ps zU^d-|L?TgOyz=;>8DLK2)&Bn#W2hE+P`Ny2%dFa8AG$)}89A1z00000NkvXXu0mjf D|D2_a literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_holo_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ee2b35a7b65cfcb2486f900159de71218e226f24 GIT binary patch literal 832 zcmV-G1Hb%DT2gXxQ6!f5D|q_AOTV+g4~e;i}{XO zYdy~SX7ASE!2MDb-Fg0hXLe_IXZLn?di3bAf}$wwt45@7Qfvd<91JIu$?jk8lY$AXe4Ua~n z$KIZ|2qS@p1~IdZ1mq6jMt=Gr4L{Y%Xz6ai)gX>U^Sx;Qu#JJ-0e~y%wdaxo4=gto zXrP6rZ6qL905|6OlQeuHz4*}by?~1bT1I=RtsDW&NSpa;FMSpVUbCiKjV8c>i-ys> z(zX_JqH6%vYD3QJP}|=6D(_EIf>7sA;To-KRGAa<|7@sKa=Z zF3!J1GqwwD;sd_8Qxu{`zqUZrJSG*+z0L<{5XZ``oj+b*RuBxE2;@8|k>Y#+9ObT^ zH(p;_V_nWSp$oT1j~+e#5p-D!yKvXSyLreaw6}E|nRok+N{O;VDFK%%Hg73`U_&t% z>iM{sJN5(-IUkBSN^$C;JjEOkGUfDCgvWQXoYnwR4m9CZwl<#uHkx{#0}ZFL)(0AU zq~w@acci4AcMoxtf*U_l25_k7-lpzQzm&foXb`W^Fq$0dX)D{IKEPf&ZSq=WsjXZA z#NcA9%2&%xMKrJM=q`{ufN-^V6t7Ng5LTPNaka?h?pemmT_)@wyW9=Pb-lh=ZR)V8 z008?0o85MO;25NRVw!H%CnoKoyZw>RZ5SbilVTgthSQ_R|A1emETx4>`@D?+0000< KMNUMnLSTa5++tEYRa3xy*N9YGM3#7;a`w0;(F9DdeH)^80E=JWZ@VzIatYdWkYRvVAU zmr0@+g9BH6Y#gj1xvGhxP>q-{42NPyGo^UYJDx>z{STA2OA=aoYr>*71UIR z_n3W%jU>UnBnqtGHo(OPUyTuuIi-5L2qMs{Jb%n0CIUYAN{pEiwUZzMU~lrgpF>ce z7_oRe30hW01AU53r2L&MqIAhR_-YJdMU~1dXhf-Xb_68IizIlEL>JcA0uEe!)ORAW z2D*H_Q>g{D!k^u=e1T)LBrv6>QUiHjw*CZL6?GR73H@bUV$+$eTMn|Oh9U4t6oelCjaG-BntC~}pqLPWj8+G2HIr^lFHrR(Zr<6!=)G=P9=k8Kqb i0gl7ZTC$iU4gufGt9t{)KzdgI0000{YypcTRRu;&1XVc;$s9fl+oQbtc_H zs`T{CSb|{Cg+geiZq=Qxp6Z&TqXS+#vf1n_K@eldnx}z}gSTbm(!4F;FdmP)qtWQ| za5y}Vu(MLB^uZ^Jd*yQZJ-!ZpXp&<}F0Uw5BW5rd-1qzaM{RQbu2!pE20`#fb2ae6 z7mki&V%>|NsR#-*cMSxg-jJR)O#;j%!8b|tR`a5OFC5{|bv$y2p!3v%L266m&2D4b+6 znN4~Ku5k|^v#Lw8s_Rlq?9*zsdMPdDQ=Fh zYcG8!Q!ExwCX`X3eKGj;MFo1-&C~(xchY^zen_h=Wa~ v8a;Aq{uXdRwa|1aahTU%^{00000NkvXXu0mjfg&K0} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_holo_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e4081cd38bb75b80e86e00fad72ee72ca949f444 GIT binary patch literal 374 zcmV-+0g3*JP)KoUZQ7l*M;m@)}RLvCj2i<iycfM!- zFL?<}JIQ;)*BM@mf)GLoA;bqEgc0IOkDCWc7iC%AHchiYtnhi#jhjc3MADPCZPziz zcf=0gpQ@^w)^%;a2&{HU$?xJfpD5x5*RJ*bW=PruB)Uv1-?2w*Fn*7FF7!MT^k|bO z|B7pmC~lsV)IseZ=lU{{He_WvBkI~ zf2rr0K^5@ft^i?xLJ#JP5X#d(&Ax~DEj_l#UiE)ok-9hH22AIK>E!RVN>1?lVv7($2qFKKBTQpV UEsYn!eEIvBnA0Rd{EeV)=MZyyU|D_5{W${%d!K89gjku=dGeB1`Ir(*!fD4OwT#DWZ?M{l{&O}l>nJG z1g<3Wjd&}|as;6xn;RU-+(P0N@k1HJ7-Jm>+4QhL<`^HohQJ5n7qLcV9w>u3n;sUe znR7@yOXdsjbBv$GstjcoS~Kr>pJBXfbAyAAW@-~FLzx$}=^o=9n;RUoqA8hAE#Nic z5kjYxw~5qFh^S>ZwP=}##{#4-+}}k#-lanL__pbYL!?0=7ia z4}>lGKtE0=OTC`M;c)yjJkRS>ljBBEN{xKqe?cqo{wTk93d^Kv`kf?66$HU6GNoi( zCqQNlnYos^;&}|ia0Q_U8QVILnPBqwEXyj0{K+6Y8;n28*w&#s!Q{(4&-Ww)sWbXJ zQ!+zLUP9uhCi8{ysf=wMotd&$Gbi*vF+P*AtwS|K%S4&cG6(dxMwSV?W`M~TTr+5w zD2hHH^CV+Cp-Cu?V{<};RZGTLRn!b^d;Fd4*!B!%3Q~6b7#XUmhNEL`TI%L-g_N1Y xl~LmQf%i9K*AGTZ6;@o(7^|+Z4u`{W2fuyPgbfVGwnK$>&B)QyTN1;&YhMo3# zTTm<(S5+#NlW;e`yY2gb0%p4e>bio&SDbS-_?+KEn8@?I7xvh=1%YNsqRntasZ{E# z*Xy@Q{uO?LN4eh%@9}<=vAs6FB`~WlgpX*paFRs3xZX((e1xar12_ZUFm?wqORY{c z^vOwjHBImZ4#RQJz$sXUKXlJn)kP<9%V39=ttB9^9MNl@feU{#0QWF{BOHc9<#M?- z6M+Ukz(er9-VyhVnptf%gAifhAbbhu;5%w!P#t7-Gb7T#RKozVn--S=wVklYt?>w);0qS>Y-q65>z8-ir?2U()R}g=jSnSAl863oDqU%T>|ZD`?a-t20p`! z@UCkbI0v7&#K3!a%tac=k#LI=y9D0|9;c7jcm@QSQ1S+3LdhGD2_+Y@8xZu#33%uU zR=MBC)i)4=Far$C^A)tFI^~3Ecp2Vu?Jyvy0||kD8wWe zv=s*%P%&rO6RGh9v6#icm^L`8 zp9%E;Is__KH2_s6u{~)08&Dl^Cgd@20-?87IRmCiKE_h6wAz^=6A1Jpbi*aBm=!a` zJSKL%)r^9w7{N;jzlPs!HV{AgGgaCrdIxlB!E~N}Y_N3RNfQQ|+Qr zZI=ZsNr%>yBr49s@NCNCJmXbyKwG(uTX3j0V3%4orT#4ouk`SRuk`%I06^= zHBolndpkS(>nxiPpePF8w1*TY6*ELR1nRoZ%CanCkk}kf(PKiJ>gQf(z&oaI0pVG& z?Z>)lng=@YIs-8{aJ?AdO&?y@fh-|@?qes~M-g9ojRzdKXuJvD^x-ufA_;s*(~}sl zJU<4wXwZg6LlbzHrrT8MJ%pR1K^qz!n*iCH!A8n@BgPA_@es}uE*jP1(N^M^1a_2A zM`1>wX`^%$!$zxc98g(mbRh;`91F&1Z~8W zQ}s<1-pPX~8pys&%qV~0w3XYel;F^v8s1Ap@RV3002ovPDHLkV1lEa*KGg* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/sym_keyboard_switch_onehanded_holo_dark.png b/app/src/main/res/drawable-mdpi/sym_keyboard_switch_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..defc2e09c3526cc37838a16169fc8fbe655e53fd GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJeV#6kAr*1S2@9N@Rq8x*6=+3gYx2Dzq|7XdV$+xSG<;o{#htu^;ALoXzkBelM zJTki-W#LQKRcLZCMq$VQR~280MPh+tOgUQt&Pi3kab2EmO6 z0&cR%LNhLU0)ecBNqk{2!7vkbd`?vK;`iIPq2^3=>%zKKU8x@qMb)`|&wu`^I(6@@ z>IoA{lqgXmBScXo>&9O7)?wQe7D|3_aB#u!@bEG0G|k zM@W3b7^Be(GAa}W%aBSQoA^fjN;1LO&)){^Q0d~7& z0d}{901#c^k_G7hzX&kjr7VD+CRh(PQ-u?=RI)(`0cg|3ZT1QKzhLLF!|cDA3lY*5 z0Dm{hY8-I|d+dF8@tsxQmQQd55TKXs5w$n|VT5^)`0bWcPy`TQF55G%Hh+j?gyXAK z8!V@w2qZwiOBP^FDL^SeDL^TJRked8Ke^0bh?0K)T%p{t1yI(Z?C0I_1&=vkf>!U!N} z0;I>DWsor>K$vB5Uksa#470!uIK2~v_{PW=L%jiRR1CAg5S)6&EeN;`x>5Wjfge~V z8Q=+A&ckV@<(V3CRt%p_r6d1=RWSHsc-gYa0CzYUn-C!Ehn57Kf&e?+_{EE$fWuWz z#yra}b;L%7S1qZ4&{X_j6#Kw3C{TVnA{-PE%PbJIIJ+=d^-lsbz_&OH7cH{@(7nHl zlQ3?1J{Y8YwOZ{!fb|f%W*Mf4$HW}SV!{-AUl0tAZL^ViySwrRP zT=J)|Mf9z&&TZIy0fKs^)(7DekpIUuUO;IEeFvy7%`aeI(C2Jj^0~Y08^IUH9)ws$ z0*5tXbG7=Q6(e04dck2$;|Wc(hiLyBzul^rvpi`!TPAS}h_`8?;_HJxan)<~AFwl6 zf6TQ1Ew+tzOLQyM$M-FpyakDLXxJK!{mWe4W_X|eW|N=CTZs}S3W=vkzI8s5ckM6$ O0000?OHo1yZh{Mg5O5(z zMbsEy_`n3C@rkSai2R7c?@U)|TXr;LY9^!1g+uq;?z;D!TV2&vJ+o$&?LW6vDpg_O zUn+e|r_tTea4vEU=R`A_!jy1m5iynuEIJ(J_Yds@Bw@R zqxcSTt=c|PHJ}#E_CgiksH_Ori8SXTRYAp#smTH!71zSH$QvkDQ#LM+K*inBk?>)^+M#GB|F0Jqa0hn z15dzduo*nIgaFV%j8z=(o9Gez!0-FaPK|!P;1)=L2K_GZ%KE>k z9lem&W98=zY5@i81+T4N0@MrZ%L4vpWdUUYQ!s+e1#^7AtmFkS7cXWyI|6p=+=}^e zy`%*|xB=ofZ4w213r^x|)Dl`&vI5j_czC##K#yX{6!;A|jtH&$Cl!FN*(3{SH^~C_ zn2-WwRCysm`b|VafgJ`!Fcs~reiOj&o@_R|mZQHP=mgur6B|eVQE&nrGNA>~xQa^e zu*sFo1^+_uZCtPP1UOP(@#T(wJNw%m<2~yTPJoPFND)YjESEF~d^a>k5(LCaIg)X| z?@RKB6F`7!0v(PeatX9a-=Y;`f`EJxRDd?MIvaiu9hrjJwv+fC4yULuhedH01O6v7J7V?-}#UcZ-+tPpSl)&&tDqZjH3 zcwT``@=OvEx#^UmwW)YMmuZ z6D`6*3&_17!8Hoiq=E%EJEgXnXi5z&KzL33y%ef&-%9mjBgsw^b}XnEW5n$XKKmpY zN#>DE8=wRx`e- zaqtQIetn(p)>4In6py?!iLhg04MeU&=$VOjaFZ?Y1=;$EP)6ooLz#SP3Q*TH5F)H8XiXX7Yq&qu|1B(vTJk1t-u@=tA*9r5meD zmsJb85Q`f{5EK{U!dewuHCkUFY0`>mo7OZb{{A!fhRZioADM3^Q^|qDH*@a2=luWY zJKyWxva${NpNrq`FL%_uRQeJO2Ji0Z=&0}N>T0B|xuZw`zN)RQZ8DKaoayW9o9XH4 zIf*S|-d9pmQBhH@R+;YX?5yqY@Bb9=H_=wPEv_K8q#--`w0B zr9_Sc_?>t>{%m!1^){0LDgw`k!{G;MKZ4K|t}oI{-_kQX)hnj&q6mTS0nl53Speh` zz~;#8kPxX#(gbG>mRx9GRgCBen=IHiE6Kt#Q_i zw<*b2vF~tawStNT0t?s<0ely~Rf>N~@%be)+BP$ub+JK!`=+q%)db+&duw1|V4m6O zA(fRG)2dh`FvQV82O#_K^(&|0Ej(ia`J;0kqPzOG=&qJH-cB zU=E{CFfZRPGT!SYO#tv)0scuMvvd3dhd=WF8SJYI%g62L(fC#+O5bMWwHZH^seLL^KA`KoOKS;vk6}666m#g9?-%?t-lP3>$U-#>JZS0Y`5RmiA-aGnr|2x z8Tqvs1W44Z^)oSJVGF%*N;6O)Nys;=`3%{=&%}_IXys+<9Hx8Ihi@~m4V7PJwM7zj zf_Om_Ltf$x<~n*n`=gs?a2qNDZ0=@BRHwB8>=o)VK%gU#SY4TIsWYQ3G1lH=mEW#} znep=$IgQ8TO%O< zx4a@U_!76fnQ|Sm|ZIgr)>10<9#NGhYM2ow-X4I zjgODlK;Qs}oF9}$C!1M7P0&uO4dFa9&KvlMvd$C_yelF>;3|ML0qS%jb6mXImwC&q zW2R1JY2~_FeZ|qP_IE&^rRFE}lAtKB(*I7h)zDjvSS&WAk9mMR4al>odgg-Deuw=7 zcD5&|_erM8ItFac_f6|2TCD*U)E7&p!+LawtAK7~;BVI#O@HQ#jQM!!h`?z;=2G+C c4Y`x$FCKg56rY#i_5c6?07*qoM6N<$f+C!BVE_OC literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_holo_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..def1f49bcc2994d4821b027e469ef3ba43f432c1 GIT binary patch literal 773 zcmV+g1N!`lP) zsAa%Sta;CYv-L~a(XC+i&)LXXrZaM8-`&RhG7`Sf5yrD6wYblWEMlV99}j4Km^3O zwjYT(1Dby*YLCT(q)opV@f_pT*n83Zu9G+xeKqD8dpXMdOdj?zMC)8M-|ph0ZPAyb zhiK;Y_&%EcK%)6iWSaj-3I@LuYP0WFcZj78fZ0q)Z61zc08}?2r+GM*0pLv-T}6(8 zMo#lkY(U@g=kgfW{69=&2L_aAl*D>!Xc&fJ7^li_aGkvTqJAi<00000NkvXXu0mjf DG`w#w literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..56d99459306045285ff4202e881a371f431603d0 GIT binary patch literal 878 zcmV-!1CjiRP)@O5|{IY(0`W7|v$1lYYN1e|FEM zT~sx(Jrhon6V>m)u{x1fU9{OVtUCt;`g%z@Rm8xYFS`| zEgYl4Xu9W0eK9*tiJ@)+OA#2`d0y+5p|`zvCvVqRVt4XHECBbg!Pao^wG`d+6!_vj zF(#I*1Q=pn9`x)z5R`!L#ZU6TT<%AM_rL~QILc-8q9rKTdlJjL*!>-ly$)gN0!@>k z6z)=k_Xv`J8x7ur`(?50z#CQ(MEI1F$O+y9j&Lv0u=k2k6-#ZD)qE8W7F3HCEm|B8 z_MAp*b4&4zFEY5zzQ~?=DRGNN<4Xw$N4uB<-TKSv%d%dg=5;xJYq(X*=>;)85i5fx z;5RfAv!P)RTeP8}7c1)-8!f$*4UIc)sk@;Gx0Dmz=GhIn@4aXV6d@=zaP;#(F=f5# zv4taCR~{uT{}YowSjYX5FWE3a4kyRfqYkGP2 zv3{HGq$#Fnx@TrhAoEWqvQE{%KDwr>dZt#ZP@%%3#7wt2!FRfPVwbsiE;aU>T zQ{n!TWV4h2?BDz=OMcnycHce`Xx&)A0hiSJrE8~QWEz{Bo5$$r z)s&ucB(^5cmEE22Ay*%u!8Td%fO(%sUR;$nP_0OpDTGy)B=6$cXG$bR6f$ zaO&p?+v3BC_%ezLz_xl{hZRFDO2B0CMy~UAyZuJwXSJ*bGRR71&(ReQO7K0LS{C3# z?5Hw9mV&9{V=|9JjYcEWd5dPVIlH{P+?LFqN#--3pDbT;gPNx#LNc#`jyz9`A$UDrfuCB%nbLK!Z;=N7MIBiZ+cgAT3 zGiIB#@xV7uGn)IxX?%ztr*j-=aDXgk)-y7cP2hoMnEODJaHL#HI#RL{W}XjTVq1b! zJyIqd>QD8n53**KKCyn&KoFw)L9eDc)boz0oI|}O?mI7?Y_?c(UAHkn7Y@Cu+E(EJ zERmZfmfF^95x@bLUR~F2DFHayv9A`Fv|e8Pmsg7_2wv_E?e0_rcDI4kXRp)%EUDd{ zbf1U;y6$eH?Gy?i;sXcGF0o^$0iCIR;E4RhG>Uz1gDm3#x*;~AKQYxF`bWMB6)HR& Z`~zY-C2b|Lz3~75002ovPDHLkV1j~|$YB5g literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_holo_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..76975aafc0b9b3578c8489bf94a4b9ec5640a7c5 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU}W@kaSW-5dwa`}>yUxSv5z`h z8X6w!6JF-dIilRrEnf14Z*FP9%V#T`KP>%{$T_VnXx8`tjv7nPeyE)gG|P$|Xb=O# zKi$)tI(xSE{0REhwP?ol)SatWz0x@zbMA5UrK>IXtKY9TiZjwH+GiN(r2Xe?z0GW) zPfMmdyH|YWI<06U{HW6N1*iO-r@tJzW*jYc&rkTV_|EpO=Y4VyIsJd+bNK(bB5<$Z zN9)ZGpKe)AEr`A^`%m%xcXiJFJ&myX7;k6>LX>p4bjB)FL(4{{* z>#Dpws*_zxrz9k2`)u{vu-$UiETNpde(lTl9$=?`kj_85?XljPGhK2ZzNf37%Q~lo FCIF2Ribenc literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..809c5e376e62ad336129496cdac4bd389e3b8eef GIT binary patch literal 372 zcmV-)0gL{LP);`PC!^=0zHpe3+^m*QER)*A##Y|doTmTPo=x||K)w~ zli^PS@6Eh0OhzLigb+fA7*tg?MqS!|2&ac^RucSREa1i_m^Jg*<<-(vPJ>^p8KVngwJ)HaE4 z(Z9$2v3{kNg542`%x& S2r>8o0000?seC#R3AVqo+}B2Yt`<&SMCR4 zLMDN8W=;~4(a10i!!Qg(2T>G_Q4V;!3eq&4W?8mCxkmkjzZVS&&hz|s7>1{=>(;0* z(Kh4#L;|5lB))Cib<;HOR8W5@isBA&n(+RjaN@7%%Ln4$`o4ce`xy-E@iAfuV?)C0 zy7uDl%d)({`!OFQ1|Ay{Pldj`7V%qS1M!#A#anFt1huh=N#ocLGqu_5sgeOOi1 zO&A+IH`r}gsFV18K28kY0ECi(XKny(vJDVBMCe?+2?8Rg-%R2MHxE>p*tU#r+)AY8 zPaOZSk*P6ZaT37}agw>gh5QnyQ_%++508^Gq2oyD3FG7r^>i~a=lw*JB+2KsiW9Hv lTE(OKV#_cL!!V5h$OlBw@*hLu(7ONt002ovPDHLkV1oT7usi?& literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_holo_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..197dcc5e1f559790ae6e8f4b4650e15524298b0b GIT binary patch literal 2041 zcmVid(?g%H_fE{7=DjmJ=gyuF{Fs?L=id4Ke&2h} zJ?GrVj2PkZcsw4D$K#10u~>+6_SR2-gjR}{fzbi`slH5kJpJMqg><{cH zb_m-anp5BqsIs^{MG7O8~YxmhG%&+2QcJOwLhm8)YWj z{tPQfz-VK-*KBz8PWcn>>gXC_1mJwTEcsHv)w0K4#|&GxVEkpKiQ z0p2zF1vp5#gK1ETY4rXG->qi5^)YC3Pym&` z(**NGx%df@uC0q&;Gh6aykBW@4+_O8$}Ce^JD$klpa3nrf8FFh*&|LUf6%%Q*#vyulLW`PALLZ{nErJ z37{rOiF?BYZGIsXX@U0S-`ZA+<>7Y>O43i}H=d3V?6z>QqER01*#v6}=ya zez!f$!C}fT!ST`QZ4@bh(9IQ3Q1%X9?=`{o{{IXt@*fi5XKXR$Z|8Lhc6?xw0jLJ| zQ+75shxZ#zeqY=WKp;W~&U|TdCnJ+HlzoYHTGH#6Ab>cD9Wy~P3;mu%P`PyZLP!MN zx}@@j{BTDAIl*4N3a3ulUS>f-?xOrm9YezPOA){o+z~*qM^C{aUBXuke^PdNEaT=o zFTfzdk!Bov9>>nuo@PO}18qjM%Xg!A0V)8FjKrZ^Olb$>yIHTn3s3=+#Bfx+89Q%# zn+4T^P1FMQyS)IFARgRkr+abLQz?XcDEkntoAp$Cya0nm%@7H_5$E=q!c!AM2jf)? zlq8%Npc1e*x2A&Y>WfLFnyODz!Kk*~chelBg?lbv^{h1uWG?Ko{6drxL zgqs2gYQaRD`@$3+sisMfR-=-9;jRFx1vsa<7bUe`aasUPQ_sZ7?@e(B<0#^^0O@J! zw@v;j-6-R(0D|Md7({s3Iq-cy$?vk`iVR_w zRI{Y7nBp$xbqVsHdLS}g&s^vV2t>HeCzcHhDZ}04|G}kTgKfH@*#X&L-Jd*-P;y<6cE8pA;^zS zaToOtB`N%RHlA?-aowSyv}Y|{x^x=BzHf@ViK5!*{)L11vyPpk4zq5-9(Gv-g6&k$ z3f|PNcck9VcKmo0f7lD0NUo21)lqG(!^a8R^YB37dXy-=bTS`aF>H=;M9cV4OVq9CGz;71ch zK}AsU1HT$8#I&bLn>N;7=8rgk#Nh8aGaJ@%&&d(#?4ImC@UY#P_sqQSlbPAsnb}q< zB}$YiQDPHO6p1~epI3O)YPIUd#>RM~(KyKUAor03D^Y2-oL)pZY>c@8&x;7PMA}p- zQl;5?ZbXn@5at@Z>i8#VACR}lw=WcEAv z(m2$E{eFJ;E@^+jI$VY4Nz-WFy&|c#5X2V|!$ox~^7=aw2yt$}{&`~u@ubZ< z`EOIkpkHs-K!YqnEGU>{@T8s9;M}1=BV51r%81LkNEsu3y+?f)5DUgtbK#`pv?SXsY z5bR6(lq-Z52)hBswP#5C0{#T&xqq1SoxX3mKuCeG=|_w?($0A{E2Q6tP1W}=bA%Fz z{82<0=KdQmUsM^d3v@0*>S9pySxvm1MZu=yewi2TCXos(FD@k@@G_d#n?ca0l-z#e}nhn=s(_=izd+ChTZ-29f$+| zj@C4tY(+&ANG<5g6enY@lm9u+4kv!Il|WC?JymWyfu^z9*MUI$OvVCfZ|WuU?*;f| z(AvnGiQGosRszB2T)xUpvr%0SVRMM*OE9nH{okBTzFqV*}PWrmOD#@|31APd5JVH*Kgx`LT^}7fv85*-d39jSbj$G+3|Z!W4pJ#?WdV^3W+IS|wPhJ>HOvih_PjM_S)Pmj%2(-)hJqRK@vp!~8 z&#begTD1;~KB(62`yK>tX017qK0?V`H`8m+m3Va_GvI)hW9N-syYZdOk{X~t%;X7{ zgqvC4W$gQz?_`$LXH`cs>s~S3%vx*0S_a8WH~z_bGS4$(wNYvpUG~mCss-*o2WxYkY(<Mcdi4rBYJ^ltTAp?Ut46;=K0000< KMNUMnLSTYETHm<< literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_light.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_light.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3b360ff3f5ee5f20b3abcd3085f65a707050b8 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ad3ef015482124c8fe8df6936052088c6b83b6fb GIT binary patch literal 1214 zcmV;v1VQ_WP)I)bHR|tk1xnlJhKt%$E5Ck5Ahd6P5%QPOw_WW%* zBK?v{$a4D4%-43dr|r(nWMpJyWMpLAR*Xg?`%!1a;EKWF(3=Z_$z*b8JRZxRqx*eK zIPMBpub^lP2V9oFt&tPCje5j01w`lP=O-5z7iVIp9qn*uXXiDES^ll{ewx}D zIgy*?Zw=IjuqcXSv7-+5O@etN!923uT>%%IaC`hUv14)~H_P1`D$uDCAGWZcV!M*a zTS@4lvDiNP!6Wt0b_LLL3JbX{opzNo_G9)? zDNY@nBSu{Uloyl91oAEdwMbG2LPMPqw%%8yk~r(iY5ib(#6nD^c6KqDOrYQ*P(GWb z<`m%}Pc7J#_KRH#H*IuUZ7P@L#}0^rSZsS0$t@<62*g`?@Wr!~0Cm9z?u@$dQJ%eL z+t-0M(slz553jQ?#1QHLoo>@zfY<^ZLL3suL8kyBQ6Fp~)TlN2|9mKcDrg7H!=YSP zgcsXlbkl1TVyRo}=Z$_5_2 z=C(NP|Ef?DiF!frGIDx}@3F?}np-pw0L3*`ASt;sGBPqUGBPqUGBPqU{!`qFm({KT=ynI^R%}V6+U{VZ zY`Eb#Jvf{MgKlnWD~sXf>QDreTQvwQ`w z!ty1~3OkTzClp7^lN$KcdKjAWg9|jRNfbrCIV?|V;1l1(pt0Ea1{cVQ6kJTE!uaYU zuuhyo1;V_G$y88r%8Ni7kIx1b2)nYFw4AX(2Y42NO>A(1FgM+TFSvaGC*1f@U)Fz> zMHeXlBr^n^<0lZJdPj@>quymWJ${;6oFDa$F1K9s&%&$Fo1lakTroHtVsd3 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_light.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_light.png new file mode 100644 index 0000000000000000000000000000000000000000..fdd22dcf7a6333bbf620a625855780375ea7c35a GIT binary patch literal 1322 zcmV+_1=aeAP)NklY!O5QZ1Y>yPyzQsfg534#R6!9H33l0UR-dwuhd@PC3sA`y{05jh}`j4&6j<`U&- z?m2}$7%U)4J?k22TfP>|o~oW!DgdaNY8S1~$ajgCZg|CXgReV?z$Uiw!TM!K zlLCDaC;t#Go;9WA^AGFm>qqnR^WEv`X-iufv$L};@$3HP z=H@GGS^Mh47xmG8UavqZ&XA<2>)tuFf}CB*_C=Q=J)h*zI=j%6HTBg}}9lBYcO->9X}f^WUx1br&|1bqe%8YZFMalzecM z^{dMGC_G2jY6Cr!2C5zmra+UxISsWlg zTv!6~|LNM=+6%e+l-@*gEgWze?lWv+d)yKx28rd7#B>s>9yBUYbv)}iNfH&u4|}>4 z2xxV6^{E8-qy2tSz#+jsO^L*9{H55u=X<9lmQV$}5sDIVw;~~vFIW;fb1I7im>~xT z2Z;0nZu$F~AH-Lj1Vv*C4gw*mk~gX>D;MB~6K-sbTUJ*VB+D`h*%xqUCFF>Rh=_=Y zh=_=Yh=_;?C+dD!ZMWNB@5AaPl{=nXiE>BL;!;vov<0&efy~X#jS6NW%yTW6(VT3q zU{eXs&7@1Nlt~G!ibzQ{aesf`mRt|9iESSQEx8sc+S3lE9YyW zDi2rs@IuOg(Q@-S{z5yruH!EfbY{N8r$&yy7?E-hP>~NvnpKun7IZt&<&YM(tbO&N znFCbgMn81~uS`Pr1;_iaq503b#9gCNf%@?fXZB!9$78@bgY_N{lIIM*)6dyV)&V!O663DTWL;2kzK)k!(hj6Ila@0ST$@0j(YQc~6S~}Zz|E}!lmVRj;OVujtZzXD z3h+wiqmE}i$p>)33Ae-E*g-78Udg0p65yrYlTZaJIP|676NeqIK`g;u>TSi>!XqLg gA|fIpBECud3$QikBFuwDPyhe`07*qoM6N<$f)h-L$N&HU literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_holo_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_holo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0afe49c60d05b7772428851ee5c888373da9b3b8 GIT binary patch literal 527 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V7%t(;uum9_x6sx-(drhhL49% z91saja@ZjFpx}(b0nUW92H^t@4HJu>@VPV`kyqRpvBzDwLnm;~v2&Y`e4ngSnqh5Y z9dB(i*9T}M0<>s#IbC11Mzpp^@a2Kkt8T4%{VU|!KAU;dQeWEht~{~fdg_Ptb34T& z`8V~Y3SYa?a^%aC*B?@ETsQg>{{8XBn=I>ELT0_mF;U-d{byPnXM2v5(%d&TzbC){ zaZXVF%)~P%&*i^MUHt9K?TP>6UT7*B|;_d4hfeiN^d`{ z=5i^9^Ov@nUCY{vcxUILBiAp8R6X-B?~*y{(r4t*XXMz|GjTD`gvCA+l#`!mFh9`{ zesV&>@)U#RDHcm3GX?iMi$qQ{Sw2$RE5cN~Wc$i_A$OKZ#XIzs{BRdF&suJ*?(Uyg z_DS-e#4MSYQ!o6BJRV*q@z2A`^3wj*mJgmtU+~rVaaauz_6!Vv{O2!fTc%SRoO=)? N?CI*~vd$@?2>?Z@>_`9r literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ac84f4a37e058291ab9614f6f3aeafe718a3a20e GIT binary patch literal 560 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_dark.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f779f37439a68ffd7d47b3a3373b8432ff217b75 GIT binary patch literal 2123 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 F{0q|!bmRa4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..37aaada8619ecf2c157dedb42a62744f66f55d0b GIT binary patch literal 1581 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5612928f2defc6d09c814ae01da6913bce7566b9 GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>V0`51;uum9_x6sj*AWMSwucv| zHc1;c*=t{PefQMOk^h0$L2iqtY}@WdKlYzdEb2&@TH>4`p>BJ5Zq|p|1qud}byn@# z&&hK#g$ZaR93-q*wQ7sml51ZilrOcJ`)CNEGUz@K?U#)J=Qs$(mS5|iS)b(fe-^v>J9>%`vQB1kiEt|W= z?2h^U>)U_7G4K14=$GR5rseE={)d5Vr8>{owqJKzV!2Ux8s9VDSB~c_ClrStdaZb= z;l@kz_}5{x>Q$bvZM*K&a^l9t*oE5hv+F%RPv7G5X2Yjog|Z$2>$VQr_0|LieVzjj z`c3O%n*U2R^)JvAoHF4yXLTNjb6rdP(sz znW*=bDBSwI;tsAmhjU ZI)>omp1U99J8uAqd%F6$taD0e0s!()=;r_c literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_light.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_light.png new file mode 100644 index 0000000000000000000000000000000000000000..b1270b3767b1b39f72184bcfe16dfcb8276cf439 GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VDj*EaSW-5dwb`+7gM0f@sC_3 z3ojTI2yX4pTD!Qf>;H4xn#OBeSE!#T<*sguaoPH%m5E!6^Ono=7UrUfIm@i?HSUw& zq49Eu#q&G&d5)Yp1~M5A8t$J;G1|2)_34@O6AX0g)`s2A-x?LZ@BRE|pMTDc>9bqY zD^k5ZZhil*yYI3EST5J?ueX%o;WAN7wE7wKr)X!*^}Ox(Q)*vLaWLx{J^Bj zH*a1(X+Juh<5%3TI4Ogv7FO5QUX&-^bb7N#N9=x%)8?CdzSyjH5Y~wlvrhXcK3jpe zYRYxtb$vQNG|SE`onLA-xBMpSWVgkI3di$i?Qic0J9;kZWA)y9K3(?fLbTkAH?Ri7#u~A8?Orhkg2_1zd+)WJ@n>sDL7$0e+Y-M5i;msJn>2Gj}3i_{I4UF?{YqToVDue ttC@awN8^oio!Z#V7~#>(!0@2{7t`uz%M(PV2`>Z*d%F6$taD0e0st5Y8E60i literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/main_keyboard_frame.xml b/app/src/main/res/layout/main_keyboard_frame.xml index 4ae685f25..581245e36 100644 --- a/app/src/main/res/layout/main_keyboard_frame.xml +++ b/app/src/main/res/layout/main_keyboard_frame.xml @@ -37,9 +37,30 @@ - + android:layout_height="wrap_content" + android:layoutDirection="ltr" > + + + + + + + + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index db069751e..88a978d0b 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -290,6 +290,9 @@ + + + diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index 240dc243e..b52568099 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -27,6 +27,9 @@ 8.0dp + + 86% + 205.6dp diff --git a/app/src/main/res/values/keyboard-icons-holo.xml b/app/src/main/res/values/keyboard-icons-holo.xml index c6d956096..ce1f6ee26 100644 --- a/app/src/main/res/values/keyboard-icons-holo.xml +++ b/app/src/main/res/values/keyboard-icons-holo.xml @@ -41,5 +41,8 @@ @drawable/sym_keyboard_clipboard_holo_dark @drawable/sym_keyboard_clipboard_holo_dark @drawable/sym_keyboard_clear_clipboard_holo_dark + @drawable/sym_keyboard_start_onehanded_holo_dark + @drawable/sym_keyboard_stop_onehanded_holo_dark + @drawable/sym_keyboard_switch_onehanded_holo_dark diff --git a/app/src/main/res/values/keyboard-icons-lxx-dark-parent.xml b/app/src/main/res/values/keyboard-icons-lxx-dark-parent.xml index fdc0f8989..73ea197e7 100644 --- a/app/src/main/res/values/keyboard-icons-lxx-dark-parent.xml +++ b/app/src/main/res/values/keyboard-icons-lxx-dark-parent.xml @@ -46,5 +46,8 @@ @drawable/sym_keyboard_clipboard_lxx_dark @drawable/sym_keyboard_clipboard_lxx_dark @drawable/sym_keyboard_clear_clipboard_lxx_dark + @drawable/sym_keyboard_start_onehanded_lxx_dark + @drawable/sym_keyboard_stop_onehanded_lxx_dark + @drawable/sym_keyboard_switch_onehanded_lxx_dark diff --git a/app/src/main/res/values/keyboard-icons-lxx-light-parent.xml b/app/src/main/res/values/keyboard-icons-lxx-light-parent.xml index 0ad76be05..220e6b2e9 100644 --- a/app/src/main/res/values/keyboard-icons-lxx-light-parent.xml +++ b/app/src/main/res/values/keyboard-icons-lxx-light-parent.xml @@ -46,5 +46,8 @@ @drawable/sym_keyboard_clipboard_lxx_dark @drawable/sym_keyboard_clipboard_lxx_light @drawable/sym_keyboard_clear_clipboard_lxx_light + @drawable/sym_keyboard_start_onehanded_lxx_light + @drawable/sym_keyboard_stop_onehanded_lxx_light + @drawable/sym_keyboard_switch_onehanded_lxx_light diff --git a/app/src/main/res/xml/key_styles_settings.xml b/app/src/main/res/xml/key_styles_settings.xml index 32bbad3fe..b433c2d70 100644 --- a/app/src/main/res/xml/key_styles_settings.xml +++ b/app/src/main/res/xml/key_styles_settings.xml @@ -35,36 +35,36 @@ latin:languageSwitchKeyEnabled="true" > + latin:styleName="settingsMoreKeysStyle" + latin:keyLabelFlags="hasPopupHint" + latin:additionalMoreKeys="!text/keyspec_settings,!text/keyspec_clipboard_normal_key,!text/keyspec_start_onehanded_mode" + latin:backgroundType="functional" /> + latin:styleName="settingsMoreKeysStyle" + latin:keyLabelFlags="hasPopupHint" + latin:additionalMoreKeys="!text/keyspec_settings,!text/keyspec_clipboard_normal_key,!text/keyspec_emoji_normal_key,!text/keyspec_start_onehanded_mode" + latin:backgroundType="functional" /> + latin:styleName="settingsMoreKeysStyle" + latin:keyLabelFlags="hasPopupHint" + latin:additionalMoreKeys="!text/keyspec_settings,!icon/language_switch_key|!code/key_language_switch,!text/keyspec_clipboard_normal_key,!text/keyspec_start_onehanded_mode" + latin:backgroundType="functional" /> diff --git a/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml b/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml index 7a9964ca1..3ebd4c1dc 100644 --- a/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml @@ -262,6 +262,7 @@ !icon/emoji_normal_key|!code/key_emoji !icon/clipboard_action_key|!code/key_clipboard !icon/clipboard_normal_key|!code/key_clipboard + !icon/start_onehanded_mode_key|!code/key_start_onehanded !string/label_go_key !string/label_send_key !string/label_next_key From a88b661ec70540549884d0ac7ff88b36462b99ab Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Sun, 20 Feb 2022 16:18:19 +0100 Subject: [PATCH 02/11] Added ellipsis hint to comma key --- app/src/main/res/xml/key_comma.xml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/xml/key_comma.xml b/app/src/main/res/xml/key_comma.xml index a1da51713..ae80b474a 100644 --- a/app/src/main/res/xml/key_comma.xml +++ b/app/src/main/res/xml/key_comma.xml @@ -29,27 +29,31 @@ latin:keySpec="q" latin:moreKeys="!text/morekeys_q,%" latin:backgroundType="normal" - latin:keyStyle="settingsMoreKeysStyle" /> + latin:keyStyle="settingsMoreKeysStyle" + latin:keyHintLabel="⋯" /> + latin:keyStyle="settingsMoreKeysStyle" + latin:keyHintLabel="⋯" /> + latin:keyStyle="settingsMoreKeysStyle" + latin:keyHintLabel="⋯" /> + latin:keyStyle="settingsMoreKeysStyle" + latin:keyHintLabel="⋯" /> From be7521c39d6810c52b889c63348682f49a827051 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Sun, 20 Feb 2022 16:19:31 +0100 Subject: [PATCH 03/11] Moved default clipboard history retention time to common config --- app/src/main/res/values/config-common.xml | 3 +++ app/src/main/res/values/config.xml | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values/config-common.xml b/app/src/main/res/values/config-common.xml index e2b6020a7..0de99ccbe 100644 --- a/app/src/main/res/values/config-common.xml +++ b/app/src/main/res/values/config-common.xml @@ -24,6 +24,9 @@ look at input history to suggest a hopefully helpful suggestions for the next word? --> true + + 10 + 100 1100 diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index b52568099..dde903c5c 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -22,9 +22,6 @@ false - - 10 - 8.0dp From d27659de4f46e038659101bbca9f3b822d6b6291 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Sun, 20 Feb 2022 19:14:50 +0100 Subject: [PATCH 04/11] Fixed CI not signing built apk --- .github/workflows/android-build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml index df1ffa53c..60c3a5ab3 100644 --- a/.github/workflows/android-build.yml +++ b/.github/workflows/android-build.yml @@ -25,13 +25,13 @@ jobs: run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build + run: ./gradlew assembleDebug - - name: Upload our APK + - name: Upload APK uses: actions/upload-artifact@v2.2.0 with: name: APK - path: app/build/outputs/apk/release/app-release-unsigned.apk + path: app/build/outputs/apk/debug/app-debug.apk - name: Upload lint report uses: actions/upload-artifact@v2.2.0 From 1b1dc96a3defcaf95bfdf38350de13198d9ec853 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Mon, 21 Feb 2022 13:19:47 +0100 Subject: [PATCH 05/11] Made keyboard layout aware of one-handed mode (e.g. hides one-handed key when one-handed mode is enabled) --- .../inputmethod/keyboard/KeyboardId.java | 2 + .../keyboard/KeyboardLayoutSet.java | 6 ++ .../keyboard/KeyboardSwitcher.java | 4 +- .../keyboard/internal/KeyboardBuilder.java | 7 +- .../keyboard/internal/KeyboardTextsTable.java | 4 +- app/src/main/res/values/attrs.xml | 1 + .../res/xml-sw600dp/key_styles_common.xml | 2 +- app/src/main/res/xml/key_styles_common.xml | 2 +- app/src/main/res/xml/key_styles_settings.xml | 74 ++++++++++++++----- .../values/donottranslate-more-keys.xml | 1 + 10 files changed, 81 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java index 8be6c6281..d994bc5df 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java @@ -85,6 +85,7 @@ public final class KeyboardId { public final String mCustomActionLabel; public final boolean mHasShortcutKey; public final boolean mIsSplitLayout; + public final boolean mOneHandedModeEnabled; private final int mHashCode; @@ -103,6 +104,7 @@ public final class KeyboardId { ? mEditorInfo.actionLabel.toString() : null; mHasShortcutKey = params.mVoiceInputKeyEnabled; mIsSplitLayout = params.mIsSplitLayoutEnabled; + mOneHandedModeEnabled = params.mOneHandedModeEnabled; mHashCode = computeHashCode(this); } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java index 5c71497b8..c31da5e12 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java @@ -122,6 +122,7 @@ public final class KeyboardLayoutSet { boolean mNumberRowEnabled; boolean mLanguageSwitchKeyEnabled; boolean mEmojiKeyEnabled; + boolean mOneHandedModeEnabled; RichInputMethodSubtype mSubtype; boolean mIsSpellChecker; int mKeyboardWidth; @@ -351,6 +352,11 @@ public final class KeyboardLayoutSet { return this; } + public Builder setOneHandedModeEnabled(boolean enabled) { + mParams.mOneHandedModeEnabled = enabled; + return this; + } + // Super redux version of reading the script ID for some subtype from Xml. static int readScriptId(final Resources resources, final InputMethodSubtype subtype) { final String layoutSetName = KEYBOARD_LAYOUT_SET_RESOURCE_PREFIX diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java index aa15605f6..e46d85d2e 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardSwitcher.java @@ -129,10 +129,12 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { builder.setEmojiKeyEnabled(settingsValues.mShowsEmojiKey); builder.setSplitLayoutEnabledByUser(ProductionFlags.IS_SPLIT_KEYBOARD_SUPPORTED && settingsValues.mIsSplitKeyboardEnabled); + final boolean oneHandedModeEnabled = settingsValues.mOneHandedModeEnabled; + builder.setOneHandedModeEnabled(oneHandedModeEnabled); mKeyboardLayoutSet = builder.build(); try { mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState, - settingsValues.mOneHandedModeEnabled); + oneHandedModeEnabled); mKeyboardTextsSet.setLocale(mRichImm.getCurrentSubtypeLocale(), mThemeContext); } catch (KeyboardLayoutSetException e) { Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause()); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.java index bf5ed81ec..b3c3189e1 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardBuilder.java @@ -700,13 +700,16 @@ public class KeyboardBuilder { final boolean countryCodeMatched = matchCountryCodes(caseAttr, locale); final boolean splitLayoutMatched = matchBoolean(caseAttr, R.styleable.Keyboard_Case_isSplitLayout, id.mIsSplitLayout); + final boolean oneHandedModeEnabledMatched = matchBoolean(caseAttr, + R.styleable.Keyboard_Case_oneHandedModeEnabled, + id.mOneHandedModeEnabled); final boolean selected = keyboardLayoutSetMatched && keyboardLayoutSetElementMatched && keyboardThemeMacthed && modeMatched && navigateNextMatched && navigatePreviousMatched && passwordInputMatched && clobberSettingsKeyMatched && hasShortcutKeyMatched && numberRowEnabledMatched && languageSwitchKeyEnabledMatched && emojiKeyEnabledMatched && isMultiLineMatched && imeActionMatched && isIconDefinedMatched && localeCodeMatched && languageCodeMatched && countryCodeMatched - && splitLayoutMatched; + && splitLayoutMatched && oneHandedModeEnabledMatched; if (DEBUG) { startTag("<%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s>%s", TAG_CASE, @@ -748,6 +751,8 @@ public class KeyboardBuilder { "languageCode"), textAttr(caseAttr.getString(R.styleable.Keyboard_Case_countryCode), "countryCode"), + booleanAttr(caseAttr, R.styleable.Keyboard_Case_oneHandedModeEnabled, + "oneHandedModeEnabled"), selected ? "" : " skipped"); } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java index a3ce4246a..ba489b913 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/KeyboardTextsTable.java @@ -261,6 +261,7 @@ public final class KeyboardTextsTable { /* 177: 0 */ "keyspec_clipboard_action_key", /* 178: 0 */ "keyspec_clipboard_normal_key", /* 179: 0 */ "keyspec_start_onehanded_mode", + /* 180: 0 */ "keyspec_language_switch", }; private static final String EMPTY = ""; @@ -489,6 +490,7 @@ public final class KeyboardTextsTable { /* keyspec_clipboard_action_key */ "!icon/clipboard_action_key|!code/key_clipboard", /* keyspec_clipboard_normal_key */ "!icon/clipboard_normal_key|!code/key_clipboard", /* keyspec_start_onehanded_mode */ "!icon/start_onehanded_mode_key|!code/key_start_onehanded", + /* keyspec_language_switch */ "!icon/language_switch_key|!code/key_language_switch", }; /* Locale af: Afrikaans */ @@ -4251,7 +4253,7 @@ public final class KeyboardTextsTable { private static final Object[] LOCALES_AND_TEXTS = { // "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */ - "DEFAULT", TEXTS_DEFAULT, /* 180/180 DEFAULT */ + "DEFAULT", TEXTS_DEFAULT, /* 181/181 DEFAULT */ "af" , TEXTS_af, /* 7/ 13 Afrikaans */ "ar" , TEXTS_ar, /* 55/110 Arabic */ "az" , TEXTS_az, /* 11/ 18 Azerbaijani */ diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 88a978d0b..1cb096ef0 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -515,6 +515,7 @@ + diff --git a/app/src/main/res/xml-sw600dp/key_styles_common.xml b/app/src/main/res/xml-sw600dp/key_styles_common.xml index f7f5270d5..d20e9739e 100644 --- a/app/src/main/res/xml-sw600dp/key_styles_common.xml +++ b/app/src/main/res/xml-sw600dp/key_styles_common.xml @@ -100,7 +100,7 @@ latin:backgroundType="functional" /> diff --git a/app/src/main/res/xml/key_styles_common.xml b/app/src/main/res/xml/key_styles_common.xml index d2b93ed13..aea8585ea 100644 --- a/app/src/main/res/xml/key_styles_common.xml +++ b/app/src/main/res/xml/key_styles_common.xml @@ -126,7 +126,7 @@ latin:backgroundType="functional" /> diff --git a/app/src/main/res/xml/key_styles_settings.xml b/app/src/main/res/xml/key_styles_settings.xml index b433c2d70..2d6ec6f72 100644 --- a/app/src/main/res/xml/key_styles_settings.xml +++ b/app/src/main/res/xml/key_styles_settings.xml @@ -20,52 +20,92 @@ + > + > + latin:backgroundType="functional"/> + latin:emojiKeyEnabled="true"> + latin:backgroundType="functional" + latin:additionalMoreKeys="!text/keyspec_settings,!text/keyspec_clipboard_normal_key"/> + latin:emojiKeyEnabled="false"> + latin:backgroundType="functional" + latin:additionalMoreKeys="!text/keyspec_settings,!text/keyspec_clipboard_normal_key,!text/keyspec_emoji_normal_key"/> + latin:emojiKeyEnabled="true"> + latin:backgroundType="functional" + latin:additionalMoreKeys="!text/keyspec_settings,!text/keyspec_clipboard_normal_key,!text/keyspec_language_switch"/> + + + + + + + + + + + + + latin:backgroundType="functional" + latin:additionalMoreKeys="!text/keyspec_settings,!text/keyspec_clipboard_normal_key,!text/keyspec_start_onehanded_mode,!text/keyspec_language_switch,!text/keyspec_emoji_normal_key"/> diff --git a/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml b/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml index 3ebd4c1dc..d26383e20 100644 --- a/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml +++ b/tools/make-keyboard-text/src/main/resources/values/donottranslate-more-keys.xml @@ -263,6 +263,7 @@ !icon/clipboard_action_key|!code/key_clipboard !icon/clipboard_normal_key|!code/key_clipboard !icon/start_onehanded_mode_key|!code/key_start_onehanded + !icon/language_switch_key|!code/key_language_switch !string/label_go_key !string/label_send_key !string/label_next_key From 500c8ebd70c4eead8f66eeb071b17fbfa4e7de24 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Mon, 28 Feb 2022 13:17:22 +0100 Subject: [PATCH 06/11] Fixed AOSP bug in additional keys parsing --- .../openboard/inputmethod/keyboard/internal/MoreKeySpec.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java index c83df3beb..733786fca 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/internal/MoreKeySpec.java @@ -294,7 +294,7 @@ public final class MoreKeySpec { // Append remained additional more keys to the tail of more keys. out = CollectionUtils.arrayAsList(moreKeys, 0, moreKeysCount); for (int i = additionalIndex; i < additionalCount; i++) { - out.add(additionalMoreKeys[additionalIndex]); + out.add(additionalMoreKeys[i]); } } if (out == null && moreKeysCount > 0) { From 2030d828544fa922252974d6ef2260cdb484e1c4 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Mon, 28 Feb 2022 13:18:10 +0100 Subject: [PATCH 07/11] Reverted ellipsis hint on comma key --- app/src/main/res/xml/key_comma.xml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/xml/key_comma.xml b/app/src/main/res/xml/key_comma.xml index ae80b474a..a1da51713 100644 --- a/app/src/main/res/xml/key_comma.xml +++ b/app/src/main/res/xml/key_comma.xml @@ -29,31 +29,27 @@ latin:keySpec="q" latin:moreKeys="!text/morekeys_q,%" latin:backgroundType="normal" - latin:keyStyle="settingsMoreKeysStyle" - latin:keyHintLabel="⋯" /> + latin:keyStyle="settingsMoreKeysStyle" /> + latin:keyStyle="settingsMoreKeysStyle" /> + latin:keyStyle="settingsMoreKeysStyle" /> + latin:keyStyle="settingsMoreKeysStyle" /> From 53a904af1e81f6bac7d37f8fd70f3a3128af0512 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Tue, 1 Mar 2022 12:13:03 +0100 Subject: [PATCH 08/11] Added better one-handed width for large screen devices --- .../dslul/openboard/inputmethod/latin/utils/ResourceUtils.java | 2 +- app/src/main/res/values-sw600dp/config.xml | 3 +++ app/src/main/res/values/config.xml | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java index ecf9df1e0..cfb517987 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/utils/ResourceUtils.java @@ -185,7 +185,7 @@ public final class ResourceUtils { public static int getKeyboardWidth(final Resources res, final SettingsValues settingsValues) { final int defaultKeyboardWidth = getDefaultKeyboardWidth(res); if (settingsValues.mOneHandedModeEnabled) { - return (int) res.getFraction(R.fraction.config_one_handed_mode_width_ratio, + return (int) res.getFraction(R.fraction.config_one_handed_mode_width, defaultKeyboardWidth, defaultKeyboardWidth); } return defaultKeyboardWidth; diff --git a/app/src/main/res/values-sw600dp/config.xml b/app/src/main/res/values-sw600dp/config.xml index 4283ccb2a..f79ed0fa0 100644 --- a/app/src/main/res/values-sw600dp/config.xml +++ b/app/src/main/res/values-sw600dp/config.xml @@ -22,6 +22,9 @@ 40.0dp + + 76% + 302.4dp diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index dde903c5c..6ab1d0e20 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -25,7 +25,7 @@ 8.0dp - 86% + 86% From ece6a8a3e1113396ae7c1bb86d01ea005e0eae2c Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Tue, 1 Mar 2022 12:34:03 +0100 Subject: [PATCH 09/11] Fixed one-handed mode buttons appearance --- .../dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt | 3 ++- app/src/main/res/layout/main_keyboard_frame.xml | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt b/app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt index 8aa4cb942..20780e305 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/KeyboardWrapperView.kt @@ -63,8 +63,9 @@ class KeyboardWrapperView @JvmOverloads constructor( switchOneHandedModeBtn.visibility = if (oneHandedModeEnabled) VISIBLE else GONE } + @SuppressLint("RtlHardcoded") private fun updateSwitchButtonSide() { - switchOneHandedModeBtn.scaleX = if (oneHandedGravity == Gravity.RIGHT) -1f else 1f + switchOneHandedModeBtn.scaleX = if (oneHandedGravity == Gravity.LEFT) -1f else 1f } override fun onClick(view: View) { diff --git a/app/src/main/res/layout/main_keyboard_frame.xml b/app/src/main/res/layout/main_keyboard_frame.xml index 581245e36..fe34aef42 100644 --- a/app/src/main/res/layout/main_keyboard_frame.xml +++ b/app/src/main/res/layout/main_keyboard_frame.xml @@ -53,12 +53,16 @@ android:id="@+id/btn_stop_one_handed_mode" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:padding="8dp" + android:scaleType="fitCenter" style="?attr/suggestionWordStyle" /> From 9cb005f9bcad2f7eee4e39ab459575c2f6d70938 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Tue, 1 Mar 2022 12:39:12 +0100 Subject: [PATCH 10/11] Fixed clipboard key on tablets --- app/src/main/res/layout/suggestions_strip.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/layout/suggestions_strip.xml b/app/src/main/res/layout/suggestions_strip.xml index d5a4cfbc9..76219cd29 100644 --- a/app/src/main/res/layout/suggestions_strip.xml +++ b/app/src/main/res/layout/suggestions_strip.xml @@ -56,7 +56,6 @@ From 02b0138313c4cb85fdce09f2fb6028e9e0473173 Mon Sep 17 00:00:00 2001 From: "pdroidandroid@gmail.com" Date: Tue, 1 Mar 2022 12:56:55 +0100 Subject: [PATCH 11/11] Fixed emoji key appearance on tablets --- app/src/main/res/xml/key_emoji.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/xml/key_emoji.xml b/app/src/main/res/xml/key_emoji.xml index 6d7fc7030..2d56c90a1 100644 --- a/app/src/main/res/xml/key_emoji.xml +++ b/app/src/main/res/xml/key_emoji.xml @@ -32,7 +32,6 @@