Reset old keyboard state before switching to new keyboard (DO NOT MERGE)

Bug: 3322158
Change-Id: I8030202f9b1b491bd9b7acf5ce14b6d8f14db978
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java
index 45a4a95..fbba55b 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java
@@ -67,7 +67,7 @@
     private final int NUMBER_HINT_COUNT = 10;
     private Key[] mNumberHintKeys;
     private Drawable[] mNumberHintIcons = new Drawable[NUMBER_HINT_COUNT];
-    private int mSpaceKeyIndex = -1;
+    private final int[] mSpaceKeyIndexArray;
     private int mSpaceDragStartX;
     private int mSpaceDragLastDiff;
     private Locale mLocale;
@@ -144,7 +144,8 @@
                 R.dimen.spacebar_vertical_correction);
         mIsAlphaKeyboard = xmlLayoutResId == R.xml.kbd_qwerty
                 || xmlLayoutResId == R.xml.kbd_qwerty_black;
-        mSpaceKeyIndex = indexOf(LatinIME.KEYCODE_SPACE);
+        // The index of space key is available only after Keyboard constructor has finished.
+        mSpaceKeyIndexArray = new int[] { indexOf(LatinIME.KEYCODE_SPACE) };
         initializeNumberHintResources(context);
         // TODO remove this initialization after cleanup
         mVerticalGap = super.getVerticalGap();
@@ -795,7 +796,7 @@
     @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/latin/LatinKeyboardView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
index 22d39f7..a5476e4 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardView.java
@@ -76,14 +76,19 @@
     }
 
     @Override
-    public void setKeyboard(Keyboard k) {
-        super.setKeyboard(k);
+    public void setKeyboard(Keyboard newKeyboard) {
+        final Keyboard oldKeyboard = getKeyboard();
+        if (oldKeyboard instanceof LatinKeyboard) {
+            // Reset old keyboard state before switching to new keyboard.
+            ((LatinKeyboard)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;
-        setKeyboardLocal(k);
+        mLastRowY = (newKeyboard.getHeight() * 3) / 4;
+        setKeyboardLocal(newKeyboard);
     }
 
     @Override