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

Commit b8df6a57 authored by Samuel Fufa's avatar Samuel Fufa
Browse files

Resolve Flaky work tab tests

In cases where test execution and launcher relayout overlap, mLauncher.getAppsView().getContentView() returns a recyclerview instead of pagedView. This is resolved when rebindAdapters is later called with showTabs=true. The issue here is we are keeping a stale value of mLauncher.getAppsView().getContentView() in WorkEduView which is problematic as pagedView is required to set the right tab index for the test.

This behavior also affects work testWorkEduIntermittent as we need to verify the a pagedView is visible before text execution.
Bug: 149867607
Bug: 159671700
Test: flake -t com.android.launcher3.ui.WorkTabTest

Change-Id: I4b0968d6b9daa5c8fe741d4b1ed090f9c7acabed
parent df0ae181
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -60,7 +60,6 @@ public class WorkEduView extends AbstractSlideInView
    private View mViewWrapper;
    private Button mProceedButton;
    private TextView mContentText;
    private AllAppsPagedView mAllAppsPagedView;

    private int mNextWorkEduStep = WORK_EDU_PERSONAL_APPS;

@@ -101,13 +100,10 @@ public class WorkEduView extends AbstractSlideInView

        // make sure layout does not shrink when we change the text
        mContentText.post(() -> mContentText.setMinLines(mContentText.getLineCount()));
        if (mLauncher.getAppsView().getContentView() instanceof AllAppsPagedView) {
            mAllAppsPagedView = (AllAppsPagedView) mLauncher.getAppsView().getContentView();
        }

        mProceedButton.setOnClickListener(view -> {
            if (mAllAppsPagedView != null) {
                mAllAppsPagedView.snapToPage(AllAppsContainerView.AdapterHolder.WORK);
            if (getAllAppsPagedView() != null) {
                getAllAppsPagedView().snapToPage(AllAppsContainerView.AdapterHolder.WORK);
            }
            goToWorkTab(true);
        });
@@ -155,8 +151,8 @@ public class WorkEduView extends AbstractSlideInView
    }

    private void goToFirstPage() {
        if (mAllAppsPagedView != null) {
            mAllAppsPagedView.snapToPageImmediately(AllAppsContainerView.AdapterHolder.MAIN);
        if (getAllAppsPagedView() != null) {
            getAllAppsPagedView().snapToPageImmediately(AllAppsContainerView.AdapterHolder.MAIN);
        }
    }

@@ -171,6 +167,11 @@ public class WorkEduView extends AbstractSlideInView
        mOpenCloseAnimator.start();
    }

    private AllAppsPagedView getAllAppsPagedView() {
        View v =  mLauncher.getAppsView().getContentView();
        return  (v instanceof AllAppsPagedView)  ? (AllAppsPagedView) v : null;
    }

    /**
     * Checks if user has not seen onboarding UI yet and shows it when user navigates to all apps
     */
+6 −1
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ public class WorkTabTest extends AbstractLauncherUiTest {
        mDevice.pressHome();
        waitForLauncherCondition("Launcher didn't start", Objects::nonNull);
        executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
        waitForState("Launcher internal state didn't switch to All Apps", () -> ALL_APPS);
        waitForLauncherCondition("Personal tab is missing",
                launcher -> launcher.getAppsView().isPersonalTabVisible(), 60000);
        waitForLauncherCondition("Work tab is missing",
@@ -180,6 +181,10 @@ public class WorkTabTest extends AbstractLauncherUiTest {
        // open work tab
        executeOnLauncher(launcher -> launcher.getStateManager().goToState(ALL_APPS));
        waitForState("Launcher did not switch to all apps", () -> ALL_APPS);
        waitForLauncherCondition("Work tab not setup",
                launcher -> launcher.getAppsView().getContentView() instanceof AllAppsPagedView,
                60000);

        executeOnLauncher(launcher -> {
            AllAppsPagedView pagedView = (AllAppsPagedView) launcher.getAppsView().getContentView();
            pagedView.setCurrentPage(WORK_PAGE);
@@ -199,7 +204,7 @@ public class WorkTabTest extends AbstractLauncherUiTest {
            DragLayer dragLayer = l.getDragLayer();
            return dragLayer.getChildCount() > 0 && dragLayer.getChildAt(
                    dragLayer.getChildCount() - 1) instanceof WorkEduView;
        });
        }, 6000);
        return getFromLauncher(launcher -> (WorkEduView) launcher.getDragLayer().getChildAt(
                launcher.getDragLayer().getChildCount() - 1));
    }