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();