Merge "Add PointerTracker argument to long press related methods" into gingerbread

main
Tadashi G. Takaoka 2010-09-02 04:31:57 -07:00 committed by Android (Google) Code Review
commit 6b4d521fb4
2 changed files with 33 additions and 15 deletions

View File

@ -254,9 +254,11 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener,
startKeyRepeatTimer(REPEAT_INTERVAL, msg.arg1, tracker); startKeyRepeatTimer(REPEAT_INTERVAL, msg.arg1, tracker);
break; break;
} }
case MSG_LONGPRESS_KEY: case MSG_LONGPRESS_KEY: {
openPopupIfRequired(msg.arg1); final PointerTracker tracker = (PointerTracker)msg.obj;
openPopupIfRequired(msg.arg1, tracker);
break; break;
}
} }
} }
@ -299,9 +301,9 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener,
return mInKeyRepeat; return mInKeyRepeat;
} }
public void startLongPressTimer(int keyIndex, long delay) { public void startLongPressTimer(long delay, int keyIndex, PointerTracker tracker) {
removeMessages(MSG_LONGPRESS_KEY); removeMessages(MSG_LONGPRESS_KEY);
sendMessageDelayed(obtainMessage(MSG_LONGPRESS_KEY, keyIndex, 0), delay); sendMessageDelayed(obtainMessage(MSG_LONGPRESS_KEY, keyIndex, 0, tracker), delay);
} }
public void cancelLongPressTimer() { public void cancelLongPressTimer() {
@ -962,16 +964,15 @@ public class LatinKeyboardBaseView extends View implements View.OnClickListener,
key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop());
} }
private boolean openPopupIfRequired(int keyIndex) { private boolean openPopupIfRequired(int keyIndex, PointerTracker tracker) {
// Check if we have a popup layout specified first. // Check if we have a popup layout specified first.
if (mPopupLayout == 0) { if (mPopupLayout == 0) {
return false; return false;
} }
if (keyIndex < 0 || keyIndex >= mKeys.length) {
return false;
}
Key popupKey = mKeys[keyIndex]; Key popupKey = tracker.getKey(keyIndex);
if (popupKey == null)
return false;
boolean result = onLongPress(popupKey); boolean result = onLongPress(popupKey);
if (result) { if (result) {
dismissKeyPreview(); dismissKeyPreview();

View File

@ -27,6 +27,7 @@ import android.view.ViewConfiguration;
public class PointerTracker { public class PointerTracker {
private static final String TAG = "PointerTracker"; private static final String TAG = "PointerTracker";
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
private static final boolean DEBUG_MOVE = true && DEBUG;
public interface UIProxy { public interface UIProxy {
public void invalidateKey(Key key); public void invalidateKey(Key key);
@ -155,12 +156,12 @@ public class PointerTracker {
repeatKey(keyIndex); repeatKey(keyIndex);
mHandler.startKeyRepeatTimer(REPEAT_START_DELAY, keyIndex, this); mHandler.startKeyRepeatTimer(REPEAT_START_DELAY, keyIndex, this);
} }
mHandler.startLongPressTimer(keyIndex, LONGPRESS_TIMEOUT); mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this);
} }
showKeyPreviewAndUpdateKey(keyIndex); showKeyPreviewAndUpdateKey(keyIndex);
updateMoveDebouncing(touchX, touchY); updateMoveDebouncing(touchX, touchY);
if (DEBUG) if (DEBUG)
Log.d(TAG, "onDownEvent: [" + mPointerId + "] modifier=" + isModifier()); debugLog("onDownEvent:", touchX, touchY);
} }
public void onMoveEvent(int touchX, int touchY, long eventTime) { public void onMoveEvent(int touchX, int touchY, long eventTime) {
@ -169,7 +170,7 @@ public class PointerTracker {
if (mCurrentKey == NOT_A_KEY) { if (mCurrentKey == NOT_A_KEY) {
updateTimeDebouncing(eventTime); updateTimeDebouncing(eventTime);
mCurrentKey = keyIndex; mCurrentKey = keyIndex;
mHandler.startLongPressTimer(keyIndex, LONGPRESS_TIMEOUT); mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this);
} else if (isMinorMoveBounce(touchX, touchY, keyIndex, mCurrentKey)) { } else if (isMinorMoveBounce(touchX, touchY, keyIndex, mCurrentKey)) {
updateTimeDebouncing(eventTime); updateTimeDebouncing(eventTime);
} else { } else {
@ -177,7 +178,7 @@ public class PointerTracker {
resetTimeDebouncing(eventTime, mCurrentKey); resetTimeDebouncing(eventTime, mCurrentKey);
resetMoveDebouncing(); resetMoveDebouncing();
mCurrentKey = keyIndex; mCurrentKey = keyIndex;
mHandler.startLongPressTimer(keyIndex, LONGPRESS_TIMEOUT); mHandler.startLongPressTimer(LONGPRESS_TIMEOUT, keyIndex, this);
} }
} else { } else {
mHandler.cancelLongPressTimer(); mHandler.cancelLongPressTimer();
@ -190,11 +191,13 @@ public class PointerTracker {
*/ */
showKeyPreviewAndUpdateKey(isMinorTimeBounce() ? mLastKey : mCurrentKey); showKeyPreviewAndUpdateKey(isMinorTimeBounce() ? mLastKey : mCurrentKey);
updateMoveDebouncing(touchX, touchY); updateMoveDebouncing(touchX, touchY);
if (DEBUG_MOVE)
debugLog("onMoveEvent:", touchX, touchY);
} }
public void onUpEvent(int touchX, int touchY, long eventTime) { public void onUpEvent(int touchX, int touchY, long eventTime) {
if (DEBUG) if (DEBUG)
Log.d(TAG, "onUpEvent: [" + mPointerId + "] modifier=" + isModifier()); debugLog("onUpEvent :", touchX, touchY);
int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(touchX, touchY, null); int keyIndex = mKeyDetector.getKeyIndexAndNearbyCodes(touchX, touchY, null);
boolean wasInKeyRepeat = mHandler.isInKeyRepeat(); boolean wasInKeyRepeat = mHandler.isInKeyRepeat();
mHandler.cancelKeyTimers(); mHandler.cancelKeyTimers();
@ -222,7 +225,7 @@ public class PointerTracker {
public void onCancelEvent(int touchX, int touchY, long eventTime) { public void onCancelEvent(int touchX, int touchY, long eventTime) {
if (DEBUG) if (DEBUG)
Log.d(TAG, "onCancelEvent: [" + mPointerId + "]"); debugLog("onCancelEvt:", touchX, touchY);
mHandler.cancelKeyTimers(); mHandler.cancelKeyTimers();
mHandler.cancelPopupPreview(); mHandler.cancelPopupPreview();
mProxy.dismissPopupKeyboard(); mProxy.dismissPopupKeyboard();
@ -412,4 +415,18 @@ public class PointerTracker {
resetMultiTap(); resetMultiTap();
} }
} }
private void debugLog(String title, int x, int y) {
Key key = getKey(mCurrentKey);
final String code;
if (key == null) {
code = "----";
} else {
int primaryCode = key.codes[0];
code = String.format((primaryCode < 0) ? "%4d" : "0x%02x", primaryCode);
}
Log.d(TAG,
String.format("%s [%d] %d,%d %s %s", title, mPointerId, x, y, code,
isModifier() ? "modifier" : ""));
}
} }