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; 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. * 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); setupEditShortcutDialog(dialog);
return dialog; return dialog;
case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL: case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
dialog = AccessibilityGestureNavigationTutorial if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
.createAccessibilityTutorialDialog(getPrefContext(), dialog = AccessibilityGestureNavigationTutorial
getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked); .createAccessibilityTutorialDialogForSetupWizard(
getPrefContext(), getUserShortcutTypes(),
this::callOnTutorialDialogButtonClicked);
} else {
dialog = AccessibilityGestureNavigationTutorial
.createAccessibilityTutorialDialog(
getPrefContext(), getUserShortcutTypes(),
this::callOnTutorialDialogButtonClicked);
}
dialog.setCanceledOnTouchOutside(false); dialog.setCanceledOnTouchOutside(false);
return dialog; return dialog;
default: default:

View File

@@ -219,9 +219,17 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
setupEditShortcutDialog(mDialog); setupEditShortcutDialog(mDialog);
return mDialog; return mDialog;
case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL: case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
mDialog = AccessibilityGestureNavigationTutorial if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
.createAccessibilityTutorialDialog(getPrefContext(), mDialog = AccessibilityGestureNavigationTutorial
getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked); .createAccessibilityTutorialDialogForSetupWizard(
getPrefContext(), getUserShortcutTypes(),
this::callOnTutorialDialogButtonClicked);
} else {
mDialog = AccessibilityGestureNavigationTutorial
.createAccessibilityTutorialDialog(
getPrefContext(), getUserShortcutTypes(),
this::callOnTutorialDialogButtonClicked);
}
mDialog.setCanceledOnTouchOutside(false); mDialog.setCanceledOnTouchOutside(false);
return mDialog; return mDialog;
default: default:

View File

@@ -17,6 +17,7 @@
package com.android.settings.accessibility; package com.android.settings.accessibility;
import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.createAccessibilityTutorialDialog; 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.createShortcutTutorialPages;
import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.showGestureNavigationTutorialDialog; import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.showGestureNavigationTutorialDialog;
import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutType; import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
@@ -149,6 +150,18 @@ public final class AccessibilityGestureNavigationTutorialTest {
.isEqualTo(View.GONE); .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 @Test
public void performClickOnPositiveButton_turnOnSoftwareShortcut_dismiss() { public void performClickOnPositiveButton_turnOnSoftwareShortcut_dismiss() {
@@ -178,8 +191,7 @@ public final class AccessibilityGestureNavigationTutorialTest {
public void performClickOnNegativeButton_turnOnSoftwareShortcut_directToSettingsPage() { public void performClickOnNegativeButton_turnOnSoftwareShortcut_directToSettingsPage() {
mShortcutTypes |= UserShortcutType.SOFTWARE; mShortcutTypes |= UserShortcutType.SOFTWARE;
Activity activity = Robolectric.buildActivity(Activity.class).create().get(); Activity activity = Robolectric.buildActivity(Activity.class).create().get();
final AlertDialog alertDialog = final AlertDialog alertDialog = createAccessibilityTutorialDialog(activity, mShortcutTypes);
createAccessibilityTutorialDialog(activity, mShortcutTypes, mOnClickListener);
alertDialog.show(); alertDialog.show();
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick(); alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();