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();