Loading src/com/android/settings/accessibility/AccessibilitySettings.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java +19 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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() { Loading @@ -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; } Loading Loading @@ -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())); Loading Loading @@ -406,7 +411,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted @VisibleForTesting void saveNonEmptyUserShortcutType(int type) { if (type == AccessibilityUtil.UserShortcutType.EMPTY) { if (type == DEFAULT) { return; } Loading Loading @@ -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); Loading @@ -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() { Loading @@ -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; } Loading @@ -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); Loading src/com/android/settings/accessibility/AccessibilityShortcutsTutorial.java +18 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) Loading Loading @@ -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); Loading @@ -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 = Loading @@ -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 = Loading @@ -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); Loading @@ -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 = Loading Loading @@ -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) Loading src/com/android/settings/accessibility/AccessibilityUtil.java +32 −60 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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. * Loading Loading @@ -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); } } Loading Loading @@ -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); } } Loading Loading @@ -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); } } Loading Loading @@ -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; } } Loading @@ -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( Loading src/com/android/settings/accessibility/PreferredShortcut.java +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
src/com/android/settings/accessibility/AccessibilitySettings.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java +19 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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() { Loading @@ -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; } Loading Loading @@ -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())); Loading Loading @@ -406,7 +411,7 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted @VisibleForTesting void saveNonEmptyUserShortcutType(int type) { if (type == AccessibilityUtil.UserShortcutType.EMPTY) { if (type == DEFAULT) { return; } Loading Loading @@ -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); Loading @@ -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() { Loading @@ -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; } Loading @@ -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); Loading
src/com/android/settings/accessibility/AccessibilityShortcutsTutorial.java +18 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) Loading Loading @@ -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); Loading @@ -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 = Loading @@ -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 = Loading @@ -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); Loading @@ -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 = Loading Loading @@ -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) Loading
src/com/android/settings/accessibility/AccessibilityUtil.java +32 −60 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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. * Loading Loading @@ -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); } } Loading Loading @@ -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); } } Loading Loading @@ -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); } } Loading Loading @@ -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; } } Loading @@ -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( Loading
src/com/android/settings/accessibility/PreferredShortcut.java +1 −1 Original line number Diff line number Diff line Loading @@ -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