aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2010-07-26 22:44:36 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-07-26 22:44:36 -0700
commit994d4000f4bc1e8ce348241e1571f8fec1270fc2 (patch)
treec5d71c43fb6b0eb21dda85d3e344637b3e7d87fd /java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
parent999368ef0c6eb55ab65f288401a35011b73126f3 (diff)
parentbd0f31f49262855b26bad7b9358cb13cfc3c7957 (diff)
downloadlatinime-994d4000f4bc1e8ce348241e1571f8fec1270fc2.tar.gz
latinime-994d4000f4bc1e8ce348241e1571f8fec1270fc2.tar.xz
latinime-994d4000f4bc1e8ce348241e1571f8fec1270fc2.zip
Merge "Refactor UI message handling class to be more readable"
Diffstat (limited to 'java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java113
1 files changed, 73 insertions, 40 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
index 4205aadcf..0a3e4a7c7 100644
--- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
+++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java
@@ -171,11 +171,6 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
/** Listener for {@link OnKeyboardActionListener}. */
private OnKeyboardActionListener mKeyboardActionListener;
- private static final int MSG_SHOW_PREVIEW = 1;
- private static final int MSG_REMOVE_PREVIEW = 2;
- private static final int MSG_REPEAT = 3;
- private static final int MSG_LONGPRESS = 4;
-
private static final int DELAY_BEFORE_PREVIEW = 0;
private static final int DELAY_AFTER_PREVIEW = 70;
private static final int DEBOUNCE_TIME = 70;
@@ -258,27 +253,79 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
/** The canvas for the above mutable keyboard bitmap */
private Canvas mCanvas;
- Handler mHandler = new Handler() {
+ UIHandler mHandler = new UIHandler();
+
+ class UIHandler extends Handler {
+ private static final int MSG_POPUP_PREVIEW = 1;
+ private static final int MSG_DISMISS_PREVIEW = 2;
+ private static final int MSG_REPEAT_KEY = 3;
+ private static final int MSG_LOGPRESS_KEY = 4;
+
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
- case MSG_SHOW_PREVIEW:
+ case MSG_POPUP_PREVIEW:
showKey(msg.arg1);
break;
- case MSG_REMOVE_PREVIEW:
+ case MSG_DISMISS_PREVIEW:
mPreviewText.setVisibility(INVISIBLE);
break;
- case MSG_REPEAT:
+ case MSG_REPEAT_KEY:
if (repeatKey()) {
- Message repeat = Message.obtain(this, MSG_REPEAT);
- sendMessageDelayed(repeat, REPEAT_INTERVAL);
+ startKeyRepeatTimer(REPEAT_INTERVAL);
}
break;
- case MSG_LONGPRESS:
+ case MSG_LOGPRESS_KEY:
openPopupIfRequired((MotionEvent) msg.obj);
break;
}
}
+
+ public void popupPreview(int keyIndex, long delay) {
+ sendMessageDelayed(obtainMessage(MSG_POPUP_PREVIEW, keyIndex, 0), delay);
+ }
+
+ public void cancelPopupPreview() {
+ removeMessages(MSG_POPUP_PREVIEW);
+ }
+
+ public void dismissPreview(long delay) {
+ sendMessageDelayed(obtainMessage(MSG_DISMISS_PREVIEW), delay);
+ }
+
+ public void cancelDismissPreview() {
+ removeMessages(MSG_DISMISS_PREVIEW);
+ }
+
+ public void startKeyRepeatTimer(long delay) {
+ sendMessageDelayed(obtainMessage(MSG_REPEAT_KEY), delay);
+ }
+
+ public void startLongPressTimer(MotionEvent me, long delay) {
+ sendMessageDelayed(obtainMessage(MSG_LOGPRESS_KEY, me), delay);
+ }
+
+ public void cancelLongPressTimer() {
+ removeMessages(MSG_LOGPRESS_KEY);
+ }
+
+ public void cancelKeyTimers() {
+ removeMessages(MSG_REPEAT_KEY);
+ removeMessages(MSG_LOGPRESS_KEY);
+ }
+
+ public void cancelKeyTimersAndPopupPreview() {
+ removeMessages(MSG_REPEAT_KEY);
+ removeMessages(MSG_LOGPRESS_KEY);
+ removeMessages(MSG_POPUP_PREVIEW);
+ }
+
+ public void cancelAllMessages() {
+ removeMessages(MSG_REPEAT_KEY);
+ removeMessages(MSG_LOGPRESS_KEY);
+ removeMessages(MSG_POPUP_PREVIEW);
+ removeMessages(MSG_DISMISS_PREVIEW);
+ }
};
public LatinKeyboardBaseView(Context context, AttributeSet attrs) {
@@ -475,8 +522,8 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
if (mKeyboard != null) {
showPreview(NOT_A_KEY);
}
- // Remove any pending messages
- removeMessages();
+ // Remove any pending messages, except dismissing preview
+ mHandler.cancelKeyTimersAndPopupPreview();
mKeyboard = keyboard;
List<Key> keys = mKeyboard.getKeys();
mKeys = keys.toArray(new Key[keys.size()]);
@@ -885,12 +932,10 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
}
// If key changed and preview is on ...
if (oldKeyIndex != mCurrentKeyIndex && mShowPreview) {
- mHandler.removeMessages(MSG_SHOW_PREVIEW);
+ mHandler.cancelPopupPreview();
if (previewPopup.isShowing()) {
if (keyIndex == NOT_A_KEY) {
- mHandler.sendMessageDelayed(mHandler
- .obtainMessage(MSG_REMOVE_PREVIEW),
- DELAY_AFTER_PREVIEW);
+ mHandler.dismissPreview(DELAY_AFTER_PREVIEW);
}
}
if (keyIndex != NOT_A_KEY) {
@@ -898,9 +943,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
// Show right away, if it's already visible and finger is moving around
showKey(keyIndex);
} else {
- mHandler.sendMessageDelayed(
- mHandler.obtainMessage(MSG_SHOW_PREVIEW, keyIndex, 0),
- DELAY_BEFORE_PREVIEW);
+ mHandler.popupPreview(keyIndex, DELAY_BEFORE_PREVIEW);
}
}
}
@@ -944,7 +987,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
mPopupPreviewX = 160 - mPreviewText.getMeasuredWidth() / 2;
mPopupPreviewY = - mPreviewText.getMeasuredHeight();
}
- mHandler.removeMessages(MSG_REMOVE_PREVIEW);
+ mHandler.cancelDismissPreview();
if (mOffsetInWindow == null) {
mOffsetInWindow = new int[2];
getLocationInWindow(mOffsetInWindow);
@@ -1190,8 +1233,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
if (mGestureDetector.onTouchEvent(me)) {
showPreview(NOT_A_KEY);
- mHandler.removeMessages(MSG_REPEAT);
- mHandler.removeMessages(MSG_LONGPRESS);
+ mHandler.cancelKeyTimers();
return true;
}
@@ -1220,8 +1262,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
mKeys[keyIndex].codes[0] : 0);
if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) {
mRepeatKeyIndex = mCurrentKey;
- Message msg = mHandler.obtainMessage(MSG_REPEAT);
- mHandler.sendMessageDelayed(msg, REPEAT_START_DELAY);
+ mHandler.startKeyRepeatTimer(REPEAT_START_DELAY);
repeatKey();
// Delivering the key could have caused an abort
if (mAbortKey) {
@@ -1230,8 +1271,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
}
}
if (mCurrentKey != NOT_A_KEY) {
- Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me);
- mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT);
+ mHandler.startLongPressTimer(me, LONGPRESS_TIMEOUT);
}
showPreview(keyIndex);
break;
@@ -1261,11 +1301,10 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
}
if (!continueLongPress) {
// Cancel old longpress
- mHandler.removeMessages(MSG_LONGPRESS);
+ mHandler.cancelLongPressTimer();
// Start new longpress if key has changed
if (keyIndex != NOT_A_KEY) {
- Message msg = mHandler.obtainMessage(MSG_LONGPRESS, me);
- mHandler.sendMessageDelayed(msg, LONGPRESS_TIMEOUT);
+ mHandler.startLongPressTimer(me, LONGPRESS_TIMEOUT);
}
}
showPreview(mCurrentKey);
@@ -1273,7 +1312,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
break;
case MotionEvent.ACTION_UP:
- removeMessages();
+ mHandler.cancelKeyTimersAndPopupPreview();
if (keyIndex == mCurrentKey) {
mCurrentKeyTime += eventTime - mLastMoveTime;
} else {
@@ -1299,7 +1338,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
mRepeatKeyIndex = NOT_A_KEY;
break;
case MotionEvent.ACTION_CANCEL:
- removeMessages();
+ mHandler.cancelKeyTimersAndPopupPreview();
dismissPopupKeyboard();
mAbortKey = true;
showPreview(NOT_A_KEY);
@@ -1337,7 +1376,7 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
if (mPreviewPopup.isShowing()) {
mPreviewPopup.dismiss();
}
- removeMessages();
+ mHandler.cancelAllMessages();
dismissPopupKeyboard();
mBuffer = null;
@@ -1345,12 +1384,6 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener
mMiniKeyboardCache.clear();
}
- private void removeMessages() {
- mHandler.removeMessages(MSG_REPEAT);
- mHandler.removeMessages(MSG_LONGPRESS);
- mHandler.removeMessages(MSG_SHOW_PREVIEW);
- }
-
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();