diff options
author | 2025-02-27 07:33:11 +0000 | |
---|---|---|
committer | 2025-03-07 22:30:29 +0000 | |
commit | da405e9880f5956dec1b29cdb2c8a0a5da12dbe5 (patch) | |
tree | f91cf750d7a9d24607c7fc45ad4f6b16f096295b /services/accessibility | |
parent | ab6525c985df7e80dbc2275de4edcf1ad5289c6c (diff) |
Observe RevertToLeftClick setting in autoclick controller
Observe revertToLeftClick setting changes in autoclick controller.
If revertToLeftClick is true, revert autoclick back to leftclick
after performing an autoclick action when autoclick type is
not leftClick. Also reset autoclick panel state.
Bug: 388845719
Test: AutoclickControllerTest
Flag: com.android.server.accessibility.enable_autoclick_indicator
Change-Id: Ie651c8e2b6b889ba4ccdf882b84bee15661dd97c
Diffstat (limited to 'services/accessibility')
2 files changed, 52 insertions, 2 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java index a71224a68125..23166a800245 100644 --- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java +++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java @@ -21,6 +21,7 @@ import static android.view.MotionEvent.BUTTON_SECONDARY; import static android.view.accessibility.AccessibilityManager.AUTOCLICK_CURSOR_AREA_SIZE_DEFAULT; import static android.view.accessibility.AccessibilityManager.AUTOCLICK_DELAY_DEFAULT; import static android.view.accessibility.AccessibilityManager.AUTOCLICK_IGNORE_MINOR_CURSOR_MOVEMENT_DEFAULT; +import static android.view.accessibility.AccessibilityManager.AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT; import static com.android.server.accessibility.autoclick.AutoclickIndicatorView.SHOW_INDICATOR_DELAY_TIME; import static com.android.server.accessibility.autoclick.AutoclickTypePanel.AUTOCLICK_TYPE_LEFT_CLICK; @@ -159,7 +160,8 @@ public class AutoclickController extends BaseEventStreamTransformation { initiateAutoclickIndicator(handler); } - mClickScheduler = new ClickScheduler(handler, AUTOCLICK_DELAY_DEFAULT); + mClickScheduler = new ClickScheduler( + handler, AUTOCLICK_DELAY_DEFAULT); mAutoclickSettingsObserver = new AutoclickSettingsObserver(mUserId, handler); mAutoclickSettingsObserver.start( mContext.getContentResolver(), @@ -304,6 +306,10 @@ public class AutoclickController extends BaseEventStreamTransformation { Settings.Secure.getUriFor( Settings.Secure.ACCESSIBILITY_AUTOCLICK_IGNORE_MINOR_CURSOR_MOVEMENT); + private final Uri mAutoclickRevertToLeftClickSettingUri = + Settings.Secure.getUriFor( + Settings.Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK); + private ContentResolver mContentResolver; private ClickScheduler mClickScheduler; private AutoclickIndicatorScheduler mAutoclickIndicatorScheduler; @@ -368,6 +374,13 @@ public class AutoclickController extends BaseEventStreamTransformation { /* observer= */ this, mUserId); onChange(/* selfChange= */ true, mAutoclickIgnoreMinorCursorMovementSettingUri); + + mContentResolver.registerContentObserver( + mAutoclickRevertToLeftClickSettingUri, + /* notifyForDescendants= */ false, + /* observer= */ this, + mUserId); + onChange(/* selfChange= */ true, mAutoclickRevertToLeftClickSettingUri); } } @@ -424,6 +437,20 @@ public class AutoclickController extends BaseEventStreamTransformation { == AccessibilityUtils.State.ON; mClickScheduler.setIgnoreMinorCursorMovement(ignoreMinorCursorMovement); } + + if (mAutoclickRevertToLeftClickSettingUri.equals(uri)) { + boolean revertToLeftClick = + Settings.Secure.getIntForUser( + mContentResolver, + Settings.Secure + .ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK, + AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT + ? AccessibilityUtils.State.ON + : AccessibilityUtils.State.OFF, + mUserId) + == AccessibilityUtils.State.ON; + mClickScheduler.setRevertToLeftClick(revertToLeftClick); + } } } } @@ -505,6 +532,9 @@ public class AutoclickController extends BaseEventStreamTransformation { /** Whether the minor cursor movement should be ignored. */ private boolean mIgnoreMinorCursorMovement = AUTOCLICK_IGNORE_MINOR_CURSOR_MOVEMENT_DEFAULT; + /** Whether the autoclick type reverts to left click once performing an action. */ + private boolean mRevertToLeftClick = AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT; + /** Whether there is pending click. */ private boolean mActive; /** If active, time at which pending click is scheduled. */ @@ -555,6 +585,7 @@ public class AutoclickController extends BaseEventStreamTransformation { sendClick(); resetInternalState(); + resetSelectedClickTypeIfNecessary(); } /** @@ -633,6 +664,11 @@ public class AutoclickController extends BaseEventStreamTransformation { return mDelay; } + @VisibleForTesting + boolean getRevertToLeftClickForTesting() { + return mRevertToLeftClick; + } + /** * Updates the time at which click sequence should occur. * @@ -692,6 +728,12 @@ public class AutoclickController extends BaseEventStreamTransformation { } } + private void resetSelectedClickTypeIfNecessary() { + if (mRevertToLeftClick && mActiveClickType != AUTOCLICK_TYPE_LEFT_CLICK) { + mAutoclickTypePanel.resetSelectedClickType(); + } + } + /** * @param event Observed motion event. * @return Whether the event coords are far enough from the anchor for the event not to be @@ -716,6 +758,10 @@ public class AutoclickController extends BaseEventStreamTransformation { mIgnoreMinorCursorMovement = ignoreMinorCursorMovement; } + public void setRevertToLeftClick(boolean revertToLeftClick) { + mRevertToLeftClick = revertToLeftClick; + } + private void updateMovementSlop(double slop) { mMovementSlop = slop; } 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 57fa77d73729..5a484d42eb96 100644 --- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java +++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java @@ -283,7 +283,11 @@ public class AutoclickTypePanel { // 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. + resetSelectedClickType(); + } + + /** Reset panel as collapsed state and only displays the left click button. */ + public void resetSelectedClickType() { hideAllClickTypeButtons(); mLeftClickButton.setVisibility(View.VISIBLE); setSelectedClickType(AUTOCLICK_TYPE_LEFT_CLICK); |