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
This commit is contained in:
Samuel Fufa 2020-12-10 11:01:27 -06:00
parent df0ae18170
commit b8df6a573a
2 changed files with 15 additions and 9 deletions

View File

@ -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
*/

View File

@ -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));
}