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

Commit 416a1e7b authored by Yuhan Yang's avatar Yuhan Yang
Browse files

Reset Autoclick type to left click after long press

Bug: 400744833
Test: atest AutoclickController
Flag: com.android.server.accessibility.enable_autoclick_indicator
Change-Id: I3dcba76ee761b488aac030128abef1925a4589ac
parent 4677f132
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() {