From ee66e6fa90596e26d9519ac7bb261644377d32c8 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Tue, 11 Jan 2011 19:02:21 +0900 Subject: [PATCH] Reset old keyboard state before switching to new keyboard This change is ported version of I8030202f from Gingerbread. Bug: 3322158 Change-Id: Idc1ef7f174b50b0478ba53b14427485275e97748 --- .../android/inputmethod/keyboard/LatinKeyboard.java | 7 ++++--- .../inputmethod/keyboard/LatinKeyboardView.java | 13 +++++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java index d6dfd0da5..77dde8d1b 100644 --- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java @@ -48,7 +48,7 @@ public class LatinKeyboard extends Keyboard { private final Drawable mButtonArrowLeftIcon; private final Drawable mButtonArrowRightIcon; private final int mSpaceBarTextShadowColor; - private int mSpaceKeyIndex = -1; + private final int[] mSpaceKeyIndexArray; private int mSpaceDragStartX; private int mSpaceDragLastDiff; private final Context mContext; @@ -92,7 +92,8 @@ public class LatinKeyboard extends Keyboard { mButtonArrowRightIcon = res.getDrawable(R.drawable.sym_keyboard_language_arrows_right); sSpacebarVerticalCorrection = res.getDimensionPixelOffset( R.dimen.spacebar_vertical_correction); - mSpaceKeyIndex = indexOf(CODE_SPACE); + // The index of space key is available only after Keyboard constructor has finished. + mSpaceKeyIndexArray = new int[] { indexOf(CODE_SPACE) }; } /** @@ -418,7 +419,7 @@ public class LatinKeyboard extends Keyboard { @Override public int[] getNearestKeys(int x, int y) { if (mCurrentlyInSpace) { - return new int[] { mSpaceKeyIndex }; + return mSpaceKeyIndexArray; } else { // Avoid dead pixels at edges of the keyboard return super.getNearestKeys(Math.max(0, Math.min(x, getMinWidth() - 1)), diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java index 6b052c7e7..51bfbf1f9 100644 --- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java @@ -62,13 +62,18 @@ public class LatinKeyboardView extends KeyboardView { } } - public void setLatinKeyboard(LatinKeyboard k) { - super.setKeyboard(k); + public void setLatinKeyboard(LatinKeyboard newKeyboard) { + final LatinKeyboard oldKeyboard = getLatinKeyboard(); + if (oldKeyboard != null) { + // Reset old keyboard state before switching to new keyboard. + oldKeyboard.keyReleased(); + } + super.setKeyboard(newKeyboard); // One-seventh of the keyboard width seems like a reasonable threshold - mJumpThresholdSquare = k.getMinWidth() / 7; + mJumpThresholdSquare = newKeyboard.getMinWidth() / 7; mJumpThresholdSquare *= mJumpThresholdSquare; // Assuming there are 4 rows, this is the coordinate of the last row - mLastRowY = (k.getHeight() * 3) / 4; + mLastRowY = (newKeyboard.getHeight() * 3) / 4; } public LatinKeyboard getLatinKeyboard() {