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
This commit is contained in:
Angela Wang
2022-10-28 09:16:25 +00:00
parent 812c7d7953
commit c4f3295491
4 changed files with 67 additions and 8 deletions

View File

@@ -160,6 +160,37 @@ public final class AccessibilityGestureNavigationTutorial {
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.
*

View File

@@ -208,9 +208,17 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
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:

View File

@@ -219,9 +219,17 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
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:

View File

@@ -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 @@ public final class AccessibilityGestureNavigationTutorialTest {
.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 final class AccessibilityGestureNavigationTutorialTest {
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();