[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:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user