diff options
3 files changed, 34 insertions, 14 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java index bf4c02d83883..952e85a310bc 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java @@ -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(); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 4d3bebc17ca9..2a4bcb08b54b 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -2305,6 +2305,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; } @@ -2322,26 +2323,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; @@ -2659,6 +2661,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); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java index 0e8f3c0c0cbe..a0fc8d30f64c 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java @@ -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); |