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

Commit 8f313621 authored by Riley Jones's avatar Riley Jones
Browse files

Refactoring Accessibility settings to use ShortcutConstants.UserShortcutType

This removes AccessibilityUtil.UserShortcutType,
replacing all mention of it with ShortcutConstants.UserShortcutType

NO_IFTTT=UI order not changed
Test: atest com.android.settings.accessibility
Bug: 322014084
Flag: EXEMPT internal refactoring

Change-Id: I18695d040c4bd08a455143594e770adda2b1a8de
parent ac7236ec
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.accessibility;

import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.DEFAULT;

import android.accessibilityservice.AccessibilityServiceInfo;
import android.accessibilityservice.AccessibilityShortcutInfo;
import android.app.settings.SettingsEnums;
@@ -283,7 +285,7 @@ public class AccessibilitySettings extends DashboardFragment implements
                    info.getResolveInfo().serviceInfo.packageName,
                    info.getResolveInfo().serviceInfo.name);
            final boolean shortcutEnabled = AccessibilityUtil.getUserShortcutTypesFromSettings(
                    context, componentName) != AccessibilityUtil.UserShortcutType.EMPTY;
                    context, componentName) != DEFAULT;
            serviceState = shortcutEnabled
                    ? context.getText(R.string.accessibility_summary_shortcut_enabled)
                    : context.getText(R.string.generic_accessibility_feature_shortcut_off);
+19 −14
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.settings.accessibility;

import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.DEFAULT;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.QUICK_SETTINGS;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
import static com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_GENERAL_CATEGORY;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_SAVED_QS_TOOLTIP_TYPE;
@@ -43,6 +47,7 @@ import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen;

import com.android.internal.accessibility.common.ShortcutConstants;
import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.accessibility.shortcuts.EditShortcutsPreferenceFragment;
@@ -310,7 +315,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted
    }

    /**
     * Returns accumulated {@link AccessibilityUtil.UserShortcutType} checkbox value or
     * Returns accumulated {@link UserShortcutType} checkbox value or
     * {@code NOT_SET} if checkboxes did not exist.
     */
    protected int getShortcutTypeCheckBoxValue() {
@@ -318,12 +323,12 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted
            return NOT_SET;
        }

        int value = AccessibilityUtil.UserShortcutType.EMPTY;
        int value = DEFAULT;
        if (mSoftwareTypeCheckBox.isChecked()) {
            value |= AccessibilityUtil.UserShortcutType.SOFTWARE;
            value |= SOFTWARE;
        }
        if (mHardwareTypeCheckBox.isChecked()) {
            value |= AccessibilityUtil.UserShortcutType.HARDWARE;
            value |= HARDWARE;
        }
        return value;
    }
@@ -374,7 +379,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted
        saveNonEmptyUserShortcutType(value);
        AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), value, getComponentName());
        AccessibilityUtil.optOutAllValuesFromSettings(getPrefContext(), ~value, getComponentName());
        final boolean shortcutAssigned = value != AccessibilityUtil.UserShortcutType.EMPTY;
        final boolean shortcutAssigned = value != DEFAULT;
        mShortcutPreference.setChecked(shortcutAssigned);
        mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));

@@ -406,7 +411,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted

    @VisibleForTesting
    void saveNonEmptyUserShortcutType(int type) {
        if (type == AccessibilityUtil.UserShortcutType.EMPTY) {
        if (type == DEFAULT) {
            return;
        }

@@ -456,16 +461,16 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted
        // LINT.IfChange(shortcut_type_ui_order)
        final List<CharSequence> list = new ArrayList<>();
        if (android.view.accessibility.Flags.a11yQsShortcut()) {
            if (hasShortcutType(shortcutTypes, AccessibilityUtil.UserShortcutType.QUICK_SETTINGS)) {
            if (hasShortcutType(shortcutTypes, QUICK_SETTINGS)) {
                final CharSequence qsTitle = context.getText(
                        R.string.accessibility_feature_shortcut_setting_summary_quick_settings);
                list.add(qsTitle);
            }
        }
        if (hasShortcutType(shortcutTypes, AccessibilityUtil.UserShortcutType.SOFTWARE)) {
        if (hasShortcutType(shortcutTypes, SOFTWARE)) {
            list.add(getSoftwareShortcutTypeSummary(context));
        }
        if (hasShortcutType(shortcutTypes, AccessibilityUtil.UserShortcutType.HARDWARE)) {
        if (hasShortcutType(shortcutTypes, HARDWARE)) {
            final CharSequence hardwareTitle = context.getText(
                    R.string.accessibility_shortcut_hardware_keyword);
            list.add(hardwareTitle);
@@ -488,13 +493,13 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted
        if (value == NOT_SET) {
            final int lastNonEmptyUserShortcutType = getUserPreferredShortcutTypes();
            value = mShortcutPreference.isChecked() ? lastNonEmptyUserShortcutType
                    : AccessibilityUtil.UserShortcutType.EMPTY;
                    : DEFAULT;
        }

        mSoftwareTypeCheckBox.setChecked(
                hasShortcutType(value, AccessibilityUtil.UserShortcutType.SOFTWARE));
                hasShortcutType(value, SOFTWARE));
        mHardwareTypeCheckBox.setChecked(
                hasShortcutType(value, AccessibilityUtil.UserShortcutType.HARDWARE));
                hasShortcutType(value, HARDWARE));
    }

    private int restoreOnConfigChangedValue() {
@@ -503,7 +508,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted
        return savedValue;
    }

    private boolean hasShortcutType(int value, @AccessibilityUtil.UserShortcutType int type) {
    private boolean hasShortcutType(int value, @UserShortcutType int type) {
        return (value & type) == type;
    }

@@ -514,7 +519,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted

        final int shortcutTypes = AccessibilityUtil.getUserShortcutTypesFromSettings(
                getPrefContext(), getComponentName());
        if (shortcutTypes != AccessibilityUtil.UserShortcutType.EMPTY) {
        if (shortcutTypes != DEFAULT) {
            final PreferredShortcut shortcut = new PreferredShortcut(
                    getComponentName().flattenToString(), shortcutTypes);
            PreferredShortcuts.saveUserShortcutType(getPrefContext(), shortcut);
+18 −14
Original line number Diff line number Diff line
@@ -19,7 +19,11 @@ package com.android.settings.accessibility;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;

import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.QUICK_SETTINGS;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.TRIPLETAP;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.TWOFINGER_DOUBLETAP;

import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -171,7 +175,7 @@ public final class AccessibilityShortcutsTutorial {
            AlertDialog dialog, List<TutorialPage> pages, int selectedPageIndex) {
        final Button button = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
        final int pageType = pages.get(selectedPageIndex).getType();
        final int buttonVisibility = pageType == UserShortcutType.SOFTWARE ? VISIBLE : GONE;
        final int buttonVisibility = (pageType == SOFTWARE) ? VISIBLE : GONE;
        button.setVisibility(buttonVisibility);
        if (buttonVisibility == VISIBLE) {
            final int textResId = AccessibilityUtil.isFloatingMenuEnabled(dialog.getContext())
@@ -393,7 +397,7 @@ public final class AccessibilityShortcutsTutorial {
    }

    private static TutorialPage createSoftwareTutorialPage(@NonNull Context context) {
        final int type = UserShortcutType.SOFTWARE;
        final int type = SOFTWARE;
        final CharSequence title = getSoftwareTitle(context);
        final View image = createSoftwareImage(context);
        final CharSequence instruction = getSoftwareInstruction(context);
@@ -405,7 +409,7 @@ public final class AccessibilityShortcutsTutorial {
    }

    private static TutorialPage createHardwareTutorialPage(@NonNull Context context) {
        final int type = UserShortcutType.HARDWARE;
        final int type = HARDWARE;
        final CharSequence title =
                context.getText(R.string.accessibility_tutorial_dialog_title_volume);
        final View image =
@@ -420,7 +424,7 @@ public final class AccessibilityShortcutsTutorial {
    }

    private static TutorialPage createTripleTapTutorialPage(@NonNull Context context) {
        final int type = UserShortcutType.TRIPLETAP;
        final int type = TRIPLETAP;
        final CharSequence title =
                context.getText(R.string.accessibility_tutorial_dialog_title_triple);
        final View image =
@@ -436,7 +440,7 @@ public final class AccessibilityShortcutsTutorial {
    }

    private static TutorialPage createTwoFingerTripleTapTutorialPage(@NonNull Context context) {
        final int type = UserShortcutType.TWOFINGER_DOUBLETAP;
        final int type = TWOFINGER_DOUBLETAP;
        final int numFingers = 2;
        final CharSequence title = context.getString(
                R.string.accessibility_tutorial_dialog_title_two_finger_double, numFingers);
@@ -454,7 +458,7 @@ public final class AccessibilityShortcutsTutorial {

    private static TutorialPage createQuickSettingsTutorialPage(
            @NonNull Context context, @NonNull CharSequence featureName, boolean inSetupWizard) {
        final int type = UserShortcutType.QUICK_SETTINGS;
        final int type = QUICK_SETTINGS;
        final CharSequence title =
                context.getText(R.string.accessibility_tutorial_dialog_title_quick_setting);
        final View image =
@@ -494,28 +498,28 @@ public final class AccessibilityShortcutsTutorial {
        // LINT.IfChange(shortcut_type_ui_order)
        final List<TutorialPage> tutorialPages = new ArrayList<>();
        if (android.view.accessibility.Flags.a11yQsShortcut()) {
            if ((shortcutTypes & UserShortcutType.QUICK_SETTINGS)
                    == UserShortcutType.QUICK_SETTINGS) {
            if ((shortcutTypes & QUICK_SETTINGS)
                    == QUICK_SETTINGS) {
                tutorialPages.add(
                        createQuickSettingsTutorialPage(context, featureName, inSetupWizard));
            }
        }
        if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) {
        if ((shortcutTypes & SOFTWARE) == SOFTWARE) {
            tutorialPages.add(createSoftwareTutorialPage(context));
        }

        if ((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE) {
        if ((shortcutTypes & HARDWARE) == HARDWARE) {
            tutorialPages.add(createHardwareTutorialPage(context));
        }

        if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
            if ((shortcutTypes & UserShortcutType.TWOFINGER_DOUBLETAP)
                    == UserShortcutType.TWOFINGER_DOUBLETAP) {
            if ((shortcutTypes & TWOFINGER_DOUBLETAP)
                    == TWOFINGER_DOUBLETAP) {
                tutorialPages.add(createTwoFingerTripleTapTutorialPage(context));
            }
        }

        if ((shortcutTypes & UserShortcutType.TRIPLETAP) == UserShortcutType.TRIPLETAP) {
        if ((shortcutTypes & TRIPLETAP) == TRIPLETAP) {
            tutorialPages.add(createTripleTapTutorialPage(context));
        }
        // LINT.ThenChange(/res/xml/accessibility_edit_shortcuts.xml:shortcut_type_ui_order)
+32 −60
Original line number Diff line number Diff line
@@ -21,6 +21,12 @@ import static android.view.WindowInsets.Type.displayCutout;
import static android.view.WindowInsets.Type.systemBars;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;

import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.DEFAULT;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.QUICK_SETTINGS;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.TRIPLETAP;

import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName;
import android.content.Context;
@@ -41,6 +47,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;

import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
import com.android.internal.accessibility.util.ShortcutUtils;

import java.lang.annotation.Retention;
@@ -81,41 +88,6 @@ public final class AccessibilityUtil {
    private static final TextUtils.SimpleStringSplitter sStringColonSplitter =
            new TextUtils.SimpleStringSplitter(COMPONENT_NAME_SEPARATOR);

    /**
     * Annotation for different user shortcut type UI type.
     *
     * {@code EMPTY} for displaying default value.
     * {@code SOFTWARE} for displaying specifying the accessibility services or features which
     * choose accessibility button in the navigation bar as preferred shortcut.
     * {@code HARDWARE} for displaying specifying the accessibility services or features which
     * choose accessibility shortcut as preferred shortcut.
     * {@code TRIPLETAP} for displaying specifying magnification to be toggled via quickly
     * tapping screen 3 times as preferred shortcut.
     * {@code TWOFINGER_DOUBLETAP} for displaying specifying magnification to be toggled via
     * quickly tapping screen 2 times with two fingers as preferred shortcut.
     * {@code QUICK_SETTINGS} for displaying specifying the accessibility services or features which
     * choose Quick Settings as preferred shortcut.
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({
            UserShortcutType.EMPTY,
            UserShortcutType.SOFTWARE,
            UserShortcutType.HARDWARE,
            UserShortcutType.TRIPLETAP,
            UserShortcutType.TWOFINGER_DOUBLETAP,
            UserShortcutType.QUICK_SETTINGS,
    })

    /** Denotes the user shortcut type. */
    public @interface UserShortcutType {
        int EMPTY = 0;
        int SOFTWARE = 1;
        int HARDWARE = 1 << 1;
        int TRIPLETAP = 1 << 2;
        int TWOFINGER_DOUBLETAP = 1 << 3;
        int QUICK_SETTINGS = 1 << 4;
    }

    /**
     * Denotes the quick setting tooltip type.
     *
@@ -230,11 +202,11 @@ public final class AccessibilityUtil {
            return;
        }

        if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) {
            optInValueToSettings(context, UserShortcutType.SOFTWARE, componentName);
        if ((shortcutTypes & SOFTWARE) == SOFTWARE) {
            optInValueToSettings(context, SOFTWARE, componentName);
        }
        if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) {
            optInValueToSettings(context, UserShortcutType.HARDWARE, componentName);
        if (((shortcutTypes & HARDWARE) == HARDWARE)) {
            optInValueToSettings(context, HARDWARE, componentName);
        }
    }

@@ -301,11 +273,11 @@ public final class AccessibilityUtil {
            return;
        }

        if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) {
            optOutValueFromSettings(context, UserShortcutType.SOFTWARE, componentName);
        if ((shortcutTypes & SOFTWARE) == SOFTWARE) {
            optOutValueFromSettings(context, SOFTWARE, componentName);
        }
        if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) {
            optOutValueFromSettings(context, UserShortcutType.HARDWARE, componentName);
        if (((shortcutTypes & HARDWARE) == HARDWARE)) {
            optOutValueFromSettings(context, HARDWARE, componentName);
        }
    }

@@ -364,16 +336,16 @@ public final class AccessibilityUtil {
    static boolean hasValuesInSettings(Context context, int shortcutTypes,
            @NonNull ComponentName componentName) {
        boolean exist = false;
        if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) {
            exist = hasValueInSettings(context, UserShortcutType.SOFTWARE, componentName);
        if ((shortcutTypes & SOFTWARE) == SOFTWARE) {
            exist = hasValueInSettings(context, SOFTWARE, componentName);
        }
        if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) {
            exist |= hasValueInSettings(context, UserShortcutType.HARDWARE, componentName);
        if (((shortcutTypes & HARDWARE) == HARDWARE)) {
            exist |= hasValueInSettings(context, HARDWARE, componentName);
        }
        if (android.view.accessibility.Flags.a11yQsShortcut()) {
            if ((shortcutTypes & UserShortcutType.QUICK_SETTINGS)
                    == UserShortcutType.QUICK_SETTINGS) {
                exist |= hasValueInSettings(context, UserShortcutType.QUICK_SETTINGS,
            if ((shortcutTypes & QUICK_SETTINGS)
                    == QUICK_SETTINGS) {
                exist |= hasValueInSettings(context, QUICK_SETTINGS,
                        componentName);
            }
        }
@@ -427,16 +399,16 @@ public final class AccessibilityUtil {
     */
    static int getUserShortcutTypesFromSettings(Context context,
            @NonNull ComponentName componentName) {
        int shortcutTypes = UserShortcutType.EMPTY;
        if (hasValuesInSettings(context, UserShortcutType.SOFTWARE, componentName)) {
            shortcutTypes |= UserShortcutType.SOFTWARE;
        int shortcutTypes = DEFAULT;
        if (hasValuesInSettings(context, SOFTWARE, componentName)) {
            shortcutTypes |= SOFTWARE;
        }
        if (hasValuesInSettings(context, UserShortcutType.HARDWARE, componentName)) {
            shortcutTypes |= UserShortcutType.HARDWARE;
        if (hasValuesInSettings(context, HARDWARE, componentName)) {
            shortcutTypes |= HARDWARE;
        }
        if (android.view.accessibility.Flags.a11yQsShortcut()) {
            if (hasValuesInSettings(context, UserShortcutType.QUICK_SETTINGS, componentName)) {
                shortcutTypes |= UserShortcutType.QUICK_SETTINGS;
            if (hasValuesInSettings(context, QUICK_SETTINGS, componentName)) {
                shortcutTypes |= QUICK_SETTINGS;
            }
        }

@@ -455,11 +427,11 @@ public final class AccessibilityUtil {
        }

        switch (shortcutType) {
            case UserShortcutType.SOFTWARE:
            case SOFTWARE:
                return Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS;
            case UserShortcutType.HARDWARE:
            case HARDWARE:
                return Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE;
            case UserShortcutType.TRIPLETAP:
            case TRIPLETAP:
                return Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED;
            default:
                throw new IllegalArgumentException(
+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.settings.accessibility;
import android.content.ComponentName;
import android.text.TextUtils;

import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;

import com.google.common.base.Objects;

Loading