From 5f21f104f03f388d9dd219df734e45d0a508712d Mon Sep 17 00:00:00 2001 From: vadimt Date: Thu, 25 Feb 2021 13:13:13 -0800 Subject: [PATCH] Waiting for the state of views to settle after orientation change Presumably, we currently have flakes when immediately after orientation change, we check for the presence of certain views, and they are still not present. Test: presubmit Bug: 181057446 Change-Id: I6dbcb757a47c19728d4096283da6710f6dd5aa02 --- .../quickstep/NavigationModeSwitchRule.java | 4 +- .../tapl/LauncherInstrumentation.java | 37 +++++++++++++------ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java index 0f6671d18c..ea3c9bb042 100644 --- a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java +++ b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java @@ -200,8 +200,8 @@ public class NavigationModeSwitchRule implements TestRule { () -> launcher.getNavigationModel() == expectedMode, WAIT_TIME_MS, launcher); Wait.atMost(() -> "Switching nav mode: " - + launcher.getNavigationModeMismatchError(), - () -> launcher.getNavigationModeMismatchError() == null, + + launcher.getNavigationModeMismatchError(false), + () -> launcher.getNavigationModeMismatchError(false) == null, WAIT_TIME_MS, launcher); AbstractLauncherUiTest.checkDetectedLeaks(launcher); return true; diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index 0c8f610928..5e20f7c110 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -365,9 +365,11 @@ public final class LauncherInstrumentation { if (hasSystemUiObject("keyguard_status_view")) return "Phone is locked"; - if (!mDevice.hasObject(By.textStartsWith(""))) return "Screen is empty"; + if (!mDevice.wait(Until.hasObject(By.textStartsWith("")), WAIT_TIME_MS)) { + return "Screen is empty"; + } - final String navigationModeError = getNavigationModeMismatchError(); + final String navigationModeError = getNavigationModeMismatchError(true); if (navigationModeError != null) return navigationModeError; } catch (Throwable e) { Log.w(TAG, "getSystemAnomalyMessage failed", e); @@ -535,17 +537,28 @@ public final class LauncherInstrumentation { mExpectedRotation = expectedRotation; } - public String getNavigationModeMismatchError() { + public String getNavigationModeMismatchError(boolean waitForCorrectState) { + final int waitTime = waitForCorrectState ? WAIT_TIME_MS : 0; final NavigationModel navigationModel = getNavigationModel(); - final boolean hasRecentsButton = hasSystemUiObject("recent_apps"); - final boolean hasHomeButton = hasSystemUiObject("home"); - if ((navigationModel == NavigationModel.THREE_BUTTON) != hasRecentsButton) { - return "Presence of recents button doesn't match the interaction mode, mode=" - + navigationModel.name() + ", hasRecents=" + hasRecentsButton; + + if (navigationModel == NavigationModel.THREE_BUTTON) { + if (!mDevice.wait(Until.hasObject(By.res(SYSTEMUI_PACKAGE, "recent_apps")), waitTime)) { + return "Recents button not present in 3-button mode"; + } + } else { + if (!mDevice.wait(Until.gone(By.res(SYSTEMUI_PACKAGE, "recent_apps")), waitTime)) { + return "Recents button is present in non-3-button mode"; + } } - if ((navigationModel != NavigationModel.ZERO_BUTTON) != hasHomeButton) { - return "Presence of home button doesn't match the interaction mode, mode=" - + navigationModel.name() + ", hasHome=" + hasHomeButton; + + if (navigationModel == NavigationModel.ZERO_BUTTON) { + if (!mDevice.wait(Until.gone(By.res(SYSTEMUI_PACKAGE, "home")), waitTime)) { + return "Home button is present in gestural mode"; + } + } else { + if (!mDevice.wait(Until.hasObject(By.res(SYSTEMUI_PACKAGE, "home")), waitTime)) { + return "Home button not present in non-gestural mode"; + } } return null; } @@ -556,7 +569,7 @@ public final class LauncherInstrumentation { assertEquals("Unexpected display rotation", mExpectedRotation, mDevice.getDisplayRotation()); - final String error = getNavigationModeMismatchError(); + final String error = getNavigationModeMismatchError(true); assertTrue(error, error == null); log("verifyContainerType: " + containerType);