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

Commit ebf848a5 authored by Riley Jones's avatar Riley Jones Committed by Android (Google) Code Review
Browse files

Merge "Overloading A11yManager#getEnabledA11yServiceList to optionally accept userId" into main

parents eb06bdd3 5f3d9513
Loading
Loading
Loading
Loading
+26 −16
Original line number Diff line number Diff line
@@ -866,31 +866,18 @@ public final class AccessibilityManager {
    }

    /**
     * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services
     * for a given feedback type.
     *
     * @param feedbackTypeFlags The feedback type flags.
     * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
     *
     * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE
     * @see AccessibilityServiceInfo#FEEDBACK_GENERIC
     * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC
     * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN
     * @see AccessibilityServiceInfo#FEEDBACK_VISUAL
     * @see AccessibilityServiceInfo#FEEDBACK_BRAILLE
     * @see #getEnabledAccessibilityServiceList(int)
     * @hide
     */
    public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
            int feedbackTypeFlags) {
            int feedbackTypeFlags, int userId) {
        final IAccessibilityManager service;
        final int userId;
        synchronized (mLock) {
            service = getServiceLocked();
            if (service == null) {
                return Collections.emptyList();
            }
            userId = mUserId;
        }

        List<AccessibilityServiceInfo> services = null;
        try {
            services = service.getEnabledAccessibilityServiceList(feedbackTypeFlags, userId);
@@ -911,6 +898,29 @@ public final class AccessibilityManager {
        }
    }

    /**
     * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services
     * for a given feedback type.
     *
     * @param feedbackTypeFlags The feedback type flags.
     * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
     *
     * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE
     * @see AccessibilityServiceInfo#FEEDBACK_GENERIC
     * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC
     * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN
     * @see AccessibilityServiceInfo#FEEDBACK_VISUAL
     * @see AccessibilityServiceInfo#FEEDBACK_BRAILLE
     */
    public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
            int feedbackTypeFlags) {
        final int userId;
        synchronized (mLock) {
            userId = mUserId;
        }
        return getEnabledAccessibilityServiceList(feedbackTypeFlags, userId);
    }

    /**
     * Returns whether the user must be shown the AccessibilityService warning dialog
     * before the AccessibilityService (or any shortcut for the service) can be enabled.
+7 −4
Original line number Diff line number Diff line
@@ -136,7 +136,8 @@ public class AccessibilityShortcutController {

    private final Context mContext;
    private final Handler mHandler;
    private final UserSetupCompleteObserver  mUserSetupCompleteObserver;
    @VisibleForTesting
    public final UserSetupCompleteObserver  mUserSetupCompleteObserver;

    private AlertDialog mAlertDialog;
    private boolean mIsShortcutEnabled;
@@ -471,7 +472,7 @@ public class AccessibilityShortcutController {
        AccessibilityManager accessibilityManager =
                mFrameworkObjectProvider.getAccessibilityManagerInstance(mContext);
        return accessibilityManager.getEnabledAccessibilityServiceList(
                FEEDBACK_ALL_MASK).contains(serviceInfo);
                FEEDBACK_ALL_MASK, mUserId).contains(serviceInfo);
    }

    private boolean hasFeatureLeanback() {
@@ -676,7 +677,8 @@ public class AccessibilityShortcutController {
        }
    }

    private class UserSetupCompleteObserver extends ContentObserver {
    @VisibleForTesting
    public class UserSetupCompleteObserver extends ContentObserver {

        private boolean mIsRegistered = false;
        private int mUserId;
@@ -749,7 +751,8 @@ public class AccessibilityShortcutController {
                    R.string.config_defaultAccessibilityService);
            final List<AccessibilityServiceInfo> enabledServices =
                    mFrameworkObjectProvider.getAccessibilityManagerInstance(
                            mContext).getEnabledAccessibilityServiceList(FEEDBACK_ALL_MASK);
                            mContext).getEnabledAccessibilityServiceList(
                                    FEEDBACK_ALL_MASK, mUserId);
            for (int i = enabledServices.size() - 1; i >= 0; i--) {
                if (TextUtils.equals(defaultShortcutTarget, enabledServices.get(i).getId())) {
                    return;
+20 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHO
import static android.provider.Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE;
import static android.provider.Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES;
import static android.provider.Settings.Secure.USER_SETUP_COMPLETE;

import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME;
@@ -714,6 +715,25 @@ public class AccessibilityShortcutControllerTest {
        verify(mRingtone, times(0)).play();
    }

    @Test
    public void onUserSetupComplete_noEnabledServices_blankHardwareSetting() throws Exception {
        AccessibilityShortcutController controller = getController();
        configureValidShortcutService();
        // Shortcut setting should be cleared on user setup
        Settings.Secure.putStringForUser(
                mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, null, 0);
        when(mAccessibilityManagerService
                .getEnabledAccessibilityServiceList(anyInt(), eq(0)))
                .thenReturn(Collections.emptyList());
        Settings.Secure.putInt(mContentResolver, USER_SETUP_COMPLETE, 1);

        controller.mUserSetupCompleteObserver.onChange(true);

        final String shortcut = Settings.Secure.getStringForUser(
                mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, 0);
        assertThat(shortcut).isEqualTo("");
    }

    private void configureNoShortcutService() throws Exception {
        when(mAccessibilityManagerService
                .getAccessibilityShortcutTargets(HARDWARE))