Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 912cca9f authored by Ameer Armaly's avatar Ameer Armaly
Browse files

[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
parent b6d9367b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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();
+28 −14
Original line number Diff line number Diff line
@@ -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,8 +2322,9 @@ 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;
@@ -2332,6 +2334,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                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.
@@ -2342,7 +2345,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                            mInputFilter.setServiceDetectsGesturesEnabled(displayId, mode);
                        }
                    }
                    }
                    inputFilter = null;
                    setInputFilter = true;
                }
@@ -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);
+3 −0
Original line number Diff line number Diff line
@@ -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);