diff options
| author | Amith Yamasani <yamasani@google.com> | 2009-09-17 11:27:14 -0700 |
|---|---|---|
| committer | Amith Yamasani <yamasani@google.com> | 2009-09-17 15:03:40 -0700 |
| commit | ebe3d518ffaeb14f3f2e0e74cdbc15fd2ddf4453 (patch) | |
| tree | 299298b67a7092a632aa15ba997e711554a877a7 /core/java/android/inputmethodservice | |
| parent | d55de40481c6ec7d8fbd1a38c80a6c66bf462a71 (diff) | |
| download | frameworks_base-ebe3d518ffaeb14f3f2e0e74cdbc15fd2ddf4453.zip frameworks_base-ebe3d518ffaeb14f3f2e0e74cdbc15fd2ddf4453.tar.gz frameworks_base-ebe3d518ffaeb14f3f2e0e74cdbc15fd2ddf4453.tar.bz2 | |
Fix possible race condition when switching keyboards while there are pending messages.
Diffstat (limited to 'core/java/android/inputmethodservice')
| -rwxr-xr-x | core/java/android/inputmethodservice/KeyboardView.java | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java index a141a2a..e59a987 100755 --- a/core/java/android/inputmethodservice/KeyboardView.java +++ b/core/java/android/inputmethodservice/KeyboardView.java @@ -408,6 +408,8 @@ public class KeyboardView extends View implements View.OnClickListener { if (mKeyboard != null) { showPreview(NOT_A_KEY); } + // Remove any pending messages + removeMessages(); mKeyboard = keyboard; List<Key> keys = mKeyboard.getKeys(); mKeys = keys.toArray(new Key[keys.size()]); @@ -828,6 +830,7 @@ public class KeyboardView extends View implements View.OnClickListener { private void showKey(final int keyIndex) { final PopupWindow previewPopup = mPreviewPopup; final Key[] keys = mKeys; + if (keyIndex < 0 || keyIndex >= mKeys.length) return; Key key = keys[keyIndex]; if (key.icon != null) { mPreviewText.setCompoundDrawables(null, null, null, @@ -1145,9 +1148,7 @@ public class KeyboardView extends View implements View.OnClickListener { break; case MotionEvent.ACTION_UP: - mHandler.removeMessages(MSG_SHOW_PREVIEW); - mHandler.removeMessages(MSG_REPEAT); - mHandler.removeMessages(MSG_LONGPRESS); + removeMessages(); if (keyIndex == mCurrentKey) { mCurrentKeyTime += eventTime - mLastMoveTime; } else { @@ -1203,16 +1204,20 @@ public class KeyboardView extends View implements View.OnClickListener { if (mPreviewPopup.isShowing()) { mPreviewPopup.dismiss(); } - mHandler.removeMessages(MSG_REPEAT); - mHandler.removeMessages(MSG_LONGPRESS); - mHandler.removeMessages(MSG_SHOW_PREVIEW); + removeMessages(); dismissPopupKeyboard(); mBuffer = null; mCanvas = null; mMiniKeyboardCache.clear(); } - + + private void removeMessages() { + mHandler.removeMessages(MSG_REPEAT); + mHandler.removeMessages(MSG_LONGPRESS); + mHandler.removeMessages(MSG_SHOW_PREVIEW); + } + @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); |
