diff options
2 files changed, 92 insertions, 6 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java index 90ddc43ae3ed..57fa77d73729 100644 --- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java +++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java @@ -266,13 +266,21 @@ public class AutoclickTypePanel { } private void initializeButtonState() { - mLeftClickButton.setOnClickListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_LEFT_CLICK)); - mRightClickButton.setOnClickListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_RIGHT_CLICK)); + // Use `createButtonListener()` to append extra pause logic to each button's click. + mLeftClickButton.setOnClickListener( + wrapWithTogglePauseListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_LEFT_CLICK))); + mRightClickButton.setOnClickListener( + wrapWithTogglePauseListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_RIGHT_CLICK))); mDoubleClickButton.setOnClickListener( - v -> togglePanelExpansion(AUTOCLICK_TYPE_DOUBLE_CLICK)); - mScrollButton.setOnClickListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_SCROLL)); - mDragButton.setOnClickListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_DRAG)); - mPositionButton.setOnClickListener(v -> moveToNextCorner()); + wrapWithTogglePauseListener( + v -> togglePanelExpansion(AUTOCLICK_TYPE_DOUBLE_CLICK))); + mScrollButton.setOnClickListener( + wrapWithTogglePauseListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_SCROLL))); + mDragButton.setOnClickListener( + wrapWithTogglePauseListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_DRAG))); + mPositionButton.setOnClickListener(wrapWithTogglePauseListener(v -> moveToNextCorner())); + + // The pause button calls `togglePause()` directly so it does not need extra logic. mPauseButton.setOnClickListener(v -> togglePause()); // Initializes panel as collapsed state and only displays the left click button. @@ -517,6 +525,18 @@ public class AutoclickTypePanel { return true; } + /* Appends a check of the pause state to the button's listener. */ + private View.OnClickListener wrapWithTogglePauseListener(View.OnClickListener listener) { + return v -> { + listener.onClick(v); + + // Resumes autoclick if the button is clicked while in a paused state. + if (mPaused) { + togglePause(); + } + }; + } + @VisibleForTesting boolean getExpansionStateForTesting() { return mExpanded; diff --git a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java index dd089fcb1d70..8bbbca0b7ed4 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java @@ -198,6 +198,72 @@ public class AutoclickTypePanelTest { } @Test + public void clickLeftClickButton_resumeAutoClick() { + // Pause autoclick. + mPauseButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isTrue(); + + // Click the button and verify autoclick resumes. + mLeftClickButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isFalse(); + } + + @Test + public void clickRightClickButton_resumeAutoClick() { + // Pause autoclick. + mPauseButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isTrue(); + + // Click the button and verify autoclick resumes. + mRightClickButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isFalse(); + } + + @Test + public void clickDoubleClickButton_resumeAutoClick() { + // Pause autoclick. + mPauseButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isTrue(); + + // Click the button and verify autoclick resumes. + mDoubleClickButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isFalse(); + } + + @Test + public void clickDragButton_resumeAutoClick() { + // Pause autoclick. + mPauseButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isTrue(); + + // Click the button and verify autoclick resumes. + mDragButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isFalse(); + } + + @Test + public void clickScrollButton_resumeAutoClick() { + // Pause autoclick. + mPauseButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isTrue(); + + // Click the button and verify autoclick resumes. + mScrollButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isFalse(); + } + + @Test + public void clickPositionButton_resumeAutoClick() { + // Pause autoclick. + mPauseButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isTrue(); + + // Click the button and verify autoclick resumes. + mPositionButton.callOnClick(); + assertThat(mAutoclickTypePanel.isPaused()).isFalse(); + } + + @Test public void moveToNextCorner_positionButton_rotatesThroughAllPositions() { // Define all positions in sequence int[][] expectedPositions = { |