diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/res/values-xlarge/config.xml | 1 | ||||
-rw-r--r-- | java/res/values/config.xml | 1 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/keyboard/Key.java | 39 |
3 files changed, 40 insertions, 1 deletions
diff --git a/java/res/values-xlarge/config.xml b/java/res/values-xlarge/config.xml index e8e21306d..a6fbea67f 100644 --- a/java/res/values-xlarge/config.xml +++ b/java/res/values-xlarge/config.xml @@ -25,6 +25,7 @@ <bool name="config_candidate_highlight_font_color_enabled">false</bool> <bool name="config_swipe_down_dismiss_keyboard_enabled">false</bool> <bool name="config_sliding_key_input_enabled">false</bool> + <bool name="config_digit_popup_characters_enabled">false</bool> <!-- Whether or not Popup on key press is enabled by default --> <bool name="config_default_popup_preview">false</bool> <!-- This configuration is the index of the array {@link KeyboardSwitcher.KEYBOARD_THEMES}. --> diff --git a/java/res/values/config.xml b/java/res/values/config.xml index 8bdda5574..033224e16 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -28,6 +28,7 @@ <bool name="config_candidate_highlight_font_color_enabled">true</bool> <bool name="config_swipe_down_dismiss_keyboard_enabled">true</bool> <bool name="config_sliding_key_input_enabled">true</bool> + <bool name="config_digit_popup_characters_enabled">true</bool> <!-- Whether or not Popup on key press is enabled by default --> <bool name="config_default_popup_preview">true</bool> <integer name="config_delay_before_preview">0</integer> diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index c2aa4ecba..35bafea80 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -27,6 +27,8 @@ import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.Xml; +import java.util.ArrayList; + /** * Class for describing the position and characteristics of a single key in the keyboard. */ @@ -208,8 +210,13 @@ public class Key { style = keyStyles.getEmptyKeyStyle(); } - mPopupCharacters = style.getTextArray(keyAttr, + final CharSequence[] popupCharacters = style.getTextArray(keyAttr, R.styleable.Keyboard_Key_popupCharacters); + if (res.getBoolean(R.bool.config_digit_popup_characters_enabled)) { + mPopupCharacters = popupCharacters; + } else { + mPopupCharacters = filterOutDigitPopupCharacters(popupCharacters); + } mMaxPopupColumn = style.getInt(keyboardAttr, R.styleable.Keyboard_Key_maxPopupKeyboardColumn, mKeyboard.getMaxPopupKeyboardColumn()); @@ -256,6 +263,36 @@ public class Key { } } + private static boolean isDigitPopupCharacter(CharSequence label) { + return label.length() == 1 && Character.isDigit(label.charAt(0)); + } + + private static CharSequence[] filterOutDigitPopupCharacters(CharSequence[] popupCharacters) { + if (popupCharacters == null || popupCharacters.length < 1) + return null; + if (popupCharacters.length == 1 && isDigitPopupCharacter( + PopupCharactersParser.getLabel(popupCharacters[0].toString()))) + return null; + ArrayList<CharSequence> filtered = null; + for (int i = 0; i < popupCharacters.length; i++) { + final CharSequence popupSpec = popupCharacters[i]; + if (isDigitPopupCharacter(PopupCharactersParser.getLabel(popupSpec.toString()))) { + if (filtered == null) { + filtered = new ArrayList<CharSequence>(); + for (int j = 0; j < i; j++) + filtered.add(popupCharacters[j]); + } + } else if (filtered != null) { + filtered.add(popupSpec); + } + } + if (filtered == null) + return popupCharacters; + if (filtered.size() == 0) + return null; + return filtered.toArray(new CharSequence[filtered.size()]); + } + public Drawable getIcon() { return mIcon; } |