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

Commit b9b74f85 authored by Jean Chen's avatar Jean Chen Committed by Android (Google) Code Review
Browse files

Merge "feat(MultiFingerMultiTap): Use a two-finger double tap instead of a...

Merge "feat(MultiFingerMultiTap): Use a two-finger double tap instead of a two-finger triple tap in magnification" into main
parents 6a2a4edf 2fe50024
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -861,6 +861,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
    }

    final class DetectingStateWithMultiFinger extends DetectingState {
        private static final int TWO_FINGER_GESTURE_MAX_TAPS = 2;
        // A flag set to true when two fingers have touched down.
        // Used to indicate what next finger action should be.
        private boolean mIsTwoFingerCountReached = false;
@@ -917,7 +918,8 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
                    mHandler.removeMessages(MESSAGE_TRANSITION_TO_DELEGATING_STATE);

                    if (event.getPointerCount() == 2) {
                        if (isMultiFingerMultiTapTriggered(/* targetTapCount= */ 2, event)) {
                        if (isMultiFingerMultiTapTriggered(
                                TWO_FINGER_GESTURE_MAX_TAPS - 1, event)) {
                            // 3tap and hold
                            afterLongTapTimeoutTransitionToDraggingState(event);
                        } else {
@@ -962,7 +964,8 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
                        // (which is a rare combo to be used aside from magnification)
                        if (isMultiTapTriggered(2 /* taps */) && event.getPointerCount() == 1) {
                            transitionToViewportDraggingStateAndClear(event);
                        } else if (isMultiFingerMultiTapTriggered(/* targetTapCount= */ 2, event)
                        } else if (isMultiFingerMultiTapTriggered(
                                TWO_FINGER_GESTURE_MAX_TAPS - 1, event)
                                && event.getPointerCount() == 2) {
                            transitionToViewportDraggingStateAndClear(event);
                        } else if (isActivated() && event.getPointerCount() == 2) {
@@ -1009,7 +1012,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
                            mDisplayId, event.getX(), event.getY())) {
                        transitionToDelegatingStateAndClear();

                    } else if (isMultiFingerMultiTapTriggered(/* targetTapCount= */ 3, event)) {
                    } else if (isMultiFingerMultiTapTriggered(TWO_FINGER_GESTURE_MAX_TAPS, event)) {
                        // Placing multiple fingers before a single finger, because achieving a
                        // multi finger multi tap also means achieving a single finger triple tap
                        onTripleTap(event);
@@ -1051,7 +1054,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
                mIsTwoFingerCountReached = false;
            }

            if (mDetectTwoFingerTripleTap && mCompletedTapCount > 2) {
            if (mDetectTwoFingerTripleTap && mCompletedTapCount > TWO_FINGER_GESTURE_MAX_TAPS - 1) {
                final boolean enabled = !isActivated();
                mMagnificationLogger.logMagnificationTwoFingerTripleTap(enabled);
            }
@@ -1075,7 +1078,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
            // Only log the 3tap and hold event
            if (!shortcutTriggered) {
                final boolean enabled = !isActivated();
                if (mCompletedTapCount == 2) {
                if (mCompletedTapCount == TWO_FINGER_GESTURE_MAX_TAPS - 1) {
                    // Two finger triple tap and hold
                    mMagnificationLogger.logMagnificationTwoFingerTripleTap(enabled);
                } else {
+2 −2
Original line number Diff line number Diff line
@@ -481,10 +481,10 @@ public class WindowMagnificationGestureHandler extends MagnificationGestureHandl

                if (mDetectTwoFingerTripleTap) {
                    mGestureMatchers.add(new MultiFingerMultiTap(context, /* fingers= */ 2,
                            /* taps= */ 3, MagnificationGestureMatcher.GESTURE_TRIPLE_TAP,
                            /* taps= */ 2, MagnificationGestureMatcher.GESTURE_TRIPLE_TAP,
                            null));
                    mGestureMatchers.add(new MultiFingerMultiTapAndHold(context, /* fingers= */ 2,
                            /* taps= */ 3, MagnificationGestureMatcher.GESTURE_TRIPLE_TAP_AND_HOLD,
                            /* taps= */ 2, MagnificationGestureMatcher.GESTURE_TRIPLE_TAP_AND_HOLD,
                            null));
                }

+4 −8
Original line number Diff line number Diff line
@@ -532,10 +532,9 @@ public class FullScreenMagnificationGestureHandlerTest {

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
    public void testTwoFingerTripleTap_StateIsIdle_shouldInActivated() {
    public void testTwoFingerDoubleTap_StateIsIdle_shouldInActivated() {
        goFromStateIdleTo(STATE_IDLE);

        twoFingerTap();
        twoFingerTap();
        twoFingerTap();

@@ -546,11 +545,10 @@ public class FullScreenMagnificationGestureHandlerTest {

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
    public void testTwoFingerTripleTap_StateIsActivated_shouldInIdle() {
    public void testTwoFingerDoubleTap_StateIsActivated_shouldInIdle() {
        goFromStateIdleTo(STATE_ACTIVATED);
        reset(mMockMagnificationLogger);

        twoFingerTap();
        twoFingerTap();
        twoFingerTap();

@@ -561,10 +559,9 @@ public class FullScreenMagnificationGestureHandlerTest {

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
    public void testTwoFingerTripleTapAndHold_StateIsIdle_shouldZoomsImmediately() {
    public void testTwoFingerDoubleTapAndHold_StateIsIdle_shouldZoomsImmediately() {
        goFromStateIdleTo(STATE_IDLE);

        twoFingerTap();
        twoFingerTap();
        twoFingerTapAndHold();

@@ -575,10 +572,9 @@ public class FullScreenMagnificationGestureHandlerTest {

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
    public void testTwoFingerTripleSwipeAndHold_StateIsIdle_shouldZoomsImmediately() {
    public void testTwoFingerDoubleSwipeAndHold_StateIsIdle_shouldZoomsImmediately() {
        goFromStateIdleTo(STATE_IDLE);

        twoFingerTap();
        twoFingerTap();
        twoFingerSwipeAndHold();

+13 −17
Original line number Diff line number Diff line
@@ -72,15 +72,15 @@ public class WindowMagnificationGestureHandlerTest {
    public static final int STATE_SHOW_MAGNIFIER_TRIPLE_TAP = 4;
    public static final int STATE_NOT_ENABLED_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD = 5;
    public static final int STATE_ENABLED_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD = 6;
    public static final int STATE_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP = 7;
    public static final int STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD = 8;
    public static final int STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD = 9;
    public static final int STATE_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP = 7;
    public static final int STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD = 8;
    public static final int STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD = 9;
    //TODO: Test it after can injecting Handler to GestureMatcher is available.

    public static final int FIRST_STATE = STATE_IDLE;
    public static final int LAST_STATE = STATE_ENABLED_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD;
    public static final int LAST_STATE_WITH_MULTI_FINGER =
            STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD;
            STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD;

    // Co-prime x and y, to potentially catch x-y-swapped errors
    public static final float DEFAULT_TAP_X = 301;
@@ -257,15 +257,15 @@ public class WindowMagnificationGestureHandlerTest {
            break;
            case STATE_SHOW_MAGNIFIER_SHORTCUT:
            case STATE_SHOW_MAGNIFIER_TRIPLE_TAP:
            case STATE_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP:
            case STATE_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP:
                check(isWindowMagnifierEnabled(DISPLAY_0), state);
                check(mWindowMagnificationGestureHandler.mCurrentState
                        == mWindowMagnificationGestureHandler.mDetectingState, state);
                break;
            case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD:
            case STATE_ENABLED_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD:
            case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD:
            case STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD: {
            case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD:
            case STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD: {
                check(isWindowMagnifierEnabled(DISPLAY_0), state);
                check(mWindowMagnificationGestureHandler.mCurrentState
                        == mWindowMagnificationGestureHandler.mViewportDraggingState, state);
@@ -337,8 +337,7 @@ public class WindowMagnificationGestureHandlerTest {
                    tapAndHold();
                }
                break;
                case STATE_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP: {
                    twoFingerTap();
                case STATE_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP: {
                    twoFingerTap();
                    twoFingerTap();
                    // Wait for two-finger tap gesture completed.
@@ -346,17 +345,15 @@ public class WindowMagnificationGestureHandlerTest {
                    InstrumentationRegistry.getInstrumentation().waitForIdleSync();
                }
                break;
                case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD: {
                    twoFingerTap();
                case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD: {
                    twoFingerTap();
                    twoFingerTapAndHold();
                }
                break;
                case STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD: {
                case STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD: {
                    // enabled then perform two finger triple tap and hold gesture
                    goFromStateIdleTo(STATE_SHOW_MAGNIFIER_SHORTCUT);
                    twoFingerTap();
                    twoFingerTap();
                    twoFingerTapAndHold();
                }
                break;
@@ -394,16 +391,15 @@ public class WindowMagnificationGestureHandlerTest {
            }
            break;
            case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD:
            case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD:
            case STATE_NOT_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD:
                send(upEvent(DEFAULT_TAP_X, DEFAULT_TAP_Y));
                break;
            case STATE_ENABLED_SHOW_MAGNIFIER_TRIPLE_TAP_AND_HOLD:
            case STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP_AND_HOLD:
            case STATE_ENABLED_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP_AND_HOLD:
                send(upEvent(DEFAULT_TAP_X, DEFAULT_TAP_Y));
                returnToNormalFrom(STATE_SHOW_MAGNIFIER_SHORTCUT);
                break;
            case STATE_SHOW_MAGNIFIER_TWO_FINGER_TRIPLE_TAP: {
                twoFingerTap();
            case STATE_SHOW_MAGNIFIER_TWO_FINGER_DOUBLE_TAP: {
                twoFingerTap();
                twoFingerTap();
                // Wait for two-finger tap gesture completed.