Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4f32954 authored by Angela Wang's avatar Angela Wang
Browse files

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
parent 812c7d79
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -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.
     *
+11 −3
Original line number Diff line number Diff line
@@ -208,9 +208,17 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
                setupEditShortcutDialog(dialog);
                return dialog;
            case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
                if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
                    dialog = AccessibilityGestureNavigationTutorial
                        .createAccessibilityTutorialDialog(getPrefContext(),
                                getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
                            .createAccessibilityTutorialDialogForSetupWizard(
                                    getPrefContext(), getUserShortcutTypes(),
                                    this::callOnTutorialDialogButtonClicked);
                } else {
                    dialog = AccessibilityGestureNavigationTutorial
                            .createAccessibilityTutorialDialog(
                                    getPrefContext(), getUserShortcutTypes(),
                                    this::callOnTutorialDialogButtonClicked);
                }
                dialog.setCanceledOnTouchOutside(false);
                return dialog;
            default:
+11 −3
Original line number Diff line number Diff line
@@ -219,9 +219,17 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
                setupEditShortcutDialog(mDialog);
                return mDialog;
            case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
                if (WizardManagerHelper.isAnySetupWizard(getIntent())) {
                    mDialog = AccessibilityGestureNavigationTutorial
                        .createAccessibilityTutorialDialog(getPrefContext(),
                                getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
                            .createAccessibilityTutorialDialogForSetupWizard(
                                    getPrefContext(), getUserShortcutTypes(),
                                    this::callOnTutorialDialogButtonClicked);
                } else {
                    mDialog = AccessibilityGestureNavigationTutorial
                            .createAccessibilityTutorialDialog(
                                    getPrefContext(), getUserShortcutTypes(),
                                    this::callOnTutorialDialogButtonClicked);
                }
                mDialog.setCanceledOnTouchOutside(false);
                return mDialog;
            default:
+14 −2
Original line number Diff line number Diff line
@@ -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();