[DO NOT MERGE] Fix bugs with changing service gesture detection state. am: 912cca9f73

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2237624

Change-Id: Iac18e600edbddfaed517fb997683af0aeb01f034
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Ameer Armaly
2022-10-12 20:47:10 +00:00
committed by Automerger Merge Worker
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); mServiceDetectsGestures.put(displayId, mode);
} }
public void resetServiceDetectsGestures() {
mServiceDetectsGestures.clear();
}
public void requestTouchExploration(int displayId) { public void requestTouchExploration(int displayId) {
if (mTouchExplorer.contains(displayId)) { if (mTouchExplorer.contains(displayId)) {
mTouchExplorer.get(displayId).requestTouchExploration(); mTouchExplorer.get(displayId).requestTouchExploration();

View File

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

View File

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