Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44e0e4f9 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Fix Key.equals(Key)

Bug: 5956068
Change-Id: I2901ae28bd9121ec4f4429a53b83aae128b75e0c
parent c373585f
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -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) {
+10 −5
Original line number Diff line number Diff line
@@ -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<KeyboardId, SoftReference<Keyboard>> sKeyboardCache =
            new HashMap<KeyboardId, SoftReference<Keyboard>>();
    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<Key, Key>();
        }

        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<KeyboardId, SoftReference<Keyboard>> sKeyboardCache =
            new HashMap<KeyboardId, SoftReference<Keyboard>>();

    public static void clearKeyboardCache() {
        sKeyboardCache.clear();
        sKeysCache.clear();
    }

    private KeyboardSet(Context context, Params params) {
@@ -156,7 +161,7 @@ public class KeyboardSet {
                final Keyboard.Builder<Keyboard.Params> builder =
                        new Keyboard.Builder<Keyboard.Params>(context, new Keyboard.Params());
                if (id.isAlphabetKeyboard()) {
                    builder.setAutoGenerate(mKeysCache);
                    builder.setAutoGenerate(sKeysCache);
                }
                builder.load(keyboardXmlId, id);
                builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled);
+19 −7
Original line number Diff line number Diff line
@@ -36,8 +36,9 @@ public class KeyboardIconsSet {
    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 Map<Integer, Integer> ID_TO_ATTR_MAP = new HashMap<Integer, Integer>();
    private static final Map<String, Integer> NAME_TO_ATTR_MAP = new HashMap<String, Integer>();
    private static final Map<Integer, String> ATTR_TO_NAME_MAP = new HashMap<Integer, String>();
    private static final Collection<Integer> 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;