am c8f25294: Merge "Temporarily suppress key popup preview after gesture input" into jb-mr1-dev
* commit 'c8f252940f1a7831885c87b409e15096ed64eaf0': Temporarily suppress key popup preview after gesture inputmain
commit
e914d4739e
|
@ -47,6 +47,9 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
private static boolean sGestureHandlingEnabledByInputField = false;
|
private static boolean sGestureHandlingEnabledByInputField = false;
|
||||||
private static boolean sGestureHandlingEnabledByUser = false;
|
private static boolean sGestureHandlingEnabledByUser = false;
|
||||||
|
|
||||||
|
// TODO: Move this to resource.
|
||||||
|
private static final int SUPPRESS_KEY_PREVIEW_AFTER_LAST_BATCH_INPUT_DURATION = 1000; // msec
|
||||||
|
|
||||||
public interface KeyEventHandler {
|
public interface KeyEventHandler {
|
||||||
/**
|
/**
|
||||||
* Get KeyDetector object that is used for this PointerTracker.
|
* Get KeyDetector object that is used for this PointerTracker.
|
||||||
|
@ -165,6 +168,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
private boolean mIsDetectingGesture = false; // per PointerTracker.
|
private boolean mIsDetectingGesture = false; // per PointerTracker.
|
||||||
private static boolean sInGesture = false;
|
private static boolean sInGesture = false;
|
||||||
private static long sGestureFirstDownTime;
|
private static long sGestureFirstDownTime;
|
||||||
|
private static long sLastBatchInputTime;
|
||||||
private static long sLastLetterTypingUpTime;
|
private static long sLastLetterTypingUpTime;
|
||||||
private static final InputPointers sAggregratedPointers = new InputPointers(
|
private static final InputPointers sAggregratedPointers = new InputPointers(
|
||||||
GestureStroke.DEFAULT_CAPACITY);
|
GestureStroke.DEFAULT_CAPACITY);
|
||||||
|
@ -345,6 +349,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
}
|
}
|
||||||
// Even if the key is disabled, it should respond if it is in the altCodeWhileTyping state.
|
// Even if the key is disabled, it should respond if it is in the altCodeWhileTyping state.
|
||||||
if (key.isEnabled() || altersCode) {
|
if (key.isEnabled() || altersCode) {
|
||||||
|
sLastBatchInputTime = 0; // reset time
|
||||||
if (code == Keyboard.CODE_OUTPUT_TEXT) {
|
if (code == Keyboard.CODE_OUTPUT_TEXT) {
|
||||||
mListener.onTextInput(key.getOutputText());
|
mListener.onTextInput(key.getOutputText());
|
||||||
} else if (code != Keyboard.CODE_UNSPECIFIED) {
|
} else if (code != Keyboard.CODE_UNSPECIFIED) {
|
||||||
|
@ -452,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) {
|
if (key == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -464,7 +477,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!key.noKeyPreview() && !sInGesture) {
|
if (!key.noKeyPreview() && !sInGesture && !needsToSuppressKeyPreviewPopup(eventTime)) {
|
||||||
mDrawingProxy.showKeyPreview(this);
|
mDrawingProxy.showKeyPreview(this);
|
||||||
}
|
}
|
||||||
updatePressKeyGraphics(key);
|
updatePressKeyGraphics(key);
|
||||||
|
@ -579,7 +592,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
mDrawingProxy.showGesturePreviewTrail(this, isOldestTracker);
|
mDrawingProxy.showGesturePreviewTrail(this, isOldestTracker);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void mayEndBatchInput() {
|
private void mayEndBatchInput(final long eventTime) {
|
||||||
synchronized (sAggregratedPointers) {
|
synchronized (sAggregratedPointers) {
|
||||||
mGestureStrokeWithPreviewPoints.appendAllBatchPoints(sAggregratedPointers);
|
mGestureStrokeWithPreviewPoints.appendAllBatchPoints(sAggregratedPointers);
|
||||||
mGestureStrokeWithPreviewPoints.reset();
|
mGestureStrokeWithPreviewPoints.reset();
|
||||||
|
@ -589,6 +602,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
+ sAggregratedPointers.getPointerSize());
|
+ sAggregratedPointers.getPointerSize());
|
||||||
}
|
}
|
||||||
sInGesture = false;
|
sInGesture = false;
|
||||||
|
sLastBatchInputTime = eventTime;
|
||||||
mListener.onEndBatchInput(sAggregratedPointers);
|
mListener.onEndBatchInput(sAggregratedPointers);
|
||||||
clearBatchInputPointsOfAllPointerTrackers();
|
clearBatchInputPointsOfAllPointerTrackers();
|
||||||
}
|
}
|
||||||
|
@ -714,7 +728,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
|
|
||||||
startRepeatKey(key);
|
startRepeatKey(key);
|
||||||
startLongPressTimer(key);
|
startLongPressTimer(key);
|
||||||
setPressedKeyGraphics(key);
|
setPressedKeyGraphics(key, eventTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -792,7 +806,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
}
|
}
|
||||||
onMoveToNewKey(key, x, y);
|
onMoveToNewKey(key, x, y);
|
||||||
startLongPressTimer(key);
|
startLongPressTimer(key);
|
||||||
setPressedKeyGraphics(key);
|
setPressedKeyGraphics(key, eventTime);
|
||||||
} else if (isMajorEnoughMoveToBeOnNewKey(x, y, key)) {
|
} else if (isMajorEnoughMoveToBeOnNewKey(x, y, key)) {
|
||||||
// The pointer has been slid in to the new key from the previous key, we must call
|
// 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
|
// onRelease() first to notify that the previous key has been released, then call
|
||||||
|
@ -811,7 +825,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
}
|
}
|
||||||
onMoveToNewKey(key, x, y);
|
onMoveToNewKey(key, x, y);
|
||||||
startLongPressTimer(key);
|
startLongPressTimer(key);
|
||||||
setPressedKeyGraphics(key);
|
setPressedKeyGraphics(key, eventTime);
|
||||||
} else {
|
} else {
|
||||||
// HACK: On some devices, quick successive touches may be translated to sudden
|
// 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
|
// move by touch panel firmware. This hack detects the case and translates the
|
||||||
|
@ -922,7 +936,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
|
||||||
if (currentKey != null) {
|
if (currentKey != null) {
|
||||||
callListenerOnRelease(currentKey, currentKey.mCode, true);
|
callListenerOnRelease(currentKey, currentKey.mCode, true);
|
||||||
}
|
}
|
||||||
mayEndBatchInput();
|
mayEndBatchInput(eventTime);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// This event will be recognized as a regular code input. Clear unused possible batch points
|
// This event will be recognized as a regular code input. Clear unused possible batch points
|
||||||
|
|
Loading…
Reference in New Issue