aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/keyboard/PointerTracker.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/keyboard/PointerTracker.java')
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java45
1 files changed, 21 insertions, 24 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 9dae40a93..7e2a5af90 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -46,7 +46,9 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
private static boolean sMainDictionaryAvailable = false;
private static boolean sGestureHandlingEnabledByInputField = false;
private static boolean sGestureHandlingEnabledByUser = false;
- private static boolean sGestureOffWhileFastTyping = false;
+
+ // TODO: Move this to resource.
+ private static final int SUPPRESS_KEY_PREVIEW_AFTER_LAST_BATCH_INPUT_DURATION = 1000; // msec
public interface KeyEventHandler {
/**
@@ -85,7 +87,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
public interface TimerProxy {
public void startTypingStateTimer(Key typedKey);
public boolean isTypingState();
- public void startGestureOffWhileFastTypingTimer();
public void startKeyRepeatTimer(PointerTracker tracker);
public void startLongPressTimer(PointerTracker tracker);
public void startLongPressTimer(int code);
@@ -101,8 +102,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
@Override
public boolean isTypingState() { return false; }
@Override
- public void startGestureOffWhileFastTypingTimer() {}
- @Override
public void startKeyRepeatTimer(PointerTracker tracker) {}
@Override
public void startLongPressTimer(PointerTracker tracker) {}
@@ -169,6 +168,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
private boolean mIsDetectingGesture = false; // per PointerTracker.
private static boolean sInGesture = false;
private static long sGestureFirstDownTime;
+ private static long sLastBatchInputTime;
private static long sLastLetterTypingUpTime;
private static final InputPointers sAggregratedPointers = new InputPointers(
GestureStroke.DEFAULT_CAPACITY);
@@ -230,7 +230,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
private static void updateGestureHandlingMode() {
sShouldHandleGesture = sMainDictionaryAvailable
- && !sGestureOffWhileFastTyping
&& sGestureHandlingEnabledByInputField
&& sGestureHandlingEnabledByUser
&& !AccessibilityUtils.getInstance().isTouchExplorationEnabled();
@@ -247,16 +246,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
updateGestureHandlingMode();
}
- public static void setGestureOffWhileFastTyping() {
- sGestureOffWhileFastTyping = true;
- updateGestureHandlingMode();
- }
-
- public static void clearGestureOffWhileFastTyping() {
- sGestureOffWhileFastTyping = false;
- updateGestureHandlingMode();
- }
-
public static PointerTracker getPointerTracker(final int id, final KeyEventHandler handler) {
final ArrayList<PointerTracker> trackers = sTrackers;
@@ -360,12 +349,11 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
// Even if the key is disabled, it should respond if it is in the altCodeWhileTyping state.
if (key.isEnabled() || altersCode) {
+ sLastBatchInputTime = 0; // reset time
if (code == Keyboard.CODE_OUTPUT_TEXT) {
mListener.onTextInput(key.getOutputText());
- mTimerProxy.startGestureOffWhileFastTypingTimer();
} else if (code != Keyboard.CODE_UNSPECIFIED) {
mListener.onCodeInput(code, x, y);
- mTimerProxy.startGestureOffWhileFastTypingTimer();
}
}
}
@@ -469,7 +457,15 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
}
- private void setPressedKeyGraphics(final Key key) {
+ private static boolean needsToSuppressKeyPreviewPopup(final long eventTime) {
+ if (!sShouldHandleGesture) return false;
+ if (sLastBatchInputTime == 0) return false;
+ final long elapsedTimeAfterTheLastBatchInput = eventTime - sLastBatchInputTime;
+ return elapsedTimeAfterTheLastBatchInput
+ < SUPPRESS_KEY_PREVIEW_AFTER_LAST_BATCH_INPUT_DURATION;
+ }
+
+ private void setPressedKeyGraphics(final Key key, final long eventTime) {
if (key == null) {
return;
}
@@ -481,7 +477,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
return;
}
- if (!key.noKeyPreview() && !sInGesture) {
+ if (!key.noKeyPreview() && !sInGesture && !needsToSuppressKeyPreviewPopup(eventTime)) {
mDrawingProxy.showKeyPreview(this);
}
updatePressKeyGraphics(key);
@@ -596,7 +592,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
mDrawingProxy.showGesturePreviewTrail(this, isOldestTracker);
}
- private void mayEndBatchInput() {
+ private void mayEndBatchInput(final long eventTime) {
synchronized (sAggregratedPointers) {
mGestureStrokeWithPreviewPoints.appendAllBatchPoints(sAggregratedPointers);
mGestureStrokeWithPreviewPoints.reset();
@@ -606,6 +602,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
+ sAggregratedPointers.getPointerSize());
}
sInGesture = false;
+ sLastBatchInputTime = eventTime;
mListener.onEndBatchInput(sAggregratedPointers);
clearBatchInputPointsOfAllPointerTrackers();
}
@@ -731,7 +728,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
startRepeatKey(key);
startLongPressTimer(key);
- setPressedKeyGraphics(key);
+ setPressedKeyGraphics(key, eventTime);
}
}
@@ -809,7 +806,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
onMoveToNewKey(key, x, y);
startLongPressTimer(key);
- setPressedKeyGraphics(key);
+ setPressedKeyGraphics(key, eventTime);
} else if (isMajorEnoughMoveToBeOnNewKey(x, y, key)) {
// The pointer has been slid in to the new key from the previous key, we must call
// onRelease() first to notify that the previous key has been released, then call
@@ -828,7 +825,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
}
onMoveToNewKey(key, x, y);
startLongPressTimer(key);
- setPressedKeyGraphics(key);
+ setPressedKeyGraphics(key, eventTime);
} else {
// HACK: On some devices, quick successive touches may be translated to sudden
// move by touch panel firmware. This hack detects the case and translates the
@@ -939,7 +936,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
if (currentKey != null) {
callListenerOnRelease(currentKey, currentKey.mCode, true);
}
- mayEndBatchInput();
+ mayEndBatchInput(eventTime);
return;
}
// This event will be recognized as a regular code input. Clear unused possible batch points