Fix NPE introduced by Change-Id: Ie482167b2ae2804fa1aa43ffb5067af47b7553f1

Bug: 2868304
Change-Id: I60895e76c4288d4e0e960e5ba22cb47c4b989bf3
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
index 9570da7..e7fbd22 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
@@ -320,6 +320,8 @@
     };
 
     static class KeyDebouncer {
+        private Key[] mKeys;
+
         // for move de-bouncing
         private int mLastCodeX;
         private int mLastCodeY;
@@ -334,7 +336,8 @@
 
         private final int mKeyDebounceThresholdSquared;
 
-        KeyDebouncer(float hysteresisPixel) {
+        KeyDebouncer(Key[] keys, float hysteresisPixel) {
+            mKeys = keys;
             mKeyDebounceThresholdSquared = (int)(hysteresisPixel * hysteresisPixel);
         }
 
@@ -373,11 +376,15 @@
             mLastCodeY = mLastY;
         }
 
-        public boolean isMinorMoveBounce(int x, int y, Key newKey, Key curKey) {
-            if (newKey == curKey)
+        public boolean isMinorMoveBounce(int x, int y, int newKey, int curKey) {
+            if (newKey == curKey) {
                 return true;
-
-            return getSquareDistanceToKeyEdge(x, y, curKey) < mKeyDebounceThresholdSquared;
+            } else if (curKey == NOT_A_KEY) {
+                return false;
+            } else {
+                return getSquareDistanceToKeyEdge(x, y, mKeys[curKey])
+                    < mKeyDebounceThresholdSquared;
+            }
         }
 
         private static int getSquareDistanceToKeyEdge(int x, int y, Key key) {
@@ -774,7 +781,7 @@
 
         final float hysteresisPixel = getContext().getResources()
                 .getDimension(R.dimen.key_debounce_hysteresis_distance);
-        mDebouncer = new KeyDebouncer(hysteresisPixel);
+        mDebouncer = new KeyDebouncer(keys, hysteresisPixel);
     }
 
     @Override
@@ -1368,8 +1375,8 @@
                     if (mCurrentKey == NOT_A_KEY) {
                         mCurrentKey = keyIndex;
                         mDebouncer.updateTimeDebouncing(eventTime);
-                    } else if (mDebouncer.isMinorMoveBounce(touchX, touchY, mKeys[keyIndex],
-                            mKeys[mCurrentKey])) {
+                    } else if (mDebouncer.isMinorMoveBounce(touchX, touchY, keyIndex,
+                            mCurrentKey)) {
                         mDebouncer.updateTimeDebouncing(eventTime);
                         continueLongPress = true;
                     } else if (mRepeatKeyIndex == NOT_A_KEY) {
@@ -1398,8 +1405,7 @@
 
             case MotionEvent.ACTION_UP:
                 mHandler.cancelKeyTimersAndPopupPreview();
-                if (mDebouncer.isMinorMoveBounce(touchX, touchY, mKeys[keyIndex],
-                        mKeys[mCurrentKey])) {
+                if (mDebouncer.isMinorMoveBounce(touchX, touchY, keyIndex, mCurrentKey)) {
                     mDebouncer.updateTimeDebouncing(eventTime);
                 } else {
                     resetMultiTap();