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 000000000..5575ae649 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_holo_dark.png differ 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 000000000..3454ccd33 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_light.png b/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_light.png new file mode 100644 index 000000000..e45c25ee2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_start_onehanded_lxx_light.png differ 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 000000000..ee2b35a7b Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_holo_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_dark.png new file mode 100644 index 000000000..2e08a09da Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_light.png b/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_light.png new file mode 100644 index 000000000..ac8a933a0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_stop_onehanded_lxx_light.png differ 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 000000000..e4081cd38 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_holo_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_dark.png new file mode 100644 index 000000000..a1e67f662 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_light.png b/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_light.png new file mode 100644 index 000000000..ff5b88b98 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_switch_onehanded_lxx_light.png differ diff --git a/app/src/main/res/drawable-mdpi/sym_keyboard_start_onehanded_holo_dark.png b/app/src/main/res/drawable-mdpi/sym_keyboard_start_onehanded_holo_dark.png new file mode 100644 index 000000000..69e837ff6 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sym_keyboard_start_onehanded_holo_dark.png differ diff --git a/app/src/main/res/drawable-mdpi/sym_keyboard_stop_onehanded_holo_dark.png b/app/src/main/res/drawable-mdpi/sym_keyboard_stop_onehanded_holo_dark.png new file mode 100644 index 000000000..77b19dcff Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sym_keyboard_stop_onehanded_holo_dark.png differ 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 000000000..defc2e09c Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sym_keyboard_switch_onehanded_holo_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_holo_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_holo_dark.png new file mode 100644 index 000000000..4e52daf80 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_holo_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_dark.png new file mode 100644 index 000000000..4b3089b02 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_light.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_light.png new file mode 100644 index 000000000..fa6ec548e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_start_onehanded_lxx_light.png differ 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 000000000..def1f49bc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_holo_dark.png differ 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 000000000..56d994593 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_light.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_light.png new file mode 100644 index 000000000..3b20ff012 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_stop_onehanded_lxx_light.png differ 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 000000000..76975aafc Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_holo_dark.png differ 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 000000000..809c5e376 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_light.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_light.png new file mode 100644 index 000000000..760749426 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_switch_onehanded_lxx_light.png differ 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 000000000..197dcc5e1 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_holo_dark.png differ diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_dark.png new file mode 100644 index 000000000..f7b9b083c Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_dark.png differ 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 000000000..1f3b360ff Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_start_onehanded_lxx_light.png differ diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_holo_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_holo_dark.png new file mode 100644 index 000000000..e2e360959 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_holo_dark.png differ 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 000000000..ad3ef0154 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png differ 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 000000000..fdd22dcf7 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_stop_onehanded_lxx_light.png differ 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 000000000..0afe49c60 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_holo_dark.png differ 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 000000000..ac84f4a37 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_light.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_light.png new file mode 100644 index 000000000..cb829e801 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_switch_onehanded_lxx_light.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_holo_dark.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_holo_dark.png new file mode 100644 index 000000000..3baac7a41 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_holo_dark.png differ 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 000000000..f779f3743 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_light.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_light.png new file mode 100644 index 000000000..26e1b6d26 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_start_onehanded_lxx_light.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_holo_dark.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_holo_dark.png new file mode 100644 index 000000000..55e337a91 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_holo_dark.png differ 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 000000000..37aaada86 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_dark.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_light.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_light.png new file mode 100644 index 000000000..ee24cc6a8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_stop_onehanded_lxx_light.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_holo_dark.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_holo_dark.png new file mode 100644 index 000000000..2ba869fd5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_holo_dark.png differ 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 000000000..5612928f2 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_dark.png differ 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 000000000..b1270b376 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_switch_onehanded_lxx_light.png differ 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