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

Commit e9fc0fb0 authored by Jean Chen's avatar Jean Chen Committed by Android (Google) Code Review
Browse files

Merge "feat(MultiFingerMultiTap): Add a feature flag and update its value from...

Merge "feat(MultiFingerMultiTap): Add a feature flag and update its value from observing the settings value for AccessibilityInputFilter" into main
parents 28522dd6 e5333311
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -145,6 +145,13 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
    /** Flag for intercepting generic motion events. */
    static final int FLAG_FEATURE_INTERCEPT_GENERIC_MOTION_EVENTS = 0x00000800;

    /**
     * Flag for enabling the two-finger triple-tap magnification feature.
     *
     * @see #setUserAndEnabledFeatures(int, int)
     */
    static final int FLAG_FEATURE_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP = 0x00001000;

    static final int FEATURES_AFFECTING_MOTION_EVENTS =
            FLAG_FEATURE_INJECT_MOTION_EVENTS
                    | FLAG_FEATURE_AUTOCLICK
+34 −0
Original line number Diff line number Diff line
@@ -2786,6 +2786,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                flags |= AccessibilityInputFilter
                        .FLAG_FEATURE_MAGNIFICATION_SINGLE_FINGER_TRIPLE_TAP;
            }
            if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
                if (userState.isMagnificationSingleFingerTripleTapEnabledLocked()) {
                    flags |= AccessibilityInputFilter
                            .FLAG_FEATURE_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP;
                }
            }
            if (userState.isShortcutMagnificationEnabledLocked()) {
                flags |= AccessibilityInputFilter.FLAG_FEATURE_TRIGGERED_SCREEN_MAGNIFIER;
            }
@@ -3150,6 +3156,21 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        return false;
    }

    private boolean readMagnificationTwoFingerTripleTapSettingsLocked(
            AccessibilityUserState userState) {
        final boolean magnificationTwoFingerTripleTapEnabled = Settings.Secure.getIntForUser(
                mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP_ENABLED,
                0, userState.mUserId) == 1;
        if ((magnificationTwoFingerTripleTapEnabled
                != userState.isMagnificationTwoFingerTripleTapEnabledLocked())) {
            userState.setMagnificationTwoFingerTripleTapEnabledLocked(
                    magnificationTwoFingerTripleTapEnabled);
            return true;
        }
        return false;
    }

    private boolean readAutoclickEnabledSettingLocked(AccessibilityUserState userState) {
        final boolean autoclickEnabled = Settings.Secure.getIntForUser(
                mContext.getContentResolver(),
@@ -3385,6 +3406,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        // displays in one display. It's not a real display and there's no input events for it.
        final ArrayList<Display> displays = getValidDisplayList();
        if (userState.isMagnificationSingleFingerTripleTapEnabledLocked()
                || userState.isMagnificationTwoFingerTripleTapEnabledLocked()
                || userState.isShortcutMagnificationEnabledLocked()) {
            for (int i = 0; i < displays.size(); i++) {
                final Display display = displays.get(i);
@@ -4920,6 +4942,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        private final Uri mMagnificationmSingleFingerTripleTapEnabledUri = Settings.Secure
                .getUriFor(Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);

        private final Uri mMagnificationTwoFingerTripleTapEnabledUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP_ENABLED);

        private final Uri mAutoclickEnabledUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED);

@@ -4977,6 +5002,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(mMagnificationmSingleFingerTripleTapEnabledUri,
                    false, this, UserHandle.USER_ALL);
            if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
                contentResolver.registerContentObserver(mMagnificationTwoFingerTripleTapEnabledUri,
                        false, this, UserHandle.USER_ALL);
            }
            contentResolver.registerContentObserver(mAutoclickEnabledUri,
                    false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(mEnabledAccessibilityServicesUri,
@@ -5027,6 +5056,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                    if (readMagnificationEnabledSettingsLocked(userState)) {
                        onUserStateChangedLocked(userState);
                    }
                } else if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()
                        && mMagnificationTwoFingerTripleTapEnabledUri.equals(uri)) {
                    if (readMagnificationTwoFingerTripleTapSettingsLocked(userState)) {
                        onUserStateChangedLocked(userState);
                    }
                } else if (mAutoclickEnabledUri.equals(uri)) {
                    if (readAutoclickEnabledSettingLocked(userState)) {
                        onUserStateChangedLocked(userState);
+10 −0
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ class AccessibilityUserState {
    private boolean mIsAudioDescriptionByDefaultRequested;
    private boolean mIsAutoclickEnabled;
    private boolean mIsMagnificationSingleFingerTripleTapEnabled;
    private boolean mMagnificationTwoFingerTripleTapEnabled;
    private boolean mIsFilterKeyEventsEnabled;
    private boolean mIsPerformGesturesEnabled;
    private boolean mAccessibilityFocusOnlyInActiveWindow;
@@ -212,6 +213,7 @@ class AccessibilityUserState {
        mRequestTwoFingerPassthrough = false;
        mSendMotionEventsEnabled = false;
        mIsMagnificationSingleFingerTripleTapEnabled = false;
        mMagnificationTwoFingerTripleTapEnabled = false;
        mIsAutoclickEnabled = false;
        mUserNonInteractiveUiTimeout = 0;
        mUserInteractiveUiTimeout = 0;
@@ -633,6 +635,14 @@ class AccessibilityUserState {
        mIsMagnificationSingleFingerTripleTapEnabled = enabled;
    }

    public boolean isMagnificationTwoFingerTripleTapEnabledLocked() {
        return mMagnificationTwoFingerTripleTapEnabled;
    }

    public void setMagnificationTwoFingerTripleTapEnabledLocked(boolean enabled) {
        mMagnificationTwoFingerTripleTapEnabled = enabled;
    }

    public boolean isFilterKeyEventsEnabledLocked() {
        return mIsFilterKeyEventsEnabled;
    }
+2 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ public class AccessibilityUserStateTest {
        mUserState.setTargetAssignedToAccessibilityButton(COMPONENT_NAME.flattenToString());
        mUserState.setTouchExplorationEnabledLocked(true);
        mUserState.setMagnificationSingleFingerTripleTapEnabledLocked(true);
        mUserState.setMagnificationTwoFingerTripleTapEnabledLocked(true);
        mUserState.setAutoclickEnabledLocked(true);
        mUserState.setUserNonInteractiveUiTimeoutLocked(30);
        mUserState.setUserInteractiveUiTimeoutLocked(30);
@@ -178,6 +179,7 @@ public class AccessibilityUserStateTest {
        assertNull(mUserState.getTargetAssignedToAccessibilityButton());
        assertFalse(mUserState.isTouchExplorationEnabledLocked());
        assertFalse(mUserState.isMagnificationSingleFingerTripleTapEnabledLocked());
        assertFalse(mUserState.isMagnificationTwoFingerTripleTapEnabledLocked());
        assertFalse(mUserState.isAutoclickEnabledLocked());
        assertEquals(0, mUserState.getUserNonInteractiveUiTimeoutLocked());
        assertEquals(0, mUserState.getUserInteractiveUiTimeoutLocked());