From 87fe3b8556e3cf91b3273caeddc6e2872e8ab991 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 29 Jul 2010 11:32:27 -0700 Subject: [PATCH] Fix NPE introduced by Change-Id: Ie482167b2ae2804fa1aa43ffb5067af47b7553f1 Bug: 2868304 Change-Id: I60895e76c4288d4e0e960e5ba22cb47c4b989bf3 --- .../latin/LatinKeyboardBaseView.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 9570da7ba..e7fbd22dd 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -320,6 +320,8 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener }; static class KeyDebouncer { + private Key[] mKeys; + // for move de-bouncing private int mLastCodeX; private int mLastCodeY; @@ -334,7 +336,8 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener private final int mKeyDebounceThresholdSquared; - KeyDebouncer(float hysteresisPixel) { + KeyDebouncer(Key[] keys, float hysteresisPixel) { + mKeys = keys; mKeyDebounceThresholdSquared = (int)(hysteresisPixel * hysteresisPixel); } @@ -373,11 +376,15 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener 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 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener 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 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener 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 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener 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();