From fa860a091e60774f2050e61aafa3fc67fb75bf61 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 28 Nov 2013 19:13:38 +0900 Subject: [PATCH] Don't start long press timer while other one is running Bug: 11908158 Bug: 12088861 Change-Id: I2537855f505884da9fe958d946c79840bd19dc5f --- .../keyboard/MainKeyboardView.java | 6 ++-- .../inputmethod/keyboard/PointerTracker.java | 33 ++++++++--------- .../keyboard/internal/TimerHandler.java | 35 +++++++++++++------ 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java index 8b4986f96..e8a89712c 100644 --- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java @@ -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); diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java index f4329b417..ae6aee4a1 100644 --- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java +++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java @@ -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, diff --git a/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java b/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java index 966cb951c..88d0878d1 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java +++ b/java/src/com/android/inputmethod/keyboard/internal/TimerHandler.java @@ -66,6 +66,7 @@ public final class TimerHandler extends LeakGuardHandlerWrapper 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 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 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 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 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 imple } public void cancelAllMessages() { - cancelKeyTimers(); + cancelAllKeyTimers(); cancelAllUpdateBatchInputTimers(); } }