summaryrefslogtreecommitdiff
path: root/java/src/com/android/inputmethod/keyboard/Keyboard.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/keyboard/Keyboard.java')
-rw-r--r--java/src/com/android/inputmethod/keyboard/Keyboard.java19
1 files changed, 18 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index 4a28bf1de..b3b20ca21 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -24,6 +24,7 @@ import com.android.inputmethod.keyboard.internal.KeyboardParams;
import com.android.inputmethod.keyboard.internal.KeyboardShiftState;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -65,7 +66,6 @@ public class Keyboard {
public static final int CODE_DIGIT0 = '0';
public static final int CODE_PLUS = '+';
-
/** Special keys code. These should be aligned with values/keycodes.xml */
public static final int CODE_DUMMY = 0;
public static final int CODE_SHIFT = -1;
@@ -111,6 +111,7 @@ public class Keyboard {
public final Map<Key, Drawable> mUnshiftedIcons;
public final KeyboardIconsSet mIconsSet;
+ private final Map<Integer, Key> mKeyCache = new HashMap<Integer, Key>();
private final KeyboardShiftState mShiftState = new KeyboardShiftState();
private final ProximityInfo mProximityInfo;
@@ -145,6 +146,22 @@ public class Keyboard {
return mProximityInfo;
}
+ public Key getKey(int code) {
+ final Integer keyCode = code;
+ if (mKeyCache.containsKey(keyCode)) {
+ return mKeyCache.get(keyCode);
+ }
+
+ for (final Key key : mKeys) {
+ if (key.mCode == code) {
+ mKeyCache.put(keyCode, key);
+ return key;
+ }
+ }
+ mKeyCache.put(keyCode, null);
+ return null;
+ }
+
public boolean hasShiftLockKey() {
return !mShiftLockKeys.isEmpty();
}