From 44e0e4f99e70b84176ff5c985e456b821a8f0b14 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 2 Feb 2012 21:24:09 +0900 Subject: [PATCH] Fix Key.equals(Key) Bug: 5956068 Change-Id: I2901ae28bd9121ec4f4429a53b83aae128b75e0c --- .../com/android/inputmethod/keyboard/Key.java | 21 ++++++++++----- .../inputmethod/keyboard/KeyboardSet.java | 15 +++++++---- .../keyboard/internal/KeyboardIconsSet.java | 26 ++++++++++++++----- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 8f2efab29..a6c9fd485 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -364,8 +364,8 @@ public class Key { && o.mCode == mCode && TextUtils.equals(o.mLabel, mLabel) && TextUtils.equals(o.mHintLabel, mHintLabel) - && o.mIconAttrId != mIconAttrId - && o.mBackgroundType != mBackgroundType; + && o.mIconAttrId == mIconAttrId + && o.mBackgroundType == mBackgroundType; } @Override @@ -380,11 +380,20 @@ public class Key { @Override public String toString() { - String top = Keyboard.printableCode(mCode); - if (Utils.codePointCount(mLabel) != 1) { - top += "/\"" + mLabel + '"'; + return String.format("%s/%s %d,%d %dx%d %s/%s/%s", + Keyboard.printableCode(mCode), mLabel, mX, mY, mWidth, mHeight, mHintLabel, + KeyboardIconsSet.getIconName(mIconAttrId), backgroundName(mBackgroundType)); + } + + private static String backgroundName(int backgroundType) { + switch (backgroundType) { + case BACKGROUND_TYPE_NORMAL: return "normal"; + case BACKGROUND_TYPE_FUNCTIONAL: return "functional"; + case BACKGROUND_TYPE_ACTION: return "action"; + case BACKGROUND_TYPE_STICKY_OFF: return "stickyOff"; + case BACKGROUND_TYPE_STICKY_ON: return "stickyOn"; + default: return null; } - return String.format("%s %d,%d", top, mX, mY); } public void markAsLeftEdge(Keyboard.Params params) { diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java index 664e7656e..82eaa1d17 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java @@ -57,7 +57,10 @@ public class KeyboardSet { private final Context mContext; private final Params mParams; - private final KeysCache mKeysCache = new KeysCache(); + + private static final HashMap> sKeyboardCache = + new HashMap>(); + private static final KeysCache sKeysCache = new KeysCache(); public static class KeyboardSetException extends RuntimeException { public final KeyboardId mKeyboardId; @@ -74,6 +77,10 @@ public class KeyboardSet { mMap = new HashMap(); } + public void clear() { + mMap.clear(); + } + public Key get(Key key) { final Key existingKey = mMap.get(key); if (existingKey != null) { @@ -103,11 +110,9 @@ public class KeyboardSet { Params() {} } - private static final HashMap> sKeyboardCache = - new HashMap>(); - public static void clearKeyboardCache() { sKeyboardCache.clear(); + sKeysCache.clear(); } private KeyboardSet(Context context, Params params) { @@ -156,7 +161,7 @@ public class KeyboardSet { final Keyboard.Builder builder = new Keyboard.Builder(context, new Keyboard.Params()); if (id.isAlphabetKeyboard()) { - builder.setAutoGenerate(mKeysCache); + builder.setAutoGenerate(sKeysCache); } builder.load(keyboardXmlId, id); builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled); diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java index bec6ae1cc..31a7e8b8e 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java @@ -36,8 +36,9 @@ public class KeyboardIconsSet { private final Map mIcons = new HashMap(); // The key value should be aligned with the enum value of Keyboard.icon*. - private static final Map ICONS_TO_ATTRS_MAP = new HashMap(); - private static final Map NAME_TO_ATTRS_MAP = new HashMap(); + private static final Map ID_TO_ATTR_MAP = new HashMap(); + private static final Map NAME_TO_ATTR_MAP = new HashMap(); + private static final Map ATTR_TO_NAME_MAP = new HashMap(); private static final Collection VALID_ATTRS; static { @@ -55,12 +56,13 @@ public class KeyboardIconsSet { 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(); + VALID_ATTRS = ID_TO_ATTR_MAP.values(); } private static void addIconIdMap(int iconId, String name, Integer attrId) { - ICONS_TO_ATTRS_MAP.put(iconId, attrId); - NAME_TO_ATTRS_MAP.put(name, attrId); + ID_TO_ATTR_MAP.put(iconId, attrId); + NAME_TO_ATTR_MAP.put(name, attrId); + ATTR_TO_NAME_MAP.put(attrId, name); } public void loadIcons(final TypedArray keyboardAttrs) { @@ -82,7 +84,7 @@ public class KeyboardIconsSet { if (iconId == ICON_UNDEFINED) { return ATTR_UNDEFINED; } - final Integer attrId = ICONS_TO_ATTRS_MAP.get(iconId); + final Integer attrId = ID_TO_ATTR_MAP.get(iconId); if (attrId == null) { throw new IllegalArgumentException("icon id is out of range: " + iconId); } @@ -90,13 +92,23 @@ public class KeyboardIconsSet { } public static int getIconAttrId(final String iconName) { - final Integer attrId = NAME_TO_ATTRS_MAP.get(iconName); + final Integer attrId = NAME_TO_ATTR_MAP.get(iconName); if (attrId == null) { throw new IllegalArgumentException("unknown icon name: " + iconName); } return attrId; } + public static String getIconName(final int attrId) { + if (attrId == ATTR_UNDEFINED) { + return "null"; + } + if (ATTR_TO_NAME_MAP.containsKey(attrId)) { + return ATTR_TO_NAME_MAP.get(attrId); + } + return String.format("unknown<0x%08x>", attrId); + } + public Drawable getIconByAttrId(final Integer attrId) { if (attrId == ATTR_UNDEFINED) { return null;