diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index bd3b0e11481293a13d4b1c1c80052efb9b9b4ae0..0be4cf3a78e9f913e0c2a6d37ac8728559ccb478 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -197,6 +197,20 @@ public class Keyboard { return null; } + public boolean hasKey(Key aKey) { + if (mKeyCache.containsKey(aKey)) { + return true; + } + + for (final Key key : mKeys) { + if (key == aKey) { + mKeyCache.put(key.mCode, key); + return true; + } + } + return false; + } + public static boolean isLetterCode(int code) { return code >= MINIMUM_LETTER_CODE; } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index c0d5b677223cd9841b32e9003c050b606a7137f3..cc0a1fb10b019c6101f35c45da6fabe2c6343a48 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -487,6 +487,9 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { } else { // Draw invalidated keys. for (final Key key : mInvalidatedKeys) { + if (!mKeyboard.hasKey(key)) { + continue; + } final int x = key.mX + getPaddingLeft(); final int y = key.mY + getPaddingTop(); mInvalidatedKeysRect.set(x, y, x + key.mWidth, y + key.mHeight);