From b8df6a573a35dcd199c6a77227ff07c3f3e53b95 Mon Sep 17 00:00:00 2001 From: Samuel Fufa Date: Thu, 10 Dec 2020 11:01:27 -0600 Subject: [PATCH] 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 --- .../android/launcher3/views/WorkEduView.java | 17 +++++++++-------- .../com/android/launcher3/ui/WorkTabTest.java | 7 ++++++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/views/WorkEduView.java b/src/com/android/launcher3/views/WorkEduView.java index d6737db725..03d3026069 100644 --- a/src/com/android/launcher3/views/WorkEduView.java +++ b/src/com/android/launcher3/views/WorkEduView.java @@ -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 */ diff --git a/tests/src/com/android/launcher3/ui/WorkTabTest.java b/tests/src/com/android/launcher3/ui/WorkTabTest.java index 1e1cf04dfd..ac0d355704 100644 --- a/tests/src/com/android/launcher3/ui/WorkTabTest.java +++ b/tests/src/com/android/launcher3/ui/WorkTabTest.java @@ -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)); }