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

Commit 5f21f104 authored by vadimt's avatar vadimt
Browse files

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
parent b0bff050
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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;
+25 −12
Original line number Diff line number Diff line
@@ -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) {
            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";
            }
        if ((navigationModel != NavigationModel.ZERO_BUTTON) != hasHomeButton) {
            return "Presence of home button doesn't match the interaction mode, mode="
                    + navigationModel.name() + ", hasHome=" + hasHomeButton;
        }
        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);