Fix should not let users adjust a11y button settings in SuW issue
Root Cause: Users should not be able to adjust any settings of the a11y
button in the setup wizard flow, but there will be a link button to
a11y button settings page on the a11y tutorial dialog where user can
modify the settings.
Solution: Hide the link button in a11y tutorial dialog if we know the
dialog is launched from any setup wizard page.
Bug: 256084341
Test: make RunSettingsRoboTests ROBOTEST_FILTER=AccessibilityGestureNavigationTutorialTest
Change-Id: I742f9b7ba311fcd7a5105463709dc104345b9f12
diff --git a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
index 8bcd8af..b6f6ff4 100644
--- a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
+++ b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
@@ -160,6 +160,37 @@
return alertDialog;
}
+ static AlertDialog createAccessibilityTutorialDialogForSetupWizard(Context context,
+ int shortcutTypes) {
+ return createAccessibilityTutorialDialogForSetupWizard(context, shortcutTypes,
+ mOnClickListener);
+ }
+
+ static AlertDialog createAccessibilityTutorialDialogForSetupWizard(Context context,
+ int shortcutTypes, @Nullable DialogInterface.OnClickListener actionButtonListener) {
+
+ final int category = SettingsEnums.SWITCH_SHORTCUT_DIALOG_ACCESSIBILITY_BUTTON_SETTINGS;
+ final DialogInterface.OnClickListener linkButtonListener =
+ (dialog, which) -> new SubSettingLauncher(context)
+ .setDestination(AccessibilityButtonFragment.class.getName())
+ .setSourceMetricsCategory(category)
+ .launch();
+
+ final AlertDialog alertDialog = new AlertDialog.Builder(context)
+ .setPositiveButton(R.string.accessibility_tutorial_dialog_button,
+ actionButtonListener)
+ .create();
+
+ final List<TutorialPage> tutorialPages =
+ createShortcutTutorialPages(context, shortcutTypes);
+ Preconditions.checkArgument(!tutorialPages.isEmpty(),
+ /* errorMessage= */ "Unexpected tutorial pages size");
+
+ alertDialog.setView(createShortcutNavigationContentView(context, tutorialPages, null));
+
+ return alertDialog;
+ }
+
/**
* Gets a content View for a dialog to confirm that they want to enable a service.
*
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
index 43292d7..13bfc5e 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
@@ -208,9 +208,17 @@
setupEditShortcutDialog(dialog);
return dialog;
case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
- dialog = AccessibilityGestureNavigationTutorial
- .createAccessibilityTutorialDialog(getPrefContext(),
- getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
+ if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
+ dialog = AccessibilityGestureNavigationTutorial
+ .createAccessibilityTutorialDialogForSetupWizard(
+ getPrefContext(), getUserShortcutTypes(),
+ this::callOnTutorialDialogButtonClicked);
+ } else {
+ dialog = AccessibilityGestureNavigationTutorial
+ .createAccessibilityTutorialDialog(
+ getPrefContext(), getUserShortcutTypes(),
+ this::callOnTutorialDialogButtonClicked);
+ }
dialog.setCanceledOnTouchOutside(false);
return dialog;
default:
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 9f38ac5..facf213 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -219,9 +219,17 @@
setupEditShortcutDialog(mDialog);
return mDialog;
case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
- mDialog = AccessibilityGestureNavigationTutorial
- .createAccessibilityTutorialDialog(getPrefContext(),
- getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
+ if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
+ mDialog = AccessibilityGestureNavigationTutorial
+ .createAccessibilityTutorialDialogForSetupWizard(
+ getPrefContext(), getUserShortcutTypes(),
+ this::callOnTutorialDialogButtonClicked);
+ } else {
+ mDialog = AccessibilityGestureNavigationTutorial
+ .createAccessibilityTutorialDialog(
+ getPrefContext(), getUserShortcutTypes(),
+ this::callOnTutorialDialogButtonClicked);
+ }
mDialog.setCanceledOnTouchOutside(false);
return mDialog;
default:
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
index 3a112c8..5bc7f18 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
@@ -17,6 +17,7 @@
package com.android.settings.accessibility;
import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.createAccessibilityTutorialDialog;
+import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.createAccessibilityTutorialDialogForSetupWizard;
import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.createShortcutTutorialPages;
import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.showGestureNavigationTutorialDialog;
import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
@@ -149,6 +150,18 @@
.isEqualTo(View.GONE);
}
+ @Test
+ public void createTutorialPages_turnOnSoftwareShortcut_showFromSuW_linkButtonGone() {
+ mShortcutTypes |= UserShortcutType.SOFTWARE;
+
+ final AlertDialog alertDialog =
+ createAccessibilityTutorialDialogForSetupWizard(mContext, mShortcutTypes);
+ alertDialog.show();
+
+ assertThat(alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).getVisibility())
+ .isEqualTo(View.GONE);
+ }
+
@Test
public void performClickOnPositiveButton_turnOnSoftwareShortcut_dismiss() {
@@ -178,8 +191,7 @@
public void performClickOnNegativeButton_turnOnSoftwareShortcut_directToSettingsPage() {
mShortcutTypes |= UserShortcutType.SOFTWARE;
Activity activity = Robolectric.buildActivity(Activity.class).create().get();
- final AlertDialog alertDialog =
- createAccessibilityTutorialDialog(activity, mShortcutTypes, mOnClickListener);
+ final AlertDialog alertDialog = createAccessibilityTutorialDialog(activity, mShortcutTypes);
alertDialog.show();
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();