am 6817946f: Merge change 25601 into eclair

Merge commit '6817946fd0a009a554f6c0aae1b6c608ebd531c5' into eclair-plus-aosp

* commit '6817946fd0a009a554f6c0aae1b6c608ebd531c5':
  Fix possible race condition when switching keyboards while there are pending messages.
This commit is contained in:
Amith Yamasani
2009-09-17 15:56:02 -07:00
committed by Android Git Automerger

View File

@@ -408,6 +408,8 @@ public class KeyboardView extends View implements View.OnClickListener {
if (mKeyboard != null) { if (mKeyboard != null) {
showPreview(NOT_A_KEY); showPreview(NOT_A_KEY);
} }
// Remove any pending messages
removeMessages();
mKeyboard = keyboard; mKeyboard = keyboard;
List<Key> keys = mKeyboard.getKeys(); List<Key> keys = mKeyboard.getKeys();
mKeys = keys.toArray(new Key[keys.size()]); 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) { private void showKey(final int keyIndex) {
final PopupWindow previewPopup = mPreviewPopup; final PopupWindow previewPopup = mPreviewPopup;
final Key[] keys = mKeys; final Key[] keys = mKeys;
if (keyIndex < 0 || keyIndex >= mKeys.length) return;
Key key = keys[keyIndex]; Key key = keys[keyIndex];
if (key.icon != null) { if (key.icon != null) {
mPreviewText.setCompoundDrawables(null, null, null, mPreviewText.setCompoundDrawables(null, null, null,
@@ -1145,9 +1148,7 @@ public class KeyboardView extends View implements View.OnClickListener {
break; break;
case MotionEvent.ACTION_UP: case MotionEvent.ACTION_UP:
mHandler.removeMessages(MSG_SHOW_PREVIEW); removeMessages();
mHandler.removeMessages(MSG_REPEAT);
mHandler.removeMessages(MSG_LONGPRESS);
if (keyIndex == mCurrentKey) { if (keyIndex == mCurrentKey) {
mCurrentKeyTime += eventTime - mLastMoveTime; mCurrentKeyTime += eventTime - mLastMoveTime;
} else { } else {
@@ -1203,16 +1204,20 @@ public class KeyboardView extends View implements View.OnClickListener {
if (mPreviewPopup.isShowing()) { if (mPreviewPopup.isShowing()) {
mPreviewPopup.dismiss(); mPreviewPopup.dismiss();
} }
mHandler.removeMessages(MSG_REPEAT); removeMessages();
mHandler.removeMessages(MSG_LONGPRESS);
mHandler.removeMessages(MSG_SHOW_PREVIEW);
dismissPopupKeyboard(); dismissPopupKeyboard();
mBuffer = null; mBuffer = null;
mCanvas = null; mCanvas = null;
mMiniKeyboardCache.clear(); mMiniKeyboardCache.clear();
} }
private void removeMessages() {
mHandler.removeMessages(MSG_REPEAT);
mHandler.removeMessages(MSG_LONGPRESS);
mHandler.removeMessages(MSG_SHOW_PREVIEW);
}
@Override @Override
public void onDetachedFromWindow() { public void onDetachedFromWindow() {
super.onDetachedFromWindow(); super.onDetachedFromWindow();