Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8f25294 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Temporarily suppress key popup preview after gesture input" into jb-mr1-dev

parents ad6b493c 29d2d481
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
@@ -47,6 +47,9 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
    private static boolean sGestureHandlingEnabledByInputField = 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 {
        /**
         * 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 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);
@@ -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.
        if (key.isEnabled() || altersCode) {
            sLastBatchInputTime = 0; // reset time
            if (code == Keyboard.CODE_OUTPUT_TEXT) {
                mListener.onTextInput(key.getOutputText());
            } 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) {
            return;
        }
@@ -464,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);
@@ -579,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();
@@ -589,6 +602,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {
                            + sAggregratedPointers.getPointerSize());
                }
                sInGesture = false;
                sLastBatchInputTime = eventTime;
                mListener.onEndBatchInput(sAggregratedPointers);
                clearBatchInputPointsOfAllPointerTrackers();
            }
@@ -714,7 +728,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element {

            startRepeatKey(key);
            startLongPressTimer(key);
            setPressedKeyGraphics(key);
            setPressedKeyGraphics(key, eventTime);
        }
    }

@@ -792,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
@@ -811,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
@@ -922,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