diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java
index d994bc5d..26d32e58 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardId.java
@@ -42,6 +42,7 @@ public final class KeyboardId {
public static final int MODE_DATE = 6;
public static final int MODE_TIME = 7;
public static final int MODE_DATETIME = 8;
+ public static final int MODE_NUMPAD = 9;
public static final int ELEMENT_ALPHABET = 0;
public static final int ELEMENT_ALPHABET_MANUAL_SHIFTED = 1;
@@ -71,6 +72,7 @@ public final class KeyboardId {
public static final int ELEMENT_EMOJI_CATEGORY15 = 25;
public static final int ELEMENT_EMOJI_CATEGORY16 = 26;
public static final int ELEMENT_CLIPBOARD = 27;
+ public static final int ELEMENT_NUMPAD = 28;
public final RichInputMethodSubtype mSubtype;
public final int mWidth;
@@ -259,6 +261,7 @@ public final class KeyboardId {
case ELEMENT_EMOJI_CATEGORY15: return "emojiCategory15";
case ELEMENT_EMOJI_CATEGORY16: return "emojiCategory16";
case ELEMENT_CLIPBOARD: return "clipboard";
+ case ELEMENT_NUMPAD: return "numpad";
default: return null;
}
}
@@ -274,6 +277,7 @@ public final class KeyboardId {
case MODE_DATE: return "date";
case MODE_TIME: return "time";
case MODE_DATETIME: return "datetime";
+ case MODE_NUMPAD: return "numpad";
default: return null;
}
}
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java
index c51d6802..a4962cf7 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/keyboard/KeyboardLayoutSet.java
@@ -181,6 +181,9 @@ public final class KeyboardLayoutSet {
keyboardLayoutSetElementId = KeyboardId.ELEMENT_PHONE;
}
break;
+ case KeyboardId.MODE_NUMPAD:
+ keyboardLayoutSetElementId = KeyboardId.ELEMENT_NUMPAD;
+ break;
case KeyboardId.MODE_NUMBER:
case KeyboardId.MODE_DATE:
case KeyboardId.MODE_TIME:
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 0ddd4839..0f9e7ba3 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
@@ -347,6 +347,14 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
mClipboardHistoryView.setVisibility(View.VISIBLE);
}
+ @Override
+ public void setNumpadKeyboard() {
+ if (DEBUG_ACTION) {
+ Log.d(TAG, "setNumpadKeyboard");
+ }
+ setKeyboard(KeyboardId.ELEMENT_NUMPAD, KeyboardSwitchState.OTHER);
+ }
+
public enum KeyboardSwitchState {
HIDDEN(-1),
SYMBOLS_SHIFTED(KeyboardId.ELEMENT_SYMBOLS_SHIFTED),
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 3cda8b46..8583ab16 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
@@ -55,6 +55,9 @@ public final class KeyboardCodesSet {
"key_unspecified",
"key_clipboard",
"key_alpha_from_clipboard",
+ "key_numpad",
+ "key_alphaNumpad",
+ "key_symbolNumpad",
"key_start_onehanded",
"key_stop_onehanded",
"key_switch_onehanded"
@@ -80,6 +83,9 @@ public final class KeyboardCodesSet {
Constants.CODE_UNSPECIFIED,
Constants.CODE_CLIPBOARD,
Constants.CODE_ALPHA_FROM_CLIPBOARD,
+ Constants.CODE_NUMPAD,
+ Constants.CODE_ALPHA_FROM_NUMPAD,
+ Constants.CODE_SYMBOL_FROM_NUMPAD,
Constants.CODE_START_ONE_HANDED_MODE,
Constants.CODE_STOP_ONE_HANDED_MODE,
Constants.CODE_SWITCH_ONE_HANDED_MODE
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 44f1cf35..4699fdc7 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,7 @@ 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_NUMPAD_KEY = "numpad_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";
@@ -98,6 +99,7 @@ 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_NUMPAD_KEY, R.styleable.Keyboard_iconNumpadKey,
NAME_START_ONEHANDED_KEY, R.styleable.Keyboard_iconStartOneHandedMode,
NAME_STOP_ONEHANDED_KEY, R.styleable.Keyboard_iconStopOneHandedMode,
NAME_SWITCH_ONEHANDED_KEY, R.styleable.Keyboard_iconSwitchOneHandedMode,
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 13a48413..c5c6281a 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
@@ -52,6 +52,7 @@ public final class KeyboardState {
void setAlphabetShiftLockShiftedKeyboard();
void setEmojiKeyboard();
void setClipboardKeyboard();
+ void setNumpadKeyboard();
void setSymbolsKeyboard();
void setSymbolsShiftedKeyboard();
@@ -90,6 +91,7 @@ public final class KeyboardState {
private static final int MODE_SYMBOLS = 1;
private static final int MODE_EMOJI = 2;
private static final int MODE_CLIPBOARD = 3;
+ private static final int MODE_NUMPAD = 4;
private int mMode = MODE_ALPHABET;
private AlphabetShiftState mAlphabetShiftState = new AlphabetShiftState();
private boolean mIsSymbolShifted;
@@ -124,6 +126,9 @@ public final class KeyboardState {
if (mMode == MODE_CLIPBOARD) {
return "CLIPBOARD";
}
+ if (mMode == MODE_NUMPAD) {
+ return "NUMPAD";
+ }
return "SYMBOLS_" + shiftModeToString(mShiftMode);
}
}
@@ -200,6 +205,10 @@ public final class KeyboardState {
setClipboardKeyboard();
return;
}
+ if (state.mMode == MODE_NUMPAD) {
+ setNumpadKeyboard();
+ return;
+ }
// Symbol mode
if (state.mShiftMode == MANUAL_SHIFT) {
setSymbolsShiftedKeyboard();
@@ -373,6 +382,19 @@ public final class KeyboardState {
mSwitchActions.setClipboardKeyboard();
}
+ private void setNumpadKeyboard() {
+ if (DEBUG_INTERNAL_ACTION) {
+ Log.d(TAG, "setNumpadKeyboard");
+ }
+ mMode = MODE_NUMPAD;
+ mRecapitalizeMode = RecapitalizeStatus.NOT_A_RECAPITALIZE_MODE;
+ // Remember caps lock mode and reset alphabet shift state.
+ mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked();
+ mAlphabetShiftState.setShiftLocked(false);
+ mSwitchActions.setNumpadKeyboard();
+
+ }
+
private void setOneHandedModeEnabled(boolean enabled) {
if (DEBUG_INTERNAL_ACTION) {
Log.d(TAG, "setOneHandedModeEnabled");
@@ -687,7 +709,7 @@ public final class KeyboardState {
}
break;
case SWITCH_STATE_SYMBOL_BEGIN:
- if (mMode == MODE_EMOJI || mMode == MODE_CLIPBOARD) {
+ if (mMode == MODE_EMOJI || mMode == MODE_CLIPBOARD || mMode == MODE_NUMPAD) {
// When in the Emoji keyboard or clipboard one, we don't want to switch back to the main layout even
// after the user hits an emoji letter followed by an enter or a space.
break;
@@ -728,6 +750,12 @@ public final class KeyboardState {
}
} else if (code == Constants.CODE_ALPHA_FROM_CLIPBOARD) {
setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
+ } else if (code == Constants.CODE_NUMPAD) {
+ setNumpadKeyboard();
+ } else if (code == Constants.CODE_ALPHA_FROM_NUMPAD) {
+ setAlphabetKeyboard(autoCapsFlags, recapitalizeMode);
+ } else if (code == Constants.CODE_SYMBOL_FROM_NUMPAD) {
+ setSymbolsKeyboard();
} else if (code == Constants.CODE_START_ONE_HANDED_MODE) {
setOneHandedModeEnabled(true);
} else if (code == Constants.CODE_STOP_ONE_HANDED_MODE) {
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 67113226..a49845ea 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
@@ -262,6 +262,7 @@ public final class KeyboardTextsTable {
/* 178: 0 */ "keyspec_clipboard_normal_key",
/* 179: 0 */ "keyspec_start_onehanded_mode",
/* 180: 0 */ "keyspec_language_switch",
+ /* 181: 0 */ "keyspec_numpad_key",
};
private static final String EMPTY = "";
@@ -491,6 +492,7 @@ public final class KeyboardTextsTable {
/* keyspec_clipboard_normal_key */ "!icon/clipboard_normal_key|!code/key_clipboard",
/* keyspec_start_onehanded_mode */ "!icon/start_onehanded_mode_key|!code/key_start_onehanded",
/* keyspec_language_switch */ "!icon/language_switch_key|!code/key_language_switch",
+ /* keyspec_numpad_key */ "!icon/numpad_key|!code/key_numpad",
};
/* Locale af: Afrikaans */
@@ -4263,7 +4265,7 @@ public final class KeyboardTextsTable {
private static final Object[] LOCALES_AND_TEXTS = {
// "locale", TEXT_ARRAY, /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */
- "DEFAULT", TEXTS_DEFAULT, /* 181/181 DEFAULT */
+ "DEFAULT", TEXTS_DEFAULT, /* 182/182 DEFAULT */
"af" , TEXTS_af, /* 7/ 13 Afrikaans */
"ar" , TEXTS_ar, /* 55/110 Arabic */
"az" , TEXTS_az, /* 11/ 18 Azerbaijani */
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Constants.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/common/Constants.java
index d65f5112..92d4f71e 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
@@ -250,8 +250,11 @@ public final class Constants {
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;
+ public static final int CODE_NUMPAD = -20;
+ public static final int CODE_ALPHA_FROM_NUMPAD = -21;
+ public static final int CODE_SYMBOL_FROM_NUMPAD = -22;
// Code value representing the code is not specified.
- public static final int CODE_UNSPECIFIED = -20;
+ public static final int CODE_UNSPECIFIED = -23;
public static boolean isLetterCode(final int code) {
return code >= CODE_SPACE;
@@ -282,6 +285,9 @@ public final class Constants {
case CODE_START_ONE_HANDED_MODE: return "startOneHandedMode";
case CODE_STOP_ONE_HANDED_MODE: return "stopOneHandedMode";
case CODE_SWITCH_ONE_HANDED_MODE: return "switchOneHandedMode";
+ case CODE_NUMPAD: return "numpad";
+ case CODE_ALPHA_FROM_NUMPAD: return "alphaNumpad";
+ case CODE_SYMBOL_FROM_NUMPAD: return "symbolNumpad";
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 de28b640..aa8b081f 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,18 @@ public final class InputLogic {
// Note: Switching back from clipboard keyboard to the main keyboard is being
// handled in {@link KeyboardState#onEvent(Event,int)}.
break;
+ case Constants.CODE_NUMPAD:
+ // Note: Switching Numpad keyboard is being handled in
+ // {@link KeyboardState#onEvent(Event,int)}.
+ break;
+ case Constants.CODE_ALPHA_FROM_NUMPAD:
+ // Note: Switching back from Numpad keyboard to the main keyboard is being
+ // handled in {@link KeyboardState#onEvent(Event,int)}.
+ break;
+ case Constants.CODE_SYMBOL_FROM_NUMPAD:
+ // Note: Switching back from Numpad keyboard to the symbol keyboard is being
+ // handled in {@link KeyboardState#onEvent(Event,int)}.
+ break;
case Constants.CODE_SHIFT_ENTER:
final Event tmpEvent = Event.createSoftwareKeypressEvent(Constants.CODE_ENTER,
event.getMKeyCode(), event.getMX(), event.getMY(), event.isKeyRepeat());
diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_numpad_key_holo_dark.png b/app/src/main/res/drawable-hdpi/sym_keyboard_numpad_key_holo_dark.png
new file mode 100644
index 00000000..54bdb88e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_numpad_key_holo_dark.png differ
diff --git a/app/src/main/res/drawable-hdpi/sym_keyboard_numpad_key_lxx_light.png b/app/src/main/res/drawable-hdpi/sym_keyboard_numpad_key_lxx_light.png
new file mode 100644
index 00000000..3819255c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/sym_keyboard_numpad_key_lxx_light.png differ
diff --git a/app/src/main/res/drawable-mdpi/sym_keyboard_numpad_key_holo_dark.png b/app/src/main/res/drawable-mdpi/sym_keyboard_numpad_key_holo_dark.png
new file mode 100644
index 00000000..d44bf35c
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sym_keyboard_numpad_key_holo_dark.png differ
diff --git a/app/src/main/res/drawable-mdpi/sym_keyboard_numpad_key_lxx_light.png b/app/src/main/res/drawable-mdpi/sym_keyboard_numpad_key_lxx_light.png
new file mode 100644
index 00000000..3a808275
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/sym_keyboard_numpad_key_lxx_light.png differ
diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_numpad_key_holo_dark.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_numpad_key_holo_dark.png
new file mode 100644
index 00000000..a51dbb45
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_numpad_key_holo_dark.png differ
diff --git a/app/src/main/res/drawable-xhdpi/sym_keyboard_numpad_key_lxx_light.png b/app/src/main/res/drawable-xhdpi/sym_keyboard_numpad_key_lxx_light.png
new file mode 100644
index 00000000..0ab7d44b
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/sym_keyboard_numpad_key_lxx_light.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_numpad_key_holo_dark.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_numpad_key_holo_dark.png
new file mode 100644
index 00000000..4d85ef96
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_numpad_key_holo_dark.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/sym_keyboard_numpad_key_lxx_light.png b/app/src/main/res/drawable-xxhdpi/sym_keyboard_numpad_key_lxx_light.png
new file mode 100644
index 00000000..f7f84a6b
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/sym_keyboard_numpad_key_lxx_light.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_numpad_key_holo_dark.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_numpad_key_holo_dark.png
new file mode 100644
index 00000000..eb5ec80d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_numpad_key_holo_dark.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/sym_keyboard_numpad_key_lxx_light.png b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_numpad_key_lxx_light.png
new file mode 100644
index 00000000..7cdff76b
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/sym_keyboard_numpad_key_lxx_light.png differ
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 7dceb458..a3ca3066 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -302,6 +302,7 @@
+
@@ -498,6 +499,7 @@
+
@@ -586,6 +588,7 @@
+
diff --git a/app/src/main/res/values/keyboard-icons-holo.xml b/app/src/main/res/values/keyboard-icons-holo.xml
index ce1f6ee2..927b6520 100644
--- a/app/src/main/res/values/keyboard-icons-holo.xml
+++ b/app/src/main/res/values/keyboard-icons-holo.xml
@@ -44,5 +44,6 @@
- @drawable/sym_keyboard_start_onehanded_holo_dark
- @drawable/sym_keyboard_stop_onehanded_holo_dark
- @drawable/sym_keyboard_switch_onehanded_holo_dark
+ - @drawable/sym_keyboard_numpad_key_holo_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 220e6b2e..d2cbfe58 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
@@ -49,5 +49,6 @@
- @drawable/sym_keyboard_start_onehanded_lxx_light
- @drawable/sym_keyboard_stop_onehanded_lxx_light
- @drawable/sym_keyboard_switch_onehanded_lxx_light
+ - @drawable/sym_keyboard_numpad_key_lxx_light
diff --git a/app/src/main/res/xml-land/kbd_numpad.xml b/app/src/main/res/xml-land/kbd_numpad.xml
new file mode 100644
index 00000000..99b7833c
--- /dev/null
+++ b/app/src/main/res/xml-land/kbd_numpad.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/app/src/main/res/xml-land/rows_numpad.xml b/app/src/main/res/xml-land/rows_numpad.xml
new file mode 100644
index 00000000..7bbd021c
--- /dev/null
+++ b/app/src/main/res/xml-land/rows_numpad.xml
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml-sw600dp-land/kbd_numpad.xml b/app/src/main/res/xml-sw600dp-land/kbd_numpad.xml
new file mode 100644
index 00000000..2e67f8a9
--- /dev/null
+++ b/app/src/main/res/xml-sw600dp-land/kbd_numpad.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/app/src/main/res/xml-sw600dp/kbd_numpad.xml b/app/src/main/res/xml-sw600dp/kbd_numpad.xml
new file mode 100644
index 00000000..2e67f8a9
--- /dev/null
+++ b/app/src/main/res/xml-sw600dp/kbd_numpad.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/app/src/main/res/xml-sw600dp/key_styles_common.xml b/app/src/main/res/xml-sw600dp/key_styles_common.xml
index d20e9739..9227bc3b 100644
--- a/app/src/main/res/xml-sw600dp/key_styles_common.xml
+++ b/app/src/main/res/xml-sw600dp/key_styles_common.xml
@@ -71,6 +71,58 @@
latin:parentStyle="baseForShiftKeyStyle" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/kbd_numpad.xml b/app/src/main/res/xml/kbd_numpad.xml
new file mode 100644
index 00000000..3ee37b56
--- /dev/null
+++ b/app/src/main/res/xml/kbd_numpad.xml
@@ -0,0 +1,9 @@
+
+
+
+
diff --git a/app/src/main/res/xml/key_styles_common.xml b/app/src/main/res/xml/key_styles_common.xml
index 84dcc6bd..230432a8 100644
--- a/app/src/main/res/xml/key_styles_common.xml
+++ b/app/src/main/res/xml/key_styles_common.xml
@@ -95,6 +95,58 @@
latin:backgroundType="functional" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/xml/keyboard_layout_set_azerty.xml b/app/src/main/res/xml/keyboard_layout_set_azerty.xml
index fee85142..38fd3d42 100644
--- a/app/src/main/res/xml/keyboard_layout_set_azerty.xml
+++ b/app/src/main/res/xml/keyboard_layout_set_azerty.xml
@@ -40,4 +40,7 @@
+
diff --git a/app/src/main/res/xml/keyboard_layout_set_qwerty.xml b/app/src/main/res/xml/keyboard_layout_set_qwerty.xml
index a95c5b6a..9cc5a218 100644
--- a/app/src/main/res/xml/keyboard_layout_set_qwerty.xml
+++ b/app/src/main/res/xml/keyboard_layout_set_qwerty.xml
@@ -40,4 +40,7 @@
+
diff --git a/app/src/main/res/xml/row_symbols4.xml b/app/src/main/res/xml/row_symbols4.xml
index 5d63403d..65a4497c 100644
--- a/app/src/main/res/xml/row_symbols4.xml
+++ b/app/src/main/res/xml/row_symbols4.xml
@@ -22,7 +22,7 @@
+ latin:keyStyle="numpadKeyStyle" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 d26383e2..fa53afa2 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
@@ -264,6 +264,7 @@
!icon/clipboard_normal_key|!code/key_clipboard
!icon/start_onehanded_mode_key|!code/key_start_onehanded
!icon/language_switch_key|!code/key_language_switch
+ !icon/numpad_key|!code/key_numpad
!string/label_go_key
!string/label_send_key
!string/label_next_key