Use SparseArray<E> instead of HashMap<Integer,E>
Change-Id: Id962e670ee1a5164e6c69deb84625139bf5e7974
This commit is contained in:
parent
1333579b4b
commit
56853c1e48
7 changed files with 55 additions and 51 deletions
|
@ -19,6 +19,7 @@ package com.android.inputmethod.accessibility;
|
|||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
|
||||
import com.android.inputmethod.keyboard.Key;
|
||||
|
@ -39,8 +40,8 @@ public class KeyCodeDescriptionMapper {
|
|||
// Map of key labels to spoken description resource IDs
|
||||
private final HashMap<CharSequence, Integer> mKeyLabelMap;
|
||||
|
||||
// Map of key codes to spoken description resource IDs
|
||||
private final HashMap<Integer, Integer> mKeyCodeMap;
|
||||
// Sparse array of spoken description resource IDs indexed by key codes
|
||||
private final SparseIntArray mKeyCodeMap;
|
||||
|
||||
public static void init() {
|
||||
sInstance.initInternal();
|
||||
|
@ -52,7 +53,7 @@ public class KeyCodeDescriptionMapper {
|
|||
|
||||
private KeyCodeDescriptionMapper() {
|
||||
mKeyLabelMap = new HashMap<CharSequence, Integer>();
|
||||
mKeyCodeMap = new HashMap<Integer, Integer>();
|
||||
mKeyCodeMap = new SparseIntArray();
|
||||
}
|
||||
|
||||
private void initInternal() {
|
||||
|
@ -60,7 +61,7 @@ public class KeyCodeDescriptionMapper {
|
|||
mKeyLabelMap.put(":-)", R.string.spoken_description_smiley);
|
||||
|
||||
// Symbols that most TTS engines can't speak
|
||||
mKeyCodeMap.put((int) ' ', R.string.spoken_description_space);
|
||||
mKeyCodeMap.put(' ', R.string.spoken_description_space);
|
||||
|
||||
// Special non-character codes defined in Keyboard
|
||||
mKeyCodeMap.put(Keyboard.CODE_DELETE, R.string.spoken_description_delete);
|
||||
|
@ -273,7 +274,8 @@ public class KeyCodeDescriptionMapper {
|
|||
return context.getString(OBSCURED_KEY_RES_ID);
|
||||
}
|
||||
|
||||
if (mKeyCodeMap.containsKey(code)) {
|
||||
final int resId = mKeyCodeMap.get(code);
|
||||
if (resId != 0) {
|
||||
return context.getString(mKeyCodeMap.get(code));
|
||||
} else if (isDefinedNonCtrl) {
|
||||
return Character.toString((char) code);
|
||||
|
|
|
@ -23,6 +23,8 @@ import android.content.res.XmlResourceParser;
|
|||
import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseIntArray;
|
||||
import android.util.TypedValue;
|
||||
import android.util.Xml;
|
||||
import android.view.InflateException;
|
||||
|
@ -44,7 +46,6 @@ import org.xmlpull.v1.XmlPullParserException;
|
|||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
|
||||
|
@ -134,7 +135,7 @@ public class Keyboard {
|
|||
public final Key[] mAltCodeKeysWhileTyping;
|
||||
public final KeyboardIconsSet mIconsSet;
|
||||
|
||||
private final HashMap<Integer, Key> mKeyCache = new HashMap<Integer, Key>();
|
||||
private final SparseArray<Key> mKeyCache = new SparseArray<Key>();
|
||||
|
||||
private final ProximityInfo mProximityInfo;
|
||||
private final boolean mProximityCharsCorrectionEnabled;
|
||||
|
@ -184,23 +185,23 @@ public class Keyboard {
|
|||
if (code == CODE_UNSPECIFIED) {
|
||||
return null;
|
||||
}
|
||||
final Integer keyCode = code;
|
||||
if (mKeyCache.containsKey(keyCode)) {
|
||||
return mKeyCache.get(keyCode);
|
||||
final int index = mKeyCache.indexOfKey(code);
|
||||
if (index >= 0) {
|
||||
return mKeyCache.valueAt(index);
|
||||
}
|
||||
|
||||
for (final Key key : mKeys) {
|
||||
if (key.mCode == code) {
|
||||
mKeyCache.put(keyCode, key);
|
||||
mKeyCache.put(code, key);
|
||||
return key;
|
||||
}
|
||||
}
|
||||
mKeyCache.put(keyCode, null);
|
||||
mKeyCache.put(code, null);
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasKey(Key aKey) {
|
||||
if (mKeyCache.containsKey(aKey)) {
|
||||
if (mKeyCache.indexOfValue(aKey) >= 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -344,8 +345,8 @@ public class Keyboard {
|
|||
|
||||
private int mMaxHeightCount = 0;
|
||||
private int mMaxWidthCount = 0;
|
||||
private final HashMap<Integer, Integer> mHeightHistogram = new HashMap<Integer, Integer>();
|
||||
private final HashMap<Integer, Integer> mWidthHistogram = new HashMap<Integer, Integer>();
|
||||
private final SparseIntArray mHeightHistogram = new SparseIntArray();
|
||||
private final SparseIntArray mWidthHistogram = new SparseIntArray();
|
||||
|
||||
private void clearHistogram() {
|
||||
mMostCommonKeyHeight = 0;
|
||||
|
@ -357,22 +358,22 @@ public class Keyboard {
|
|||
mWidthHistogram.clear();
|
||||
}
|
||||
|
||||
private static int updateHistogramCounter(HashMap<Integer, Integer> histogram,
|
||||
Integer key) {
|
||||
final int count = (histogram.containsKey(key) ? histogram.get(key) : 0) + 1;
|
||||
private static int updateHistogramCounter(SparseIntArray histogram, int key) {
|
||||
final int index = histogram.indexOfKey(key);
|
||||
final int count = (index >= 0 ? histogram.get(key) : 0) + 1;
|
||||
histogram.put(key, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
private void updateHistogram(Key key) {
|
||||
final Integer height = key.mHeight + key.mVerticalGap;
|
||||
final int height = key.mHeight + key.mVerticalGap;
|
||||
final int heightCount = updateHistogramCounter(mHeightHistogram, height);
|
||||
if (heightCount > mMaxHeightCount) {
|
||||
mMaxHeightCount = heightCount;
|
||||
mMostCommonKeyHeight = height;
|
||||
}
|
||||
|
||||
final Integer width = key.mWidth + key.mHorizontalGap;
|
||||
final int width = key.mWidth + key.mHorizontalGap;
|
||||
final int widthCount = updateHistogramCounter(mWidthHistogram, width);
|
||||
if (widthCount > mMaxWidthCount) {
|
||||
mMaxWidthCount = widthCount;
|
||||
|
|
|
@ -29,6 +29,7 @@ import android.content.res.TypedArray;
|
|||
import android.content.res.XmlResourceParser;
|
||||
import android.text.InputType;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
import android.util.Xml;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodSubtype;
|
||||
|
@ -116,9 +117,9 @@ public class KeyboardLayoutSet {
|
|||
InputMethodSubtype mSubtype;
|
||||
int mOrientation;
|
||||
int mWidth;
|
||||
// KeyboardLayoutSet element id to element's parameters map.
|
||||
final HashMap<Integer, ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
|
||||
new HashMap<Integer, ElementParams>();
|
||||
// Sparse array of KeyboardLayoutSet element parameters indexed by element's id.
|
||||
final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
|
||||
new SparseArray<ElementParams>();
|
||||
|
||||
static class ElementParams {
|
||||
int mKeyboardXmlId;
|
||||
|
|
|
@ -30,6 +30,7 @@ import android.graphics.Typeface;
|
|||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Message;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.SparseArray;
|
||||
import android.util.TypedValue;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
|
@ -42,7 +43,6 @@ import com.android.inputmethod.latin.R;
|
|||
import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
|
||||
import com.android.inputmethod.latin.StringUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
|
@ -124,12 +124,10 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
|||
private Canvas mCanvas;
|
||||
private final Paint mPaint = new Paint();
|
||||
private final Paint.FontMetrics mFontMetrics = new Paint.FontMetrics();
|
||||
// This map caches key label text height in pixel as value and key label text size as map key.
|
||||
private static final HashMap<Integer, Float> sTextHeightCache =
|
||||
new HashMap<Integer, Float>();
|
||||
// This map caches key label text width in pixel as value and key label text size as map key.
|
||||
private static final HashMap<Integer, Float> sTextWidthCache =
|
||||
new HashMap<Integer, Float>();
|
||||
// This sparse array caches key label text height in pixel indexed by key label text size.
|
||||
private static final SparseArray<Float> sTextHeightCache = new SparseArray<Float>();
|
||||
// This sparse array caches key label text width in pixel indexed by key label text size.
|
||||
private static final SparseArray<Float> sTextWidthCache = new SparseArray<Float>();
|
||||
private static final char[] KEY_LABEL_REFERENCE_CHAR = { 'M' };
|
||||
private static final char[] KEY_NUMERIC_HINT_LABEL_REFERENCE_CHAR = { '8' };
|
||||
|
||||
|
@ -766,7 +764,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
|||
private final Rect mTextBounds = new Rect();
|
||||
|
||||
private float getCharHeight(char[] referenceChar, Paint paint) {
|
||||
final Integer key = getCharGeometryCacheKey(referenceChar[0], paint);
|
||||
final int key = getCharGeometryCacheKey(referenceChar[0], paint);
|
||||
final Float cachedValue = sTextHeightCache.get(key);
|
||||
if (cachedValue != null)
|
||||
return cachedValue;
|
||||
|
@ -778,7 +776,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
|
|||
}
|
||||
|
||||
private float getCharWidth(char[] referenceChar, Paint paint) {
|
||||
final Integer key = getCharGeometryCacheKey(referenceChar[0], paint);
|
||||
final int key = getCharGeometryCacheKey(referenceChar[0], paint);
|
||||
final Float cachedValue = sTextWidthCache.get(key);
|
||||
if (cachedValue != null)
|
||||
return cachedValue;
|
||||
|
|
|
@ -24,7 +24,6 @@ import com.android.inputmethod.keyboard.Keyboard.Params.TouchPositionCorrection;
|
|||
import com.android.inputmethod.latin.JniUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class ProximityInfo {
|
||||
/** MAX_PROXIMITY_CHARS_SIZE must be the same as MAX_PROXIMITY_CHARS_SIZE_INTERNAL
|
||||
|
@ -190,10 +189,6 @@ public class ProximityInfo {
|
|||
private void computeNearestNeighbors() {
|
||||
final int defaultWidth = mMostCommonKeyWidth;
|
||||
final Key[] keys = mKeys;
|
||||
final HashMap<Integer, Key> keyCodeMap = new HashMap<Integer, Key>();
|
||||
for (final Key key : keys) {
|
||||
keyCodeMap.put(key.mCode, key);
|
||||
}
|
||||
final int thresholdBase = (int) (defaultWidth * SEARCH_DISTANCE);
|
||||
final int threshold = thresholdBase * thresholdBase;
|
||||
// Round-up so we don't have any pixels outside the grid
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.android.inputmethod.keyboard.internal;
|
|||
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.Log;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import com.android.inputmethod.keyboard.Keyboard;
|
||||
import com.android.inputmethod.latin.R;
|
||||
|
@ -89,7 +90,7 @@ public class KeyStyles {
|
|||
|
||||
private class DeclaredKeyStyle extends KeyStyle {
|
||||
private final String mParentStyleName;
|
||||
private final HashMap<Integer, Object> mStyleAttributes = new HashMap<Integer, Object>();
|
||||
private final SparseArray<Object> mStyleAttributes = new SparseArray<Object>();
|
||||
|
||||
public DeclaredKeyStyle(String parentStyleName) {
|
||||
mParentStyleName = parentStyleName;
|
||||
|
@ -100,8 +101,9 @@ public class KeyStyles {
|
|||
if (a.hasValue(index)) {
|
||||
return parseStringArray(a, index);
|
||||
}
|
||||
if (mStyleAttributes.containsKey(index)) {
|
||||
return (String[])mStyleAttributes.get(index);
|
||||
final Object value = mStyleAttributes.get(index);
|
||||
if (value != null) {
|
||||
return (String[])value;
|
||||
}
|
||||
final KeyStyle parentStyle = mStyles.get(mParentStyleName);
|
||||
return parentStyle.getStringArray(a, index);
|
||||
|
@ -112,8 +114,9 @@ public class KeyStyles {
|
|||
if (a.hasValue(index)) {
|
||||
return parseString(a, index);
|
||||
}
|
||||
if (mStyleAttributes.containsKey(index)) {
|
||||
return (String)mStyleAttributes.get(index);
|
||||
final Object value = mStyleAttributes.get(index);
|
||||
if (value != null) {
|
||||
return (String)value;
|
||||
}
|
||||
final KeyStyle parentStyle = mStyles.get(mParentStyleName);
|
||||
return parentStyle.getString(a, index);
|
||||
|
@ -124,8 +127,9 @@ public class KeyStyles {
|
|||
if (a.hasValue(index)) {
|
||||
return a.getInt(index, defaultValue);
|
||||
}
|
||||
if (mStyleAttributes.containsKey(index)) {
|
||||
return (Integer)mStyleAttributes.get(index);
|
||||
final Object value = mStyleAttributes.get(index);
|
||||
if (value != null) {
|
||||
return (Integer)value;
|
||||
}
|
||||
final KeyStyle parentStyle = mStyles.get(mParentStyleName);
|
||||
return parentStyle.getInt(a, index, defaultValue);
|
||||
|
@ -133,12 +137,13 @@ public class KeyStyles {
|
|||
|
||||
@Override
|
||||
public int getFlag(TypedArray a, int index) {
|
||||
int value = a.getInt(index, 0);
|
||||
if (mStyleAttributes.containsKey(index)) {
|
||||
value |= (Integer)mStyleAttributes.get(index);
|
||||
int flags = a.getInt(index, 0);
|
||||
final Object value = mStyleAttributes.get(index);
|
||||
if (value != null) {
|
||||
flags |= (Integer)value;
|
||||
}
|
||||
final KeyStyle parentStyle = mStyles.get(mParentStyleName);
|
||||
return value | parentStyle.getFlag(a, index);
|
||||
return flags | parentStyle.getFlag(a, index);
|
||||
}
|
||||
|
||||
void readKeyAttributes(TypedArray keyAttr) {
|
||||
|
|
|
@ -20,6 +20,7 @@ import android.content.res.Resources;
|
|||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.Log;
|
||||
import android.util.SparseIntArray;
|
||||
|
||||
import com.android.inputmethod.latin.R;
|
||||
|
||||
|
@ -31,8 +32,7 @@ public class KeyboardIconsSet {
|
|||
public static final int ICON_UNDEFINED = 0;
|
||||
private static final int ATTR_UNDEFINED = 0;
|
||||
|
||||
private static final HashMap<Integer, Integer> ATTR_ID_TO_ICON_ID
|
||||
= new HashMap<Integer, Integer>();
|
||||
private static final SparseIntArray ATTR_ID_TO_ICON_ID = new SparseIntArray();
|
||||
|
||||
// Icon name to icon id map.
|
||||
private static final HashMap<String, Integer> sNameToIdsMap = new HashMap<String, Integer>();
|
||||
|
@ -76,7 +76,9 @@ public class KeyboardIconsSet {
|
|||
}
|
||||
|
||||
public void loadIcons(final TypedArray keyboardAttrs) {
|
||||
for (final Integer attrId : ATTR_ID_TO_ICON_ID.keySet()) {
|
||||
final int size = ATTR_ID_TO_ICON_ID.size();
|
||||
for (int index = 0; index < size; index++) {
|
||||
final int attrId = ATTR_ID_TO_ICON_ID.keyAt(index);
|
||||
try {
|
||||
final Drawable icon = keyboardAttrs.getDrawable(attrId);
|
||||
setDefaultBounds(icon);
|
||||
|
|
Loading…
Reference in a new issue