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

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

Merge "Refactoring Accessibility settings to use ShortcutConstants.UserShortcutType" into main

parents 4b027e6e 8f313621
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