[DO NOT MERGE] Fix bugs with changing service gesture detection state.

1) Fix accidental brace movement that alters state change logic when enabling or disabling service flags.
2) Clean up service gesture detection state when services shut down.
Previously, we did not turn this flag off. This can be observed by running
'atest TouchInteractionControllerTest TouchExplorerTest'
TouchInteractionControllerTest turns on service gesture detection. TouchExplorerTest assumes it to be off. TouchExplorerTest will fail.
Bug: 243487199
Test: atest TouchInteractionControllerTest TouchExplorerTest

Change-Id: Ie9440bacd069ac9cdb13a4cbadf6513f7d16d7cc
This commit is contained in:
Ameer Armaly
2022-10-05 19:53:45 +00:00
parent b6d9367bc9
commit 912cca9f73
3 changed files with 34 additions and 14 deletions

View File

@@ -906,6 +906,9 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
mServiceDetectsGestures.put(displayId, mode);
}
public void resetServiceDetectsGestures() {
mServiceDetectsGestures.clear();
}
public void requestTouchExploration(int displayId) {
if (mTouchExplorer.contains(displayId)) {
mTouchExplorer.get(displayId).requestTouchExploration();

View File

@@ -2304,6 +2304,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
if (userState.isTwoFingerPassthroughEnabledLocked()) {
flags |= AccessibilityInputFilter.FLAG_REQUEST_2_FINGER_PASSTHROUGH;
}
}
if (userState.isFilterKeyEventsEnabledLocked()) {
flags |= AccessibilityInputFilter.FLAG_FEATURE_FILTER_KEY_EVENTS;
}
@@ -2321,26 +2322,27 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
if (!mHasInputFilter) {
mHasInputFilter = true;
if (mInputFilter == null) {
mInputFilter = new AccessibilityInputFilter(mContext,
AccessibilityManagerService.this);
mInputFilter =
new AccessibilityInputFilter(
mContext, AccessibilityManagerService.this);
}
inputFilter = mInputFilter;
setInputFilter = true;
}
mInputFilter.setUserAndEnabledFeatures(userState.mUserId, flags);
} else {
if (mHasInputFilter) {
mHasInputFilter = false;
mInputFilter.setUserAndEnabledFeatures(userState.mUserId, 0);
if (userState.isTouchExplorationEnabledLocked()) {
// Service gesture detection is turned on and off on a per-display
// basis.
final ArrayList<Display> displays = getValidDisplayList();
for (Display display : displays) {
int displayId = display.getDisplayId();
boolean mode = userState.isServiceDetectsGesturesEnabled(displayId);
mInputFilter.setServiceDetectsGesturesEnabled(displayId, mode);
}
if (mHasInputFilter) {
mHasInputFilter = false;
mInputFilter.setUserAndEnabledFeatures(userState.mUserId, 0);
mInputFilter.resetServiceDetectsGestures();
if (userState.isTouchExplorationEnabledLocked()) {
// Service gesture detection is turned on and off on a per-display
// basis.
final ArrayList<Display> displays = getValidDisplayList();
for (Display display : displays) {
int displayId = display.getDisplayId();
boolean mode = userState.isServiceDetectsGesturesEnabled(displayId);
mInputFilter.setServiceDetectsGesturesEnabled(displayId, mode);
}
}
inputFilter = null;
@@ -2658,6 +2660,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
Binder.restoreCallingIdentity(identity);
}
}
// Service gesture detection is turned on and off on a per-display
// basis.
userState.resetServiceDetectsGestures();
final ArrayList<Display> displays = getValidDisplayList();
for (AccessibilityServiceConnection service: userState.mBoundServices) {
for (Display display : displays) {
int displayId = display.getDisplayId();
if (service.isServiceDetectsGesturesEnabled(displayId)) {
userState.setServiceDetectsGesturesEnabled(displayId, true);
}
}
}
userState.setServiceHandlesDoubleTapLocked(serviceHandlesDoubleTapEnabled);
userState.setMultiFingerGesturesLocked(requestMultiFingerGestures);
userState.setTwoFingerPassthroughLocked(requestTwoFingerPassthrough);

View File

@@ -994,6 +994,9 @@ class AccessibilityUserState {
mServiceDetectsGestures.put(displayId, mode);
}
public void resetServiceDetectsGestures() {
mServiceDetectsGestures.clear();
}
public boolean isServiceDetectsGesturesEnabled(int displayId) {
if (mServiceDetectsGestures.contains(displayId)) {
return mServiceDetectsGestures.get(displayId);