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

Commit b0e5cce3 authored by Yuhan Yang's avatar Yuhan Yang Committed by Android (Google) Code Review
Browse files

Merge "Reset Autoclick type to left click after long press" into main

parents 38e8d77a 416a1e7b
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -511,6 +511,11 @@ public class AutoclickController extends BaseEventStreamTransformation {
        return mHasOngoingLongPress;
    }

    @VisibleForTesting
    @AutoclickType int getActiveClickTypeForTest() {
        return mActiveClickType;
    }

    /**
     * Observes and updates various autoclick setting values.
     */
@@ -1039,7 +1044,8 @@ public class AutoclickController extends BaseEventStreamTransformation {
        }

        private void resetSelectedClickTypeIfNecessary() {
            if (mRevertToLeftClick && mActiveClickType != AUTOCLICK_TYPE_LEFT_CLICK) {
            if ((mRevertToLeftClick && mActiveClickType != AUTOCLICK_TYPE_LEFT_CLICK)
                    || mActiveClickType == AUTOCLICK_TYPE_LONG_PRESS) {
                mAutoclickTypePanel.resetSelectedClickType();
            }
        }
@@ -1227,7 +1233,6 @@ public class AutoclickController extends BaseEventStreamTransformation {
            upEvent.recycle();
        }

        // TODO(b/400744833): Reset Autoclick type to left click whenever a long press happens.
        private void sendLongPress() {
            mHasOngoingLongPress = true;
            mLongPressDownTime = SystemClock.uptimeMillis();
+40 −0
Original line number Diff line number Diff line
@@ -1276,6 +1276,46 @@ public class AutoclickControllerTest {
        assertThat(mController.hasOngoingLongPressForTesting()).isFalse();
    }

    @Test
    @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
    public void sendClick_clickType_longPress_revertsToLeftClick() {
        MotionEventCaptor motionEventCaptor = new MotionEventCaptor();
        mController.setNext(motionEventCaptor);

        // Move mouse to initialize autoclick panel.
        injectFakeMouseActionHoverMoveEvent();

        AutoclickTypePanel mockAutoclickTypePanel = mock(AutoclickTypePanel.class);
        mController.mAutoclickTypePanel = mockAutoclickTypePanel;
        mController.clickPanelController.handleAutoclickTypeChange(
                AutoclickTypePanel.AUTOCLICK_TYPE_LONG_PRESS);

        // Set ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK to false.
        Settings.Secure.putIntForUser(mTestableContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK,
                AccessibilityUtils.State.OFF,
                mTestableContext.getUserId());
        mController.onChangeForTesting(/* selfChange= */ true,
                Settings.Secure.getUriFor(
                        Settings.Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK));
        when(mockAutoclickTypePanel.isPaused()).thenReturn(false);
        assertThat(mController.mClickScheduler.getRevertToLeftClickForTesting()).isFalse();
        assertThat(mController.getActiveClickTypeForTest()).isEqualTo(
                AutoclickTypePanel.AUTOCLICK_TYPE_LONG_PRESS);

        // Send hover move event to trigger long press.
        when(mockAutoclickTypePanel.isPaused()).thenReturn(false);
        mController.mClickScheduler.run();
        mTestableLooper.moveTimeForward(mController.LONG_PRESS_TIMEOUT);
        mTestableLooper.processAllMessages();

        motionEventCaptor.assertCapturedEvents(
                MotionEvent.ACTION_DOWN, MotionEvent.ACTION_BUTTON_PRESS,
                MotionEvent.ACTION_BUTTON_RELEASE, MotionEvent.ACTION_UP);

        verify(mockAutoclickTypePanel).resetSelectedClickType();
    }

    @Test
    @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
    public void continuousScroll_completeLifecycle() {