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