Don't start long press timer while other one is running

Bug: 11908158
Bug: 12088861
Change-Id: I2537855f505884da9fe958d946c79840bd19dc5f
This commit is contained in:
Tadashi G. Takaoka 2013-11-28 19:13:38 +09:00
parent 7c8075c2ac
commit fa860a091e
3 changed files with 43 additions and 31 deletions

View file

@ -425,8 +425,8 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
*/
@Override
public void setKeyboard(final Keyboard keyboard) {
// Remove any pending messages, except dismissing preview and key repeat.
mKeyTimerHandler.cancelLongPressTimer();
// Remove any pending messages.
mKeyTimerHandler.cancelAllKeyTimers();
super.setKeyboard(keyboard);
mKeyDetector.setKeyboard(
keyboard, -getPaddingLeft(), -getPaddingTop() + getVerticalCorrection());
@ -987,7 +987,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
if (mNonDistinctMultitouchHelper != null) {
if (me.getPointerCount() > 1 && mKeyTimerHandler.isInKeyRepeat()) {
// Key repeating timer will be canceled if 2 or more keys are in action.
mKeyTimerHandler.cancelKeyRepeatTimer();
mKeyTimerHandler.cancelKeyRepeatTimers();
}
// Non distinct multitouch screen support
mNonDistinctMultitouchHelper.processMotionEvent(me, mKeyDetector);

View file

@ -67,13 +67,13 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
public interface TimerProxy {
public void startTypingStateTimer(Key typedKey);
public boolean isTypingState();
public void startKeyRepeatTimer(PointerTracker tracker, int repeatCount, int delay);
public void startLongPressTimer(PointerTracker tracker, int delay);
public void cancelLongPressTimer();
public void startKeyRepeatTimerOf(PointerTracker tracker, int repeatCount, int delay);
public void startLongPressTimerOf(PointerTracker tracker, int delay);
public void cancelLongPressTimerOf(PointerTracker tracker);
public void cancelKeyTimersOf(PointerTracker tracker);
public void startDoubleTapShiftKeyTimer();
public void cancelDoubleTapShiftKeyTimer();
public boolean isInDoubleTapShiftKeyTimeout();
public void cancelKeyTimers();
public void startUpdateBatchInputTimer(PointerTracker tracker);
public void cancelUpdateBatchInputTimer(PointerTracker tracker);
public void cancelAllUpdateBatchInputTimers();
@ -84,11 +84,13 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
@Override
public boolean isTypingState() { return false; }
@Override
public void startKeyRepeatTimer(PointerTracker tracker, int repeatCount, int delay) {}
public void startKeyRepeatTimerOf(PointerTracker tracker, int repeatCount, int delay) {}
@Override
public void startLongPressTimer(PointerTracker tracker, int delay) {}
public void startLongPressTimerOf(PointerTracker tracker, int delay) {}
@Override
public void cancelLongPressTimer() {}
public void cancelLongPressTimerOf(PointerTracker tracker) {}
@Override
public void cancelKeyTimersOf(PointerTracker tracker) {}
@Override
public void startDoubleTapShiftKeyTimer() {}
@Override
@ -96,8 +98,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
@Override
public boolean isInDoubleTapShiftKeyTimeout() { return false; }
@Override
public void cancelKeyTimers() {}
@Override
public void startUpdateBatchInputTimer(PointerTracker tracker) {}
@Override
public void cancelUpdateBatchInputTimer(PointerTracker tracker) {}
@ -741,7 +741,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
sListener.onStartBatchInput();
dismissAllMoreKeysPanels();
}
sTimerProxy.cancelLongPressTimer();
sTimerProxy.cancelLongPressTimerOf(this);
// A gesture floating preview text will be shown at the oldest pointer/finger on the screen.
sDrawingProxy.showGestureTrail(
this, isOldestTrackerInQueue() /* showsFloatingPreviewText */);
@ -1072,7 +1072,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
setReleasedKeyGraphics(oldKey);
callListenerOnRelease(oldKey, oldKey.getCode(), true /* withSliding */);
startKeySelectionByDraggingFinger(oldKey);
sTimerProxy.cancelKeyTimers();
sTimerProxy.cancelKeyTimersOf(this);
}
private void dragFingerFromOldKeyToNewKey(final Key key, final int x, final int y,
@ -1195,15 +1195,12 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (DEBUG_EVENT) {
printTouchEvent("onPhntEvent:", mLastX, mLastY, eventTime);
}
if (isShowingMoreKeysPanel()) {
return;
}
onUpEventInternal(mLastX, mLastY, eventTime);
cancelTrackingForAction();
}
private void onUpEventInternal(final int x, final int y, final long eventTime) {
sTimerProxy.cancelKeyTimers();
sTimerProxy.cancelKeyTimersOf(this);
final boolean isInDraggingFinger = mIsInDraggingFinger;
final boolean isInSlidingKeyInput = mIsInSlidingKeyInput;
resetKeySelectionByDraggingFinger();
@ -1282,7 +1279,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
private void onCancelEventInternal() {
sTimerProxy.cancelKeyTimers();
sTimerProxy.cancelKeyTimersOf(this);
setReleasedKeyGraphics(mCurrentKey);
resetKeySelectionByDraggingFinger();
if (isShowingMoreKeysPanel()) {
@ -1345,7 +1342,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (mIsInDraggingFinger && key.getMoreKeys() == null) return;
final int delay = getLongPressTimeout(key.getCode());
sTimerProxy.startLongPressTimer(this, delay);
sTimerProxy.startLongPressTimerOf(this, delay);
}
private int getLongPressTimeout(final int code) {
@ -1398,7 +1395,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
private void startKeyRepeatTimer(final int repeatCount) {
final int delay =
(repeatCount == 1) ? sParams.mKeyRepeatStartTimeout : sParams.mKeyRepeatInterval;
sTimerProxy.startKeyRepeatTimer(this, repeatCount, delay);
sTimerProxy.startKeyRepeatTimerOf(this, repeatCount, delay);
}
private void printTouchEvent(final String title, final int x, final int y,

View file

@ -66,6 +66,7 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
tracker.onKeyRepeat(msg.arg1 /* code */, msg.arg2 /* repeatCount */);
break;
case MSG_LONGPRESS_KEY:
cancelLongPressTimers();
callbacks.onLongPress(tracker);
break;
case MSG_UPDATE_BATCH_INPUT:
@ -76,7 +77,7 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
}
@Override
public void startKeyRepeatTimer(final PointerTracker tracker, final int repeatCount,
public void startKeyRepeatTimerOf(final PointerTracker tracker, final int repeatCount,
final int delay) {
final Key key = tracker.getKey();
if (key == null || delay == 0) {
@ -86,7 +87,11 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
obtainMessage(MSG_REPEAT_KEY, key.getCode(), repeatCount, tracker), delay);
}
public void cancelKeyRepeatTimer() {
private void cancelKeyRepeatTimerOf(final PointerTracker tracker) {
removeMessages(MSG_REPEAT_KEY, tracker);
}
public void cancelKeyRepeatTimers() {
removeMessages(MSG_REPEAT_KEY);
}
@ -96,14 +101,19 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
}
@Override
public void startLongPressTimer(final PointerTracker tracker, final int delay) {
cancelLongPressTimer();
if (delay <= 0) return;
public void startLongPressTimerOf(final PointerTracker tracker, final int delay) {
if (delay <= 0) {
return;
}
sendMessageDelayed(obtainMessage(MSG_LONGPRESS_KEY, tracker), delay);
}
@Override
public void cancelLongPressTimer() {
public void cancelLongPressTimerOf(final PointerTracker tracker) {
removeMessages(MSG_LONGPRESS_KEY, tracker);
}
private void cancelLongPressTimers() {
removeMessages(MSG_LONGPRESS_KEY);
}
@ -159,9 +169,14 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
}
@Override
public void cancelKeyTimers() {
cancelKeyRepeatTimer();
cancelLongPressTimer();
public void cancelKeyTimersOf(final PointerTracker tracker) {
cancelKeyRepeatTimerOf(tracker);
cancelLongPressTimerOf(tracker);
}
public void cancelAllKeyTimers() {
cancelKeyRepeatTimers();
cancelLongPressTimers();
}
@Override
@ -185,7 +200,7 @@ public final class TimerHandler extends LeakGuardHandlerWrapper<Callbacks> imple
}
public void cancelAllMessages() {
cancelKeyTimers();
cancelAllKeyTimers();
cancelAllUpdateBatchInputTimers();
}
}