summaryrefslogtreecommitdiff
path: root/services/accessibility
diff options
context:
space:
mode:
author Yuhan Yang <yyhyyh@google.com> 2025-02-27 07:33:11 +0000
committer Yuhan Yang <yyhyyh@google.com> 2025-03-07 22:30:29 +0000
commitda405e9880f5956dec1b29cdb2c8a0a5da12dbe5 (patch)
treef91cf750d7a9d24607c7fc45ad4f6b16f096295b /services/accessibility
parentab6525c985df7e80dbc2275de4edcf1ad5289c6c (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')
-rw-r--r--services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java48
-rw-r--r--services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java6
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);