Merge "Refactoring A11y shortcut functions in Settings to use GESTURE" into main
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java
index bd46152..60c7c87 100644
--- a/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java
@@ -49,9 +49,14 @@
public void displayPreference(PreferenceScreen screen) {
// Need to update footerPreference's data before super.displayPreference(), then it will use
// data to update related property of footerPreference.
- final int titleResource = AccessibilityUtil.isGestureNavigateEnabled(mContext)
- ? R.string.accessibility_button_gesture_description
- : R.string.accessibility_button_description;
+ final int titleResource;
+ if (android.provider.Flags.a11yStandaloneGestureEnabled()) {
+ titleResource = R.string.accessibility_button_description;
+ } else {
+ titleResource = AccessibilityUtil.isGestureNavigateEnabled(mContext)
+ ? R.string.accessibility_button_gesture_description
+ : R.string.accessibility_button_description;
+ }
final CharSequence footerText = Html.fromHtml(
MessageFormat.format(mContext.getString(titleResource), 1, 2, 3),
Html.FROM_HTML_MODE_COMPACT);
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonPreferenceController.java
index 53d9c55..68a765c 100644
--- a/src/com/android/settings/accessibility/AccessibilityButtonPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityButtonPreferenceController.java
@@ -61,7 +61,12 @@
}
private int getPreferenceTitleResource() {
- return AccessibilityUtil.isGestureNavigateEnabled(mContext)
- ? R.string.accessibility_button_gesture_title : R.string.accessibility_button_title;
+ if (android.provider.Flags.a11yStandaloneGestureEnabled()) {
+ return R.string.accessibility_button_title;
+ } else {
+ return AccessibilityUtil.isGestureNavigateEnabled(mContext)
+ ? R.string.accessibility_button_gesture_title
+ : R.string.accessibility_button_title;
+ }
}
}
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
index e92c86b..91d75f3 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
@@ -17,10 +17,8 @@
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.AccessibilityUtil.getShortcutSummaryList;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_GENERAL_CATEGORY;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_SAVED_QS_TOOLTIP_TYPE;
@@ -30,7 +28,6 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
-import android.icu.text.CaseMap;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
@@ -46,18 +43,15 @@
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;
import com.android.settings.dashboard.RestrictedDashboardFragment;
-import com.android.settings.utils.LocaleUtils;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
/**
* Base class for accessibility fragments shortcut functions and dialog management.
@@ -340,37 +334,7 @@
}
final int shortcutTypes = getUserPreferredShortcutTypes();
-
- // LINT.IfChange(shortcut_type_ui_order)
- final List<CharSequence> list = new ArrayList<>();
- if (android.view.accessibility.Flags.a11yQsShortcut()) {
- 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, SOFTWARE)) {
- list.add(getSoftwareShortcutTypeSummary(context));
- }
- if (hasShortcutType(shortcutTypes, HARDWARE)) {
- final CharSequence hardwareTitle = context.getText(
- R.string.accessibility_shortcut_hardware_keyword);
- list.add(hardwareTitle);
- }
- // LINT.ThenChange(/res/xml/accessibility_edit_shortcuts.xml:shortcut_type_ui_order)
-
- // Show software shortcut if first time to use.
- if (list.isEmpty()) {
- list.add(getSoftwareShortcutTypeSummary(context));
- }
-
- return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
- null, LocaleUtils.getConcatenatedString(list));
- }
-
- private boolean hasShortcutType(int value, @UserShortcutType int type) {
- return (value & type) == type;
+ return getShortcutSummaryList(context, shortcutTypes);
}
protected void updateShortcutPreferenceData() {
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutsTutorial.java b/src/com/android/settings/accessibility/AccessibilityShortcutsTutorial.java
index 8d908ac..de3cb8a 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutsTutorial.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutsTutorial.java
@@ -16,15 +16,19 @@
package com.android.settings.accessibility;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
+import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.GESTURE;
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.annotation.SuppressLint;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
@@ -60,7 +64,9 @@
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
-import com.android.server.accessibility.Flags;
+import com.android.internal.accessibility.common.ShortcutConstants;
+import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
+import com.android.internal.accessibility.util.ShortcutUtils;
import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.utils.StringUtil;
@@ -396,95 +402,84 @@
return textView;
}
- private static TutorialPage createSoftwareTutorialPage(@NonNull Context context) {
- final int type = SOFTWARE;
- final CharSequence title = getSoftwareTitle(context);
- final View image = createSoftwareImage(context);
- final CharSequence instruction = getSoftwareInstruction(context);
- final ImageView indicatorIcon =
- createImageView(context, R.drawable.ic_accessibility_page_indicator);
- indicatorIcon.setEnabled(false);
-
- return new TutorialPage(type, title, image, indicatorIcon, instruction);
+ @SuppressLint("SwitchIntDef")
+ private static CharSequence getShortcutTitle(
+ @NonNull Context context, @UserShortcutType int shortcutType, int buttonMode) {
+ return switch (shortcutType) {
+ case HARDWARE -> context.getText(R.string.accessibility_tutorial_dialog_title_volume);
+ case SOFTWARE -> getSoftwareTitle(context, buttonMode);
+ case GESTURE -> context.getText(R.string.accessibility_tutorial_dialog_title_gesture);
+ case TRIPLETAP -> context.getText(R.string.accessibility_tutorial_dialog_title_triple);
+ case TWOFINGER_DOUBLETAP -> context.getString(
+ R.string.accessibility_tutorial_dialog_title_two_finger_double, 2);
+ case QUICK_SETTINGS -> context.getText(
+ R.string.accessibility_tutorial_dialog_title_quick_setting);
+ default -> "";
+ };
}
- private static TutorialPage createHardwareTutorialPage(@NonNull Context context) {
- final int type = HARDWARE;
- final CharSequence title =
- context.getText(R.string.accessibility_tutorial_dialog_title_volume);
- final View image =
- createIllustrationView(context, R.drawable.accessibility_shortcut_type_volume_keys);
- final ImageView indicatorIcon =
- createImageView(context, R.drawable.ic_accessibility_page_indicator);
- final CharSequence instruction =
- context.getText(R.string.accessibility_tutorial_dialog_message_volume);
- indicatorIcon.setEnabled(false);
-
- return new TutorialPage(type, title, image, indicatorIcon, instruction);
- }
-
- private static TutorialPage createTripleTapTutorialPage(@NonNull Context context) {
- final int type = TRIPLETAP;
- final CharSequence title =
- context.getText(R.string.accessibility_tutorial_dialog_title_triple);
- final View image =
- createIllustrationViewWithImageRawResource(context,
- R.raw.accessibility_shortcut_type_tripletap);
- final CharSequence instruction = context.getString(
- R.string.accessibility_tutorial_dialog_tripletap_instruction, 3);
- final ImageView indicatorIcon =
- createImageView(context, R.drawable.ic_accessibility_page_indicator);
- indicatorIcon.setEnabled(false);
-
- return new TutorialPage(type, title, image, indicatorIcon, instruction);
- }
-
- private static TutorialPage createTwoFingerTripleTapTutorialPage(@NonNull Context context) {
- final int type = TWOFINGER_DOUBLETAP;
- final int numFingers = 2;
- final CharSequence title = context.getString(
- R.string.accessibility_tutorial_dialog_title_two_finger_double, numFingers);
- final View image =
- createIllustrationViewWithImageRawResource(context,
- R.raw.accessibility_shortcut_type_2finger_doubletap);
- final CharSequence instruction = context.getString(
- R.string.accessibility_tutorial_dialog_twofinger_doubletap_instruction, numFingers);
- final ImageView indicatorIcon =
- createImageView(context, R.drawable.ic_accessibility_page_indicator);
- indicatorIcon.setEnabled(false);
-
- return new TutorialPage(type, title, image, indicatorIcon, instruction);
- }
-
- private static TutorialPage createQuickSettingsTutorialPage(
- @NonNull Context context, @NonNull CharSequence featureName, boolean inSetupWizard) {
- final int type = QUICK_SETTINGS;
- final CharSequence title =
- context.getText(R.string.accessibility_tutorial_dialog_title_quick_setting);
- final View image =
- createIllustrationView(context,
+ @SuppressLint("SwitchIntDef")
+ private static View getShortcutImage(
+ @NonNull Context context, @UserShortcutType int shortcutType, int buttonMode) {
+ return switch (shortcutType) {
+ case HARDWARE -> createIllustrationView(
+ context, R.drawable.accessibility_shortcut_type_volume_keys);
+ case SOFTWARE -> createSoftwareImage(context, buttonMode);
+ case GESTURE -> createIllustrationView(context,
+ AccessibilityUtil.isTouchExploreEnabled(context)
+ ? R.drawable.accessibility_shortcut_type_gesture_touch_explore_on
+ : R.drawable.accessibility_shortcut_type_gesture);
+ case TRIPLETAP -> createIllustrationViewWithImageRawResource(context,
+ R.raw.accessibility_shortcut_type_tripletap);
+ case TWOFINGER_DOUBLETAP -> createIllustrationViewWithImageRawResource(context,
+ R.raw.accessibility_shortcut_type_2finger_doubletap);
+ case QUICK_SETTINGS -> {
+ View v = createIllustrationView(context,
R.drawable.accessibility_shortcut_type_quick_settings);
- // Remove the unneeded background, since the main image already includes a background
- image.findViewById(R.id.image_background).setVisibility(GONE);
- final int numFingers = AccessibilityUtil.isTouchExploreEnabled(context) ? 2 : 1;
- Map<String, Object> arguments = new ArrayMap<>();
- arguments.put("count", numFingers);
- arguments.put("featureName", featureName);
- final CharSequence instruction = StringUtil.getIcuPluralsString(context,
- arguments,
- R.string.accessibility_tutorial_dialog_message_quick_setting);
- final SpannableStringBuilder tutorialText = new SpannableStringBuilder();
- if (inSetupWizard) {
- tutorialText.append(context.getText(
- R.string.accessibility_tutorial_dialog_shortcut_unavailable_in_suw))
- .append("\n\n");
- }
- tutorialText.append(instruction);
+ View bg = v.findViewById(R.id.image_background);
+ if (bg != null) {
+ bg.setVisibility(GONE);
+ }
+ yield v;
+ }
+ default -> new View(context);
+ };
+ }
+
+ private static CharSequence getShortcutInstruction(
+ @NonNull Context context, @UserShortcutType int shortcutType, int buttonMode,
+ @NonNull CharSequence featureName, boolean inSetupWizard) {
+ return switch (shortcutType) {
+ case HARDWARE -> context.getText(R.string.accessibility_tutorial_dialog_message_volume);
+ case SOFTWARE -> getSoftwareInstruction(context, buttonMode);
+ case GESTURE -> StringUtil.getIcuPluralsString(
+ context,
+ AccessibilityUtil.isTouchExploreEnabled(context) ? 3 : 2,
+ R.string.accessibility_tutorial_dialog_gesture_shortcut_instruction);
+ case TRIPLETAP -> context.getString(
+ R.string.accessibility_tutorial_dialog_tripletap_instruction, 3);
+ case TWOFINGER_DOUBLETAP -> context.getString(
+ R.string.accessibility_tutorial_dialog_twofinger_doubletap_instruction, 2);
+ case QUICK_SETTINGS -> getQuickSettingsInstruction(context, featureName, inSetupWizard);
+ default -> "";
+ };
+ }
+
+ @SuppressLint("SwitchIntDef")
+ private static TutorialPage createShortcutTutorialPage(
+ @NonNull Context context, @UserShortcutType int shortcutType, int buttonMode,
+ @NonNull CharSequence featureName, boolean inSetupWizard) {
+
final ImageView indicatorIcon =
createImageView(context, R.drawable.ic_accessibility_page_indicator);
indicatorIcon.setEnabled(false);
- return new TutorialPage(type, title, image, indicatorIcon, tutorialText);
+ return new TutorialPage(shortcutType,
+ getShortcutTitle(context, shortcutType, buttonMode),
+ getShortcutImage(context, shortcutType, buttonMode),
+ createImageView(context, R.drawable.ic_accessibility_page_indicator),
+ getShortcutInstruction(
+ context, shortcutType, buttonMode, featureName, inSetupWizard));
}
/**
@@ -497,79 +492,58 @@
boolean inSetupWizard) {
// LINT.IfChange(shortcut_type_ui_order)
final List<TutorialPage> tutorialPages = new ArrayList<>();
- if (android.view.accessibility.Flags.a11yQsShortcut()) {
- if ((shortcutTypes & QUICK_SETTINGS)
- == QUICK_SETTINGS) {
- tutorialPages.add(
- createQuickSettingsTutorialPage(context, featureName, inSetupWizard));
+ int buttonMode = ShortcutUtils.getButtonMode(context, context.getUserId());
+
+ for (int shortcutType: ShortcutConstants.USER_SHORTCUT_TYPES) {
+ if ((shortcutTypes & shortcutType) == 0) {
+ continue;
}
- }
- if ((shortcutTypes & SOFTWARE) == SOFTWARE) {
- tutorialPages.add(createSoftwareTutorialPage(context));
- }
-
- if ((shortcutTypes & HARDWARE) == HARDWARE) {
- tutorialPages.add(createHardwareTutorialPage(context));
- }
-
- if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
- if ((shortcutTypes & TWOFINGER_DOUBLETAP)
- == TWOFINGER_DOUBLETAP) {
- tutorialPages.add(createTwoFingerTripleTapTutorialPage(context));
+ if ((shortcutTypes & QUICK_SETTINGS) == QUICK_SETTINGS
+ && !android.view.accessibility.Flags.a11yQsShortcut()) {
+ continue;
}
- }
-
- if ((shortcutTypes & TRIPLETAP) == TRIPLETAP) {
- tutorialPages.add(createTripleTapTutorialPage(context));
+ tutorialPages.add(
+ createShortcutTutorialPage(
+ context, shortcutType, buttonMode, featureName, inSetupWizard));
}
// LINT.ThenChange(/res/xml/accessibility_edit_shortcuts.xml:shortcut_type_ui_order)
return tutorialPages;
}
- private static View createSoftwareImage(Context context) {
- int resId;
- if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
- return createIllustrationViewWithImageRawResource(
- context, R.raw.accessibility_shortcut_type_fab);
- } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
- resId = AccessibilityUtil.isTouchExploreEnabled(context)
- ? R.drawable.accessibility_shortcut_type_gesture_touch_explore_on
- : R.drawable.accessibility_shortcut_type_gesture;
- } else {
- resId = R.drawable.accessibility_shortcut_type_navbar;
- }
- return createIllustrationView(context, resId);
+ private static View createSoftwareImage(Context context, int buttonMode) {
+ return switch(buttonMode) {
+ case ACCESSIBILITY_BUTTON_MODE_GESTURE ->
+ createIllustrationView(context,
+ AccessibilityUtil.isTouchExploreEnabled(context)
+ ? R.drawable
+ .accessibility_shortcut_type_gesture_touch_explore_on
+ : R.drawable.accessibility_shortcut_type_gesture);
+ case ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU ->
+ createIllustrationViewWithImageRawResource(
+ context, R.raw.accessibility_shortcut_type_fab);
+ default -> createIllustrationView(
+ context, R.drawable.accessibility_shortcut_type_navbar);
+ };
}
- private static CharSequence getSoftwareTitle(Context context) {
- int resId;
- if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
- resId = R.string.accessibility_tutorial_dialog_title_button;
- } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
- resId = R.string.accessibility_tutorial_dialog_title_gesture;
- } else {
- resId = R.string.accessibility_tutorial_dialog_title_button;
- }
- return context.getText(resId);
+ private static CharSequence getSoftwareTitle(Context context, int buttonMode) {
+ return context.getText(buttonMode == ACCESSIBILITY_BUTTON_MODE_GESTURE
+ ? R.string.accessibility_tutorial_dialog_title_gesture
+ : R.string.accessibility_tutorial_dialog_title_button);
}
- private static CharSequence getSoftwareInstruction(Context context) {
- final SpannableStringBuilder sb = new SpannableStringBuilder();
- if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
- final int resId = R.string.accessibility_tutorial_dialog_message_floating_button;
- sb.append(context.getText(resId));
- } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
- final int numFingers = AccessibilityUtil.isTouchExploreEnabled(context) ? 3 : 2;
- sb.append(StringUtil.getIcuPluralsString(
+ private static CharSequence getSoftwareInstruction(Context context, int buttonMode) {
+ return switch(buttonMode) {
+ case ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU -> context.getText(
+ R.string.accessibility_tutorial_dialog_message_floating_button);
+ case ACCESSIBILITY_BUTTON_MODE_GESTURE -> StringUtil.getIcuPluralsString(
context,
- numFingers,
- R.string.accessibility_tutorial_dialog_gesture_shortcut_instruction));
- } else {
- final int resId = R.string.accessibility_tutorial_dialog_message_button;
- sb.append(getSoftwareInstructionWithIcon(context, context.getText(resId)));
- }
- return sb;
+ AccessibilityUtil.isTouchExploreEnabled(context) ? 3 : 2,
+ R.string.accessibility_tutorial_dialog_gesture_shortcut_instruction);
+ default -> getSoftwareInstructionWithIcon(context,
+ context.getText(R.string.accessibility_tutorial_dialog_message_button));
+ };
}
private static CharSequence getSoftwareInstructionWithIcon(Context context, CharSequence text) {
@@ -590,6 +564,24 @@
return spannableInstruction;
}
+ private static CharSequence getQuickSettingsInstruction(
+ Context context, CharSequence featureName, boolean inSetupWizard) {
+ Map<String, Object> arguments = new ArrayMap<>();
+ arguments.put("count",
+ AccessibilityUtil.isTouchExploreEnabled(context) ? 2 : 1);
+ arguments.put("featureName", featureName);
+ final CharSequence pluralsString = StringUtil.getIcuPluralsString(
+ context, arguments,
+ R.string.accessibility_tutorial_dialog_message_quick_setting);
+ final SpannableStringBuilder tutorialText = new SpannableStringBuilder();
+ if (inSetupWizard) {
+ tutorialText.append(context.getText(R.string
+ .accessibility_tutorial_dialog_shortcut_unavailable_in_suw))
+ .append("\n\n");
+ }
+ return tutorialText.append(pluralsString);
+ }
+
private static class TutorialPage {
private final int mType;
private final CharSequence mTitle;
diff --git a/src/com/android/settings/accessibility/AccessibilityUtil.java b/src/com/android/settings/accessibility/AccessibilityUtil.java
index 5bf2a3e..5e178db 100644
--- a/src/com/android/settings/accessibility/AccessibilityUtil.java
+++ b/src/com/android/settings/accessibility/AccessibilityUtil.java
@@ -22,10 +22,12 @@
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.GESTURE;
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.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName;
@@ -33,6 +35,7 @@
import android.content.res.Resources;
import android.graphics.Insets;
import android.graphics.Rect;
+import android.icu.text.CaseMap;
import android.os.Build;
import android.os.UserHandle;
import android.provider.Settings;
@@ -47,11 +50,17 @@
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
+import com.android.internal.accessibility.common.ShortcutConstants;
import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
import com.android.internal.accessibility.util.ShortcutUtils;
+import com.android.settings.R;
+import com.android.settings.utils.LocaleUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
import java.util.Set;
import java.util.StringJoiner;
@@ -139,8 +148,8 @@
/** Determines if a gesture navigation bar is being used. */
public static boolean isGestureNavigateEnabled(Context context) {
- return context.getResources().getInteger(
- com.android.internal.R.integer.config_navBarInteractionMode)
+ return Settings.Secure.getInt(context.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, -1)
== NAV_BAR_MODE_GESTURAL;
}
@@ -335,22 +344,23 @@
*/
static boolean hasValuesInSettings(Context context, int shortcutTypes,
@NonNull ComponentName componentName) {
- boolean exist = false;
- if ((shortcutTypes & SOFTWARE) == SOFTWARE) {
- exist = hasValueInSettings(context, SOFTWARE, componentName);
- }
- if (((shortcutTypes & HARDWARE) == HARDWARE)) {
- exist |= hasValueInSettings(context, HARDWARE, componentName);
- }
- if (android.view.accessibility.Flags.a11yQsShortcut()) {
- if ((shortcutTypes & QUICK_SETTINGS)
- == QUICK_SETTINGS) {
- exist |= hasValueInSettings(context, QUICK_SETTINGS,
- componentName);
+ for (int shortcutType : ShortcutConstants.USER_SHORTCUT_TYPES) {
+ if (!android.view.accessibility.Flags.a11yQsShortcut()) {
+ if ((shortcutType & QUICK_SETTINGS) == QUICK_SETTINGS) {
+ continue;
+ }
+ }
+ if (!android.provider.Flags.a11yStandaloneGestureEnabled()) {
+ if ((shortcutType & GESTURE) == GESTURE) {
+ continue;
+ }
+ }
+ if ((shortcutTypes & shortcutType) == shortcutType
+ && hasValueInSettings(context, shortcutType, componentName)) {
+ return true;
}
}
-
- return exist;
+ return false;
}
/**
@@ -364,29 +374,14 @@
@VisibleForTesting
static boolean hasValueInSettings(Context context, @UserShortcutType int shortcutType,
@NonNull ComponentName componentName) {
- if (android.view.accessibility.Flags.a11yQsShortcut()) {
- return ShortcutUtils.getShortcutTargetsFromSettings(
- context, shortcutType, UserHandle.myUserId()
- ).contains(componentName.flattenToString());
- }
-
- final String targetKey = convertKeyFromSettings(shortcutType);
- final String targetString = Settings.Secure.getString(context.getContentResolver(),
- targetKey);
-
- if (TextUtils.isEmpty(targetString)) {
+ if (!android.view.accessibility.Flags.a11yQsShortcut()
+ && (shortcutType & QUICK_SETTINGS) == QUICK_SETTINGS) {
return false;
}
- sStringColonSplitter.setString(targetString);
-
- while (sStringColonSplitter.hasNext()) {
- final String name = sStringColonSplitter.next();
- if ((componentName.flattenToString()).equals(name)) {
- return true;
- }
- }
- return false;
+ return ShortcutUtils.getShortcutTargetsFromSettings(
+ context, shortcutType, UserHandle.myUserId()
+ ).contains(componentName.flattenToString());
}
/**
@@ -400,15 +395,19 @@
static int getUserShortcutTypesFromSettings(Context context,
@NonNull ComponentName componentName) {
int shortcutTypes = DEFAULT;
- if (hasValuesInSettings(context, SOFTWARE, componentName)) {
- shortcutTypes |= SOFTWARE;
- }
- if (hasValuesInSettings(context, HARDWARE, componentName)) {
- shortcutTypes |= HARDWARE;
- }
- if (android.view.accessibility.Flags.a11yQsShortcut()) {
- if (hasValuesInSettings(context, QUICK_SETTINGS, componentName)) {
- shortcutTypes |= QUICK_SETTINGS;
+ for (int shortcutType : ShortcutConstants.USER_SHORTCUT_TYPES) {
+ if (!android.view.accessibility.Flags.a11yQsShortcut()) {
+ if ((shortcutType & QUICK_SETTINGS) == QUICK_SETTINGS) {
+ continue;
+ }
+ }
+ if (!android.provider.Flags.a11yStandaloneGestureEnabled()) {
+ if ((shortcutType & GESTURE) == GESTURE) {
+ continue;
+ }
+ }
+ if (hasValueInSettings(context, shortcutType, componentName)) {
+ shortcutTypes |= shortcutType;
}
}
@@ -505,4 +504,66 @@
Settings.Secure.SKIP_ACCESSIBILITY_SHORTCUT_DIALOG_TIMEOUT_RESTRICTION, /*
true */ 1);
}
+
+ /**
+ * Assembles a localized string describing the provided shortcut types.
+ */
+ public static CharSequence getShortcutSummaryList(Context context, int shortcutTypes) {
+ final List<CharSequence> list = new ArrayList<>();
+
+ // LINT.IfChange(shortcut_type_ui_order)
+ for (int shortcutType : ShortcutConstants.USER_SHORTCUT_TYPES) {
+ if (!android.view.accessibility.Flags.a11yQsShortcut()
+ && (shortcutType & QUICK_SETTINGS) == QUICK_SETTINGS) {
+ continue;
+ }
+ if (!android.provider.Flags.a11yStandaloneGestureEnabled()
+ && (shortcutType & GESTURE) == GESTURE) {
+ continue;
+ }
+ if (!com.android.server.accessibility.Flags
+ .enableMagnificationMultipleFingerMultipleTapGesture()
+ && (shortcutType & TWOFINGER_DOUBLETAP) == TWOFINGER_DOUBLETAP) {
+ continue;
+ }
+
+ if ((shortcutTypes & shortcutType) == shortcutType) {
+ list.add(switch (shortcutType) {
+ case QUICK_SETTINGS -> context.getText(
+ R.string.accessibility_feature_shortcut_setting_summary_quick_settings);
+ case SOFTWARE -> getSoftwareShortcutSummary(context);
+ case GESTURE -> context.getText(
+ R.string.accessibility_shortcut_edit_summary_software_gesture);
+ case HARDWARE -> context.getText(
+ R.string.accessibility_shortcut_hardware_keyword);
+ case TWOFINGER_DOUBLETAP -> context.getString(
+ R.string.accessibility_shortcut_two_finger_double_tap_keyword, 2);
+ case TRIPLETAP -> context.getText(
+ R.string.accessibility_shortcut_triple_tap_keyword);
+ default -> "";
+ });
+ }
+ }
+
+ list.sort(CharSequence::compare);
+ return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
+ null, LocaleUtils.getConcatenatedString(list));
+ // LINT.ThenChange(/res/xml/accessibility_edit_shortcuts.xml:shortcut_type_ui_order)
+ }
+
+ @VisibleForTesting
+ static CharSequence getSoftwareShortcutSummary(Context context) {
+ if (android.provider.Flags.a11yStandaloneGestureEnabled()) {
+ return context.getText(R.string.accessibility_shortcut_edit_summary_software);
+ }
+ int resId;
+ if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+ resId = R.string.accessibility_shortcut_edit_summary_software;
+ } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+ resId = R.string.accessibility_shortcut_edit_summary_software_gesture;
+ } else {
+ resId = R.string.accessibility_shortcut_edit_summary_software;
+ }
+ return context.getText(resId);
+ }
}
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 9c61e5c..6649cf4 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -17,10 +17,9 @@
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.AccessibilityUtil.getShortcutSummaryList;
import android.app.Activity;
import android.app.Dialog;
@@ -34,7 +33,6 @@
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.graphics.drawable.Drawable;
-import android.icu.text.CaseMap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -59,14 +57,12 @@
import androidx.recyclerview.widget.RecyclerView;
import com.android.internal.accessibility.common.ShortcutConstants;
-import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.accessibility.shortcuts.EditShortcutsPreferenceFragment;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.flags.Flags;
-import com.android.settings.utils.LocaleUtils;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settingslib.widget.IllustrationPreference;
@@ -76,7 +72,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
/**
* Base class for accessibility fragments with toggle, shortcut, some helper functions
@@ -627,10 +622,6 @@
mFooterPreferenceController.displayPreference(screen);
}
- private boolean hasShortcutType(int value, @UserShortcutType int type) {
- return (value & type) == type;
- }
-
protected CharSequence getShortcutTypeSummary(Context context) {
if (!mShortcutPreference.isSettingsEditable()) {
return context.getText(R.string.accessibility_shortcut_edit_dialog_title_hardware);
@@ -640,47 +631,9 @@
return context.getText(R.string.accessibility_shortcut_state_off);
}
- // LINT.IfChange(shortcut_type_ui_order)
final int shortcutTypes = PreferredShortcuts.retrieveUserShortcutType(
context, mComponentName.flattenToString(), getDefaultShortcutTypes());
-
- final List<CharSequence> list = new ArrayList<>();
- if (android.view.accessibility.Flags.a11yQsShortcut()) {
- 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, SOFTWARE)) {
- list.add(getSoftwareShortcutTypeSummary(context));
- }
- if (hasShortcutType(shortcutTypes, HARDWARE)) {
- final CharSequence hardwareTitle = context.getText(
- R.string.accessibility_shortcut_hardware_keyword);
- list.add(hardwareTitle);
- }
- // LINT.ThenChange(/res/xml/accessibility_edit_shortcuts.xml:shortcut_type_ui_order)
-
- // Show software shortcut if first time to use.
- if (list.isEmpty()) {
- list.add(getSoftwareShortcutTypeSummary(context));
- }
-
- return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
- null, LocaleUtils.getConcatenatedString(list));
- }
-
- private static CharSequence getSoftwareShortcutTypeSummary(Context context) {
- int resId;
- if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
- resId = R.string.accessibility_shortcut_edit_summary_software;
- } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
- resId = R.string.accessibility_shortcut_edit_summary_software_gesture;
- } else {
- resId = R.string.accessibility_shortcut_edit_summary_software;
- }
- return context.getText(resId);
+ return getShortcutSummaryList(context, shortcutTypes);
}
/**
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index a030a0a..bc14288 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -19,6 +19,7 @@
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.DEFAULT;
+import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.GESTURE;
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;
@@ -27,6 +28,7 @@
import static com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums;
import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+import static com.android.settings.accessibility.AccessibilityUtil.getShortcutSummaryList;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
@@ -34,7 +36,6 @@
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.icu.text.CaseMap;
import android.icu.text.MessageFormat;
import android.net.Uri;
import android.os.Bundle;
@@ -55,6 +56,7 @@
import androidx.preference.SwitchPreferenceCompat;
import androidx.preference.TwoStatePreference;
+import com.android.internal.accessibility.common.ShortcutConstants;
import com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.accessibility.Flags;
@@ -62,7 +64,6 @@
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.accessibility.shortcuts.EditShortcutsPreferenceFragment;
-import com.android.settings.utils.LocaleUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.widget.IllustrationPreference;
@@ -70,7 +71,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
import java.util.Set;
import java.util.StringJoiner;
@@ -348,22 +348,6 @@
mDialogDelegate = delegate;
}
- private boolean hasShortcutType(int value, @UserShortcutType int type) {
- return (value & type) == type;
- }
-
- private static CharSequence getSoftwareShortcutTypeSummary(Context context) {
- int resId;
- if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
- resId = R.string.accessibility_shortcut_edit_summary_software;
- } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
- resId = R.string.accessibility_shortcut_edit_summary_software_gesture;
- } else {
- resId = R.string.accessibility_shortcut_edit_summary_software;
- }
- return context.getText(resId);
- }
-
@Override
protected void registerKeysToObserverCallback(
AccessibilitySettingsContentObserver contentObserver) {
@@ -423,47 +407,9 @@
return context.getText(R.string.switch_off_text);
}
- final int shortcutTypes = PreferredShortcuts.retrieveUserShortcutType(context,
- MAGNIFICATION_CONTROLLER_NAME);
-
- // LINT.IfChange(shortcut_type_ui_order)
- final List<CharSequence> list = new ArrayList<>();
- if (android.view.accessibility.Flags.a11yQsShortcut()) {
- 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, SOFTWARE)) {
- list.add(getSoftwareShortcutTypeSummary(context));
- }
- if (hasShortcutType(shortcutTypes, HARDWARE)) {
- final CharSequence hardwareTitle = context.getText(
- R.string.accessibility_shortcut_hardware_keyword);
- list.add(hardwareTitle);
- }
- if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
- if (hasShortcutType(shortcutTypes, TWOFINGER_DOUBLETAP)) {
- final CharSequence twoFingerDoubleTapTitle = context.getString(
- R.string.accessibility_shortcut_two_finger_double_tap_keyword, 2);
- list.add(twoFingerDoubleTapTitle);
- }
- }
- if (hasShortcutType(shortcutTypes, TRIPLETAP)) {
- final CharSequence tripleTapTitle = context.getText(
- R.string.accessibility_shortcut_triple_tap_keyword);
- list.add(tripleTapTitle);
- }
- // LINT.ThenChange(/res/xml/accessibility_edit_shortcuts.xml:shortcut_type_ui_order)
-
- // Show software shortcut if first time to use.
- if (list.isEmpty()) {
- list.add(getSoftwareShortcutTypeSummary(context));
- }
-
- return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
- null, LocaleUtils.getConcatenatedString(list));
+ return getShortcutSummaryList(context,
+ PreferredShortcuts.retrieveUserShortcutType(context,
+ MAGNIFICATION_CONTROLLER_NAME));
}
@Override
@@ -595,6 +541,9 @@
if (((shortcutTypes & TRIPLETAP) == TRIPLETAP)) {
optInMagnificationValueToSettings(context, TRIPLETAP);
}
+ if (((shortcutTypes & GESTURE) == GESTURE)) {
+ optInMagnificationValueToSettings(context, GESTURE);
+ }
if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
if (((shortcutTypes & TWOFINGER_DOUBLETAP)
== TWOFINGER_DOUBLETAP)) {
@@ -680,6 +629,9 @@
if (((shortcutTypes & TRIPLETAP) == TRIPLETAP)) {
optOutMagnificationValueFromSettings(context, TRIPLETAP);
}
+ if (((shortcutTypes & GESTURE) == GESTURE)) {
+ optOutMagnificationValueFromSettings(context, GESTURE);
+ }
if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
if (((shortcutTypes & TWOFINGER_DOUBLETAP)
== TWOFINGER_DOUBLETAP)) {
@@ -749,25 +701,21 @@
@VisibleForTesting
static boolean hasMagnificationValuesInSettings(Context context, int shortcutTypes) {
- boolean exist = false;
-
- if ((shortcutTypes & SOFTWARE) == SOFTWARE) {
- exist = hasMagnificationValueInSettings(context, SOFTWARE);
- }
- if (((shortcutTypes & HARDWARE) == HARDWARE)) {
- exist |= hasMagnificationValueInSettings(context, HARDWARE);
- }
- if (((shortcutTypes & TRIPLETAP) == TRIPLETAP)) {
- exist |= hasMagnificationValueInSettings(context, TRIPLETAP);
- }
- if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
- if (((shortcutTypes & TWOFINGER_DOUBLETAP)
- == TWOFINGER_DOUBLETAP)) {
- exist |= hasMagnificationValueInSettings(context,
- TWOFINGER_DOUBLETAP);
+ for (int shortcutType : ShortcutConstants.USER_SHORTCUT_TYPES) {
+ if ((shortcutTypes & shortcutType) == 0) {
+ continue;
+ }
+ if (((shortcutType & TWOFINGER_DOUBLETAP)
+ == TWOFINGER_DOUBLETAP)
+ && !Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
+ continue;
+ }
+ if (hasMagnificationValueInSettings(context, shortcutType)) {
+ return true;
}
}
- return exist;
+
+ return false;
}
private static boolean hasMagnificationValueInSettings(Context context,
@@ -776,7 +724,6 @@
return Settings.Secure.getInt(context.getContentResolver(),
Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF) == ON;
}
-
if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
if (shortcutType == TWOFINGER_DOUBLETAP) {
return Settings.Secure.getInt(context.getContentResolver(),
@@ -805,20 +752,18 @@
private static int getUserShortcutTypeFromSettings(Context context) {
int shortcutTypes = DEFAULT;
- if (hasMagnificationValuesInSettings(context, SOFTWARE)) {
- shortcutTypes |= SOFTWARE;
- }
- if (hasMagnificationValuesInSettings(context, HARDWARE)) {
- shortcutTypes |= HARDWARE;
- }
- if (hasMagnificationValuesInSettings(context, TRIPLETAP)) {
- shortcutTypes |= TRIPLETAP;
- }
- if (Flags.enableMagnificationMultipleFingerMultipleTapGesture()) {
- if (hasMagnificationValuesInSettings(context, TWOFINGER_DOUBLETAP)) {
- shortcutTypes |= TWOFINGER_DOUBLETAP;
+ for (int shortcutType : ShortcutConstants.USER_SHORTCUT_TYPES) {
+ if ((shortcutType & (TWOFINGER_DOUBLETAP | QUICK_SETTINGS | GESTURE | TRIPLETAP))
+ == shortcutType
+ && !android.view.accessibility.Flags.a11yQsShortcut()) {
+ // These shortcuts will throw if we try to look up their settings without the flag.
+ continue;
+ }
+ if (hasMagnificationValueInSettings(context, shortcutType)) {
+ shortcutTypes |= shortcutType;
}
}
+
return shortcutTypes;
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java
index f6954d2..fae89b1 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java
@@ -16,6 +16,8 @@
package com.android.settings.accessibility;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
+import static android.provider.Settings.Secure.NAVIGATION_MODE;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
@@ -26,11 +28,17 @@
import android.content.Context;
import android.content.res.Resources;
import android.icu.text.MessageFormat;
+import android.platform.test.annotations.DisableFlags;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
+import android.provider.Flags;
+import android.provider.Settings;
import android.text.Html;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
+import com.android.internal.accessibility.util.ShortcutUtils;
import com.android.settings.R;
import org.junit.Before;
@@ -48,6 +56,8 @@
public class AccessibilityButtonFooterPreferenceControllerTest {
@Rule
+ public final SetFlagsRule mCheckFlagsRule = new SetFlagsRule();
+ @Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@Spy
private final Context mContext = ApplicationProvider.getApplicationContext();
@@ -69,9 +79,12 @@
}
@Test
+ @DisableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
public void displayPreference_navigationGestureEnabled_setCorrectTitle() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
+ ShortcutUtils.setButtonMode(
+ mContext, ACCESSIBILITY_BUTTON_MODE_GESTURE, mContext.getUserId());
mController.displayPreference(mScreen);
@@ -83,10 +96,25 @@
}
@Test
+ @EnableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void displayPreference_navigationGestureEnabled_flag_setCorrectTitle() {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
+
+ assertThat(AccessibilityUtil.isGestureNavigateEnabled(mContext)).isTrue();
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getTitle().toString()).isEqualTo(
+ Html.fromHtml(
+ MessageFormat.format(mContext.getString(
+ R.string.accessibility_button_description), 1, 2, 3),
+ Html.FROM_HTML_MODE_COMPACT).toString());
+ }
+
+ @Test
public void displayPreference_navigationGestureDisabled_setCorrectTitle() {
- when(mResources.getInteger(
- com.android.internal.R.integer.config_navBarInteractionMode)).thenReturn(
- NAV_BAR_MODE_2BUTTON);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_2BUTTON, mContext.getUserId());
mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java
index e40f21c..94312a6 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java
@@ -32,6 +32,7 @@
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Flags;
+import android.provider.Settings;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceManager;
@@ -92,8 +93,9 @@
@Test
@DisableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
public void onCreate_navigationGestureEnabled_setCorrectTitle() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putIntForUser(
+ mContext.getContentResolver(), Settings.Secure.NAVIGATION_MODE,
+ NAV_BAR_MODE_GESTURAL, mContext.getUserId());
mFragment.onAttach(mContext);
mFragment.onCreate(Bundle.EMPTY);
@@ -104,9 +106,10 @@
@Test
@EnableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
- public void onCreate_navigationGestureEnabled_gestureFlag_setCorrectTitle() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ public void onCreate_navigationGestureEnabled_flag_setCorrectTitle() {
+ Settings.Secure.putIntForUser(
+ mContext.getContentResolver(), Settings.Secure.NAVIGATION_MODE,
+ NAV_BAR_MODE_GESTURAL, mContext.getUserId());
mFragment.onAttach(mContext);
mFragment.onCreate(Bundle.EMPTY);
@@ -117,8 +120,9 @@
@Test
public void onCreate_navigationBarEnabled_setCorrectTitle() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_2BUTTON);
+ Settings.Secure.putIntForUser(
+ mContext.getContentResolver(), Settings.Secure.NAVIGATION_MODE,
+ NAV_BAR_MODE_2BUTTON, mContext.getUserId());
mFragment.onAttach(mContext);
mFragment.onCreate(Bundle.EMPTY);
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceControllerTest.java
index 83517c3..798ff7d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceControllerTest.java
@@ -75,26 +75,25 @@
@Test
@DisableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
public void getAvailabilityStatus_navigationGestureEnabled_returnAvailable() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
@EnableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
- public void
- getAvailabilityStatus_navigationGestureEnabled_gestureFlag_conditionallyUnavailable() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ public void getAvailabilityStatus_navigationGestureEnabled_returnConditionallyUnavailable() {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
@Test
public void getAvailabilityStatus_navigationGestureDisabled_returnConditionallyUnavailable() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_2BUTTON);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_2BUTTON, mContext.getUserId());
assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceControllerTest.java
index 53a3397..a50e852 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceControllerTest.java
@@ -69,16 +69,16 @@
@Test
public void getAvailabilityStatus_navigationGestureEnabled_returnConditionallyUnavailable() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
@Test
public void getAvailabilityStatus_navigationGestureDisabled_returnAvailable() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_2BUTTON);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_2BUTTON, mContext.getUserId());
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreferenceControllerTest.java
index ded9bcc..85aa77c 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreferenceControllerTest.java
@@ -16,6 +16,7 @@
package com.android.settings.accessibility;
+import static android.provider.Settings.Secure.NAVIGATION_MODE;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
@@ -25,6 +26,11 @@
import android.content.Context;
import android.content.res.Resources;
+import android.platform.test.annotations.DisableFlags;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
+import android.provider.Flags;
+import android.provider.Settings;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -51,6 +57,8 @@
public class AccessibilityButtonPreferenceControllerTest {
@Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+ @Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@Spy
private final Context mContext = ApplicationProvider.getApplicationContext();
@@ -72,9 +80,10 @@
}
@Test
+ @DisableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
public void displayPreference_navigationGestureEnabled_setCorrectTitle() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
mController.displayPreference(mScreen);
@@ -83,9 +92,10 @@
}
@Test
- public void displayPreference_navigationGestureDisabled_setCorrectTitle() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_2BUTTON);
+ @EnableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void displayPreference_navigationGestureEnabled_flag_setCorrectTitle() {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
mController.displayPreference(mScreen);
@@ -94,9 +104,21 @@
}
@Test
+ public void displayPreference_navigationGestureDisabled_setCorrectTitle() {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_2BUTTON, mContext.getUserId());
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getTitle()).isEqualTo(
+ mContext.getText(R.string.accessibility_button_title));
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
public void updateDynamicRawDataToIndex_navigationGestureEnabled_setCorrectIndex() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
List<SearchIndexableRaw> rawDataList = new ArrayList<>();
mController.updateDynamicRawDataToIndex(rawDataList);
@@ -110,9 +132,26 @@
}
@Test
+ @EnableFlags(Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void updateDynamicRawDataToIndex_navigationGestureEnabled_flag_setCorrectIndex() {
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL, mContext.getUserId());
+ List<SearchIndexableRaw> rawDataList = new ArrayList<>();
+
+ mController.updateDynamicRawDataToIndex(rawDataList);
+
+ assertThat(rawDataList).hasSize(1);
+ SearchIndexableRaw raw = rawDataList.get(0);
+ assertThat(raw.title).isEqualTo(
+ mResources.getString(R.string.accessibility_button_title));
+ assertThat(raw.screenTitle).isEqualTo(
+ mResources.getString(R.string.accessibility_shortcuts_settings_title));
+ }
+
+ @Test
public void updateDynamicRawDataToIndex_navigationGestureDisabled_setCorrectIndex() {
- when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
- .thenReturn(NAV_BAR_MODE_2BUTTON);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ NAVIGATION_MODE, NAV_BAR_MODE_2BUTTON, mContext.getUserId());
List<SearchIndexableRaw> rawDataList = new ArrayList<>();
mController.updateDynamicRawDataToIndex(rawDataList);
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutsTutorialTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutsTutorialTest.java
index d5c1fd1..cd8743d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutsTutorialTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutsTutorialTest.java
@@ -16,6 +16,7 @@
package com.android.settings.accessibility;
+import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.GESTURE;
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;
@@ -36,6 +37,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.text.SpannableStringBuilder;
@@ -479,11 +481,39 @@
}
@Test
+ @DisableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
public void createAccessibilityTutorialDialog_gestureShortcut_talkbackOn_verifyText() {
mShortcutTypes |= SOFTWARE;
setTouchExplorationEnabled(true);
AccessibilityTestUtils.setSoftwareShortcutMode(
mContext, /* gestureNavEnabled= */ true, /* floatingButtonEnabled= */ false);
+
+ final String expectedTitle = mContext.getString(
+ R.string.accessibility_tutorial_dialog_title_gesture);
+ final String expectedInstruction = StringUtil.getIcuPluralsString(
+ mContext,
+ /* count= */ 3,
+ R.string.accessibility_tutorial_dialog_gesture_shortcut_instruction);
+
+ final AlertDialog alertDialog =
+ createAccessibilityTutorialDialog(
+ mContext, mShortcutTypes, FAKE_FEATURE_NAME);
+ alertDialog.show();
+ ShadowLooper.idleMainLooper();
+
+ verifyTutorialTitleAndInstruction(
+ alertDialog,
+ expectedTitle,
+ expectedInstruction);
+ }
+
+ @Test
+ @EnableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void createAccessibilityTutorialDialog_gestureShortcut_talkbackOn_flag_verifyText() {
+ mShortcutTypes |= GESTURE;
+ setTouchExplorationEnabled(true);
+ AccessibilityTestUtils.setSoftwareShortcutMode(
+ mContext, /* gestureNavEnabled= */ true, /* floatingButtonEnabled= */ false);
final String expectedTitle = mContext.getString(
R.string.accessibility_tutorial_dialog_title_gesture);
final String expectedInstruction = StringUtil.getIcuPluralsString(
@@ -504,6 +534,7 @@
}
@Test
+ @DisableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
public void createAccessibilityTutorialDialog_gestureShortcut_talkbackOff_verifyText() {
mShortcutTypes |= SOFTWARE;
setTouchExplorationEnabled(false);
@@ -529,6 +560,32 @@
}
@Test
+ @EnableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void createAccessibilityTutorialDialog_gestureShortcut_talkbackOff_flag_verifyText() {
+ mShortcutTypes |= GESTURE;
+ setTouchExplorationEnabled(false);
+ AccessibilityTestUtils.setSoftwareShortcutMode(
+ mContext, /* gestureNavEnabled= */ true, /* floatingButtonEnabled= */ false);
+ final String expectedTitle = mContext.getString(
+ R.string.accessibility_tutorial_dialog_title_gesture);
+ final String expectedInstruction = StringUtil.getIcuPluralsString(
+ mContext,
+ /* count= */ 2,
+ R.string.accessibility_tutorial_dialog_gesture_shortcut_instruction);
+
+ final AlertDialog alertDialog =
+ createAccessibilityTutorialDialog(
+ mContext, mShortcutTypes, FAKE_FEATURE_NAME);
+ alertDialog.show();
+ ShadowLooper.idleMainLooper();
+
+ verifyTutorialTitleAndInstruction(
+ alertDialog,
+ expectedTitle,
+ expectedInstruction);
+ }
+
+ @Test
public void performClickOnPositiveButton_turnOnSoftwareShortcut_dismiss() {
mShortcutTypes |= SOFTWARE;
final AlertDialog alertDialog =
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java
index c036432..ee3d936 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java
@@ -16,6 +16,11 @@
package com.android.settings.accessibility;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
+
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;
@@ -398,6 +403,49 @@
.isEqualTo(Settings.Secure.ACCESSIBILITY_QS_TARGETS);
}
+ @Test
+ @EnableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void getSoftwareShortcutSummary_returnsSoftwareSummary() {
+ assertThat(AccessibilityUtil.getSoftwareShortcutSummary(mContext)).isEqualTo(
+ mContext.getText(R.string.accessibility_shortcut_edit_summary_software));
+ }
+
+ @Test
+ @DisableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void getSoftwareShortcutSummary_gestureMode_floatingButton_returnsSoftwareSummary() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
+ ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU);
+
+ assertThat(AccessibilityUtil.getSoftwareShortcutSummary(mContext)).isEqualTo(
+ mContext.getText(R.string.accessibility_shortcut_edit_summary_software));
+ }
+
+ @Test
+ @DisableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void getSoftwareShortcutSummary_gestureMode_gesture_returnsGestureSummary() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_GESTURAL);
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
+ ACCESSIBILITY_BUTTON_MODE_GESTURE);
+
+ assertThat(AccessibilityUtil.getSoftwareShortcutSummary(mContext)).isEqualTo(
+ mContext.getText(R.string.accessibility_shortcut_edit_summary_software_gesture));
+ }
+
+ @Test
+ @DisableFlags(android.provider.Flags.FLAG_A11Y_STANDALONE_GESTURE_ENABLED)
+ public void getSoftwareShortcutSummary_navBarMode_returnsSoftwareSummary() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, NAV_BAR_MODE_3BUTTON);
+
+ assertThat(AccessibilityUtil.getSoftwareShortcutSummary(mContext)).isEqualTo(
+ mContext.getText(R.string.accessibility_shortcut_edit_summary_software));
+ }
+
private AccessibilityServiceInfo getMockAccessibilityServiceInfo() {
final ApplicationInfo applicationInfo = new ApplicationInfo();
final ServiceInfo serviceInfo = new ServiceInfo();
diff --git a/tests/robotests/src/com/android/settings/testutils/AccessibilityTestUtils.java b/tests/robotests/src/com/android/settings/testutils/AccessibilityTestUtils.java
index 4d69821..fd9a88e 100644
--- a/tests/robotests/src/com/android/settings/testutils/AccessibilityTestUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/AccessibilityTestUtils.java
@@ -17,11 +17,11 @@
package com.android.settings.testutils;
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
-import static com.google.common.truth.Truth.assertThat;
-
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -35,8 +35,6 @@
import android.provider.Settings;
import android.view.accessibility.AccessibilityManager;
-import com.android.settings.testutils.shadow.SettingsShadowResources;
-
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
@@ -48,15 +46,18 @@
public static void setSoftwareShortcutMode(
Context context, boolean gestureNavEnabled, boolean floatingButtonEnabled) {
- int buttonMode = floatingButtonEnabled ? ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU : -1;
+ int buttonMode = ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR;
+ if (floatingButtonEnabled) {
+ buttonMode = ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+ } else if (gestureNavEnabled) {
+ buttonMode = ACCESSIBILITY_BUTTON_MODE_GESTURE;
+ }
int navMode = gestureNavEnabled ? NAV_BAR_MODE_GESTURAL : NAV_BAR_MODE_3BUTTON;
- Settings.Secure.putInt(context.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_BUTTON_MODE, buttonMode);
- SettingsShadowResources.overrideResource(
- com.android.internal.R.integer.config_navBarInteractionMode, navMode);
- assertThat(context.getResources().getInteger(
- com.android.internal.R.integer.config_navBarInteractionMode)).isEqualTo(navMode);
+ Settings.Secure.putIntForUser(context.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_BUTTON_MODE, buttonMode, context.getUserId());
+ Settings.Secure.putIntForUser(context.getContentResolver(),
+ Settings.Secure.NAVIGATION_MODE, navMode, context.getUserId());
}
/**