Merge "[DO NOT MERGE] Fix bugs with changing service gesture detection state."
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