Fix bug 2045914: When pressing 2 keys, sometimes the second key gets stuck.

Also lock repeatable keys so that you don't get space and 'v', for example,
when you move just a little bit off the spacebar.
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index 9e966cd..a141a2a 100755
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -1037,6 +1037,10 @@
                         me.getX(), me.getY(), me.getMetaState());
                 result = onModifiedTouchEvent(down);
                 down.recycle();
+                // If it's an up action, then deliver the up as well.
+                if (me.getAction() == MotionEvent.ACTION_UP) {
+                    result = onModifiedTouchEvent(me);
+                }
             } else {
                 // Send an up event for the last pointer
                 MotionEvent up = MotionEvent.obtain(now, now, MotionEvent.ACTION_UP,
@@ -1067,7 +1071,7 @@
         if (mGestureDetector.onTouchEvent(me)) {
             showPreview(NOT_A_KEY);
             mHandler.removeMessages(MSG_REPEAT);
-            mHandler.removeMessages(MSG_LONGPRESS);            
+            mHandler.removeMessages(MSG_LONGPRESS);
             return true;
         }
         
@@ -1116,7 +1120,7 @@
                         if (keyIndex == mCurrentKey) {
                             mCurrentKeyTime += eventTime - mLastMoveTime;
                             continueLongPress = true;
-                        } else {
+                        } else if (mRepeatKeyIndex == NOT_A_KEY) {
                             resetMultiTap();
                             mLastKey = mCurrentKey;
                             mLastCodeX = mLastX;
@@ -1127,10 +1131,6 @@
                             mCurrentKeyTime = 0;
                         }
                     }
-                    if (keyIndex != mRepeatKeyIndex) {
-                        mHandler.removeMessages(MSG_REPEAT);
-                        mRepeatKeyIndex = NOT_A_KEY;
-                    }
                 }
                 if (!continueLongPress) {
                     // Cancel old longpress
@@ -1141,7 +1141,7 @@
                         mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT);
                     }
                 }
-                showPreview(keyIndex);
+                showPreview(mCurrentKey);
                 break;
 
             case MotionEvent.ACTION_UP: