Fix ArrayIndexOutOfBoundsException.

bug: 2964045
Change-Id: I97d95181e1a6838ace9c135aa92e7f20034e821f
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
index efce0d1..280801a 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
@@ -500,8 +500,9 @@
             if (!wasInKeyRepeat && !mProxy.isMiniKeyboardOnScreen()) {
                 detectAndSendKey(mCurrentKey, touchX, touchY, eventTime);
             }
-            if (keyIndex != NOT_A_KEY)
+            if (keyIndex != NOT_A_KEY && keyIndex < mKeys.length) {
                 mProxy.invalidateKey(mKeys[keyIndex]);
+            }
         }
 
         public void onCancelEvent(int touchX, int touchY, long eventTime) {
@@ -509,8 +510,9 @@
             mHandler.cancelPopupPreview();
             mProxy.dismissPopupKeyboard();
             showKeyPreviewAndUpdateKey(NOT_A_KEY);
-            if (mCurrentKey != NOT_A_KEY)
+            if (mCurrentKey != NOT_A_KEY && mCurrentKey < mKeys.length) {
                mProxy.invalidateKey(mKeys[mCurrentKey]);
+            }
         }
 
         public void repeatKey(int keyIndex) {
@@ -670,7 +672,7 @@
         }
 
         private void checkMultiTap(long eventTime, int keyIndex) {
-            if (keyIndex == NOT_A_KEY) return;
+            if (keyIndex == NOT_A_KEY || keyIndex >= mKeys.length) return;
             Key key = mKeys[keyIndex];
             if (key.codes.length > 1) {
                 mInMultiTap = true;