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

Commit 82140a2b authored by Angela Wang's avatar Angela Wang Committed by Android (Google) Code Review
Browse files

Merge "Fix wrong visibility of link button in a11y tutorial dialog"

parents 47b55951 67efcacb
Loading
Loading
Loading
Loading
+23 −11
Original line number Diff line number Diff line
@@ -136,11 +136,26 @@ public final class AccessibilityGestureNavigationTutorial {
                        linkButtonListener)
                .create();

        final TutorialPageChangeListener.OnPageSelectedCallback callback =
                type -> alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(
                        type == UserShortcutType.SOFTWARE ? VISIBLE : GONE);
        final List<TutorialPage> tutorialPages =
                createShortcutTutorialPages(context, shortcutTypes);
        Preconditions.checkArgument(!tutorialPages.isEmpty(),
                /* errorMessage= */ "Unexpected tutorial pages size");

        final TutorialPageChangeListener.OnPageSelectedCallback callback = index -> {
            final int pageType = tutorialPages.get(index).getType();
            alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(
                    pageType == UserShortcutType.SOFTWARE ? VISIBLE : GONE);
        };

        alertDialog.setView(createShortcutNavigationContentView(context, shortcutTypes, callback));
        alertDialog.setView(createShortcutNavigationContentView(context, tutorialPages, callback));

        // Showing first page won't invoke onPageSelectedCallback. Need to check the first tutorial
        // page type manually to set correct visibility of the link button.
        alertDialog.setOnShowListener(dialog -> {
            final int firstPageType = tutorialPages.get(0).getType();
            alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(
                    firstPageType == UserShortcutType.SOFTWARE ? VISIBLE : GONE);
        });

        return alertDialog;
    }
@@ -274,16 +289,13 @@ public final class AccessibilityGestureNavigationTutorial {
        return inflater.inflate(R.layout.accessibility_lottie_animation_view, /* root= */ null);
    }

    private static View createShortcutNavigationContentView(Context context, int shortcutTypes,
    private static View createShortcutNavigationContentView(Context context,
            List<TutorialPage> tutorialPages,
            TutorialPageChangeListener.OnPageSelectedCallback onPageSelectedCallback) {

        final LayoutInflater inflater = context.getSystemService(LayoutInflater.class);
        final View contentView = inflater.inflate(
                R.layout.accessibility_shortcut_tutorial_dialog, /* root= */ null);
        final List<TutorialPage> tutorialPages =
                createShortcutTutorialPages(context, shortcutTypes);
        Preconditions.checkArgument(!tutorialPages.isEmpty(),
                /* errorMessage= */ "Unexpected tutorial pages size");

        final LinearLayout indicatorContainer = contentView.findViewById(R.id.indicator_container);
        indicatorContainer.setVisibility(tutorialPages.size() > 1 ? VISIBLE : GONE);
@@ -575,7 +587,7 @@ public final class AccessibilityGestureNavigationTutorial {
                            currentPageNumber, mTutorialPages.size()));

            if (mOnPageSelectedCallback != null) {
                mOnPageSelectedCallback.onPageSelected(mTutorialPages.get(position).getType());
                mOnPageSelectedCallback.onPageSelected(position);
            }
        }

@@ -588,7 +600,7 @@ public final class AccessibilityGestureNavigationTutorial {
        private interface OnPageSelectedCallback {

            /** The callback method after tutorial page is selected. */
            void onPageSelected(int type);
            void onPageSelected(int index);
        }
    }
}
+39 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.View;

import androidx.appcompat.app.AlertDialog;
import androidx.test.core.app.ApplicationProvider;
@@ -111,6 +112,44 @@ public final class AccessibilityGestureNavigationTutorialTest {
        assertThat(alertDialog).isNotNull();
    }

    @Test
    public void createTutorialPages_turnOnSoftwareShortcut_linkButtonVisible() {
        mShortcutTypes |= UserShortcutType.SOFTWARE;

        final AlertDialog alertDialog =
                createAccessibilityTutorialDialog(mContext, mShortcutTypes);
        alertDialog.show();

        assertThat(alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).getVisibility())
                .isEqualTo(View.VISIBLE);
    }

    @Test
    public void createTutorialPages_turnOnSoftwareAndHardwareShortcut_linkButtonVisible() {
        mShortcutTypes |= UserShortcutType.SOFTWARE;
        mShortcutTypes |= UserShortcutType.HARDWARE;

        final AlertDialog alertDialog =
                createAccessibilityTutorialDialog(mContext, mShortcutTypes);
        alertDialog.show();

        assertThat(alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).getVisibility())
                .isEqualTo(View.VISIBLE);
    }

    @Test
    public void createTutorialPages_turnOnHardwareShortcut_linkButtonGone() {
        mShortcutTypes |= UserShortcutType.HARDWARE;

        final AlertDialog alertDialog =
                createAccessibilityTutorialDialog(mContext, mShortcutTypes);
        alertDialog.show();

        assertThat(alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).getVisibility())
                .isEqualTo(View.GONE);
    }


    @Test
    public void performClickOnPositiveButton_turnOnSoftwareShortcut_dismiss() {
        mShortcutTypes |= UserShortcutType.SOFTWARE;