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

This commit is contained in:
Treehugger Robot
2022-10-12 20:16:47 +00:00
committed by Gerrit Code Review
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);