diff options
Diffstat (limited to 'java/src')
3 files changed, 49 insertions, 36 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 6003d9723..3a9423f4b 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -166,7 +166,12 @@ public class Key { } private static Drawable getIcon(Keyboard.Params params, String moreKeySpec) { - return params.mIconsSet.getIconByIconId(MoreKeySpecParser.getIconId(moreKeySpec)); + final int iconAttrId = MoreKeySpecParser.getIconAttrId(moreKeySpec); + if (iconAttrId == KeyboardIconsSet.ICON_UNDEFINED) { + return null; + } else { + return params.mIconsSet.getIconByAttrId(iconAttrId); + } } /** @@ -277,12 +282,15 @@ public class Key { R.styleable.Keyboard_Key_visualInsetsLeft, params.mBaseWidth, 0); mVisualInsetsRight = (int) Keyboard.Builder.getDimensionOrFraction(keyAttr, R.styleable.Keyboard_Key_visualInsetsRight, params.mBaseWidth, 0); - mPreviewIcon = iconsSet.getIconByIconId(style.getInt(keyAttr, + final int previewIconAttrId = KeyboardIconsSet.getIconAttrId(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconPreview, KeyboardIconsSet.ICON_UNDEFINED)); - mIcon = iconsSet.getIconByIconId(style.getInt(keyAttr, + mPreviewIcon = iconsSet.getIconByAttrId(previewIconAttrId); + final int iconAttrId = KeyboardIconsSet.getIconAttrId(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIcon, KeyboardIconsSet.ICON_UNDEFINED)); - mDisabledIcon = iconsSet.getIconByIconId(style.getInt(keyAttr, + mIcon = iconsSet.getIconByAttrId(iconAttrId); + final int disabledIconAttrId = KeyboardIconsSet.getIconAttrId(style.getInt(keyAttr, R.styleable.Keyboard_Key_keyIconDisabled, KeyboardIconsSet.ICON_UNDEFINED)); + mDisabledIcon = iconsSet.getIconByAttrId(disabledIconAttrId); mHintLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyHintLabel); mLabel = style.getText(keyAttr, R.styleable.Keyboard_Key_keyLabel); diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java index 6313a61b5..09ecbcaa0 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java @@ -31,34 +31,36 @@ public class KeyboardIconsSet { private static final String TAG = KeyboardIconsSet.class.getSimpleName(); public static final int ICON_UNDEFINED = 0; + private static final int ATTR_UNDEFINED = 0; private final Map<Integer, Drawable> mIcons = new HashMap<Integer, Drawable>(); // The key value should be aligned with the enum value of Keyboard.icon*. private static final Map<Integer, Integer> ICONS_TO_ATTRS_MAP = new HashMap<Integer, Integer>(); + private static final Map<String, Integer> NAME_TO_ATTRS_MAP = new HashMap<String, Integer>(); private static final Collection<Integer> VALID_ATTRS; static { - addIconIdMap(1, R.styleable.Keyboard_iconShiftKey); - addIconIdMap(2, R.styleable.Keyboard_iconDeleteKey); - // This is also represented as "@icon/3" in keyboard layout XML. - addIconIdMap(3, R.styleable.Keyboard_iconSettingsKey); - addIconIdMap(4, R.styleable.Keyboard_iconSpaceKey); - addIconIdMap(5, R.styleable.Keyboard_iconReturnKey); - addIconIdMap(6, R.styleable.Keyboard_iconSearchKey); - // This is also represented as "@icon/7" in keyboard layout XML. - addIconIdMap(7, R.styleable.Keyboard_iconTabKey); - addIconIdMap(8, R.styleable.Keyboard_iconShortcutKey); - addIconIdMap(9, R.styleable.Keyboard_iconShortcutForLabel); - addIconIdMap(10, R.styleable.Keyboard_iconSpaceKeyForNumberLayout); - addIconIdMap(11, R.styleable.Keyboard_iconShiftKeyShifted); - addIconIdMap(12, R.styleable.Keyboard_iconDisabledShortcutKey); - addIconIdMap(13, R.styleable.Keyboard_iconPreviewTabKey); + addIconIdMap(1, "shiftKey", R.styleable.Keyboard_iconShiftKey); + addIconIdMap(2, "deleteKey", R.styleable.Keyboard_iconDeleteKey); + addIconIdMap(3, "settingsKey", R.styleable.Keyboard_iconSettingsKey); + addIconIdMap(4, "spaceKey", R.styleable.Keyboard_iconSpaceKey); + addIconIdMap(5, "returnKey", R.styleable.Keyboard_iconReturnKey); + addIconIdMap(6, "searchKey", R.styleable.Keyboard_iconSearchKey); + addIconIdMap(7, "tabKey", R.styleable.Keyboard_iconTabKey); + addIconIdMap(8, "shortcutKey", R.styleable.Keyboard_iconShortcutKey); + addIconIdMap(9, "shortcutForLabel", R.styleable.Keyboard_iconShortcutForLabel); + addIconIdMap(10, "spaceKeyForNumberLayout", + R.styleable.Keyboard_iconSpaceKeyForNumberLayout); + addIconIdMap(11, "shiftKeyShifted", R.styleable.Keyboard_iconShiftKeyShifted); + addIconIdMap(12, "disabledShortcurKey", R.styleable.Keyboard_iconDisabledShortcutKey); + addIconIdMap(13, "previewTabKey", R.styleable.Keyboard_iconPreviewTabKey); VALID_ATTRS = ICONS_TO_ATTRS_MAP.values(); } - private static void addIconIdMap(int iconId, int attrId) { + private static void addIconIdMap(int iconId, String name, Integer attrId) { ICONS_TO_ATTRS_MAP.put(iconId, attrId); + NAME_TO_ATTRS_MAP.put(name, attrId); } public void loadIcons(final TypedArray keyboardAttrs) { @@ -76,18 +78,29 @@ public class KeyboardIconsSet { } } - public Drawable getIconByIconId(final Integer iconId) { + public static int getIconAttrId(final Integer iconId) { if (iconId == ICON_UNDEFINED) { - return null; + return ATTR_UNDEFINED; } final Integer attrId = ICONS_TO_ATTRS_MAP.get(iconId); if (attrId == null) { throw new IllegalArgumentException("icon id is out of range: " + iconId); } - return getIconByAttrId(attrId); + return attrId; + } + + public static int getIconAttrId(final String iconName) { + final Integer attrId = NAME_TO_ATTRS_MAP.get(iconName); + if (attrId == null) { + throw new IllegalArgumentException("unknown icon name: " + iconName); + } + return attrId; } public Drawable getIconByAttrId(final Integer attrId) { + if (attrId == ATTR_UNDEFINED) { + return null; + } if (!VALID_ATTRS.contains(attrId)) { throw new IllegalArgumentException("unknown icon attribute id: " + attrId); } diff --git a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java index 2facf8439..16777733e 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java +++ b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParser.java @@ -18,7 +18,6 @@ package com.android.inputmethod.keyboard.internal; import android.content.res.Resources; import android.text.TextUtils; -import android.util.Log; import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.latin.R; @@ -32,15 +31,13 @@ import java.util.ArrayList; * Each "more key" specification is one of the following: * - A single letter (Letter) * - Label optionally followed by keyOutputText or code (keyLabel|keyOutputText). - * - Icon followed by keyOutputText or code (@icon/icon_number|@integer/key_code) + * - Icon followed by keyOutputText or code (@icon/icon_name|@integer/key_code) * Special character, comma ',' backslash '\', and bar '|' can be escaped by '\' * character. * Note that the character '@' and '\' are also parsed by XML parser and CSV parser as well. * See {@link KeyboardIconsSet} about icon_number. */ public class MoreKeySpecParser { - private static final String TAG = MoreKeySpecParser.class.getSimpleName(); - private static final char LABEL_END = '|'; private static final String PREFIX_ICON = Utils.PREFIX_AT + "icon" + Utils.SUFFIX_SLASH; private static final String PREFIX_CODE = Utils.PREFIX_AT + "integer" + Utils.SUFFIX_SLASH; @@ -167,16 +164,11 @@ public class MoreKeySpecParser { return Keyboard.CODE_OUTPUT_TEXT; } - public static int getIconId(String moreKeySpec) { + public static int getIconAttrId(String moreKeySpec) { if (hasIcon(moreKeySpec)) { - final int end = moreKeySpec.indexOf(LABEL_END, PREFIX_ICON.length() + 1); - final String iconId = moreKeySpec.substring(PREFIX_ICON.length(), end); - try { - return Integer.valueOf(iconId); - } catch (NumberFormatException e) { - Log.w(TAG, "illegal icon id specified: " + iconId); - return KeyboardIconsSet.ICON_UNDEFINED; - } + final int end = moreKeySpec.indexOf(LABEL_END, PREFIX_ICON.length()); + final String name = moreKeySpec.substring(PREFIX_ICON.length(), end); + return KeyboardIconsSet.getIconAttrId(name); } return KeyboardIconsSet.ICON_UNDEFINED; } |