From 5ad52ec092cb934760d3a9b693546b4377a92025 Mon Sep 17 00:00:00 2001 From: vadimt Date: Thu, 13 Jun 2019 18:42:25 -0700 Subject: [PATCH] After switching nav mode, wait for the sysui mode to sync Bug: 133867119 Change-Id: I0290753aa295bc3167e1d396cedd410c77413579 --- .../quickstep/NavigationModeSwitchRule.java | 45 ++++++++++++++++--- .../tapl/LauncherInstrumentation.java | 37 +++++++-------- 2 files changed, 56 insertions(+), 26 deletions(-) diff --git a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java index c3e46ea110..90763b871b 100644 --- a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java +++ b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java @@ -33,6 +33,7 @@ import androidx.test.uiautomator.UiDevice; import com.android.launcher3.tapl.LauncherInstrumentation; import com.android.launcher3.tapl.TestHelpers; +import com.android.systemui.shared.system.QuickStepContract; import org.junit.Assert; import org.junit.rules.TestRule; @@ -43,6 +44,8 @@ import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; /** * Test rule that allows executing a test with Quickstep on and then Quickstep off. @@ -78,11 +81,14 @@ public class NavigationModeSwitchRule implements TestRule { @Override public void evaluate() throws Throwable { final Context context = getInstrumentation().getContext(); - final String prevOverlayPkg = LauncherInstrumentation.isGesturalMode(context) - ? NAV_BAR_MODE_GESTURAL_OVERLAY - : LauncherInstrumentation.isSwipeUpMode(context) - ? NAV_BAR_MODE_2BUTTON_OVERLAY - : NAV_BAR_MODE_3BUTTON_OVERLAY; + final int currentInteractionMode = + LauncherInstrumentation.getCurrentInteractionMode(context); + final String prevOverlayPkg = + QuickStepContract.isGesturalMode(currentInteractionMode) + ? NAV_BAR_MODE_GESTURAL_OVERLAY + : QuickStepContract.isSwipeUpMode(currentInteractionMode) + ? NAV_BAR_MODE_2BUTTON_OVERLAY + : NAV_BAR_MODE_3BUTTON_OVERLAY; final LauncherInstrumentation.NavigationModel originalMode = mLauncher.getNavigationModel(); try { @@ -131,6 +137,27 @@ public class NavigationModeSwitchRule implements TestRule { setOverlayPackageEnabled(NAV_BAR_MODE_GESTURAL_OVERLAY, overlayPackage == NAV_BAR_MODE_GESTURAL_OVERLAY); + if (currentSysUiNavigationMode() != expectedMode) { + final CountDownLatch latch = new CountDownLatch(1); + final Context targetContext = getInstrumentation().getTargetContext(); + final SysUINavigationMode.NavigationModeChangeListener listener = + newMode -> { + if (LauncherInstrumentation.getNavigationModel(newMode.resValue) + == expectedMode) { + latch.countDown(); + } + }; + final SysUINavigationMode sysUINavigationMode = + SysUINavigationMode.INSTANCE.get(targetContext); + targetContext.getMainExecutor().execute(() -> + sysUINavigationMode.addModeChangeListener(listener)); + latch.await(10, TimeUnit.SECONDS); + targetContext.getMainExecutor().execute(() -> + sysUINavigationMode.removeModeChangeListener(listener)); + Assert.assertTrue("Navigation mode didn't change to " + expectedMode, + currentSysUiNavigationMode() == expectedMode); + } + for (int i = 0; i != 100; ++i) { if (mLauncher.getNavigationModel() == expectedMode) { Thread.sleep(5000); @@ -153,4 +180,12 @@ public class NavigationModeSwitchRule implements TestRule { return base; } } + + private static LauncherInstrumentation.NavigationModel currentSysUiNavigationMode() { + return LauncherInstrumentation.getNavigationModel( + SysUINavigationMode.getMode( + getInstrumentation(). + getTargetContext()). + resValue); + } } diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index e45fca8c0f..09df3960aa 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -208,14 +208,10 @@ public final class LauncherInstrumentation { // app context are not constructed with resources that take overlays into account final Context ctx = baseContext.createPackageContext("android", 0); for (int i = 0; i < 100; ++i) { - log("Interaction mode = " + getCurrentInteractionMode(ctx)); - if (isGesturalMode(ctx)) { - return NavigationModel.ZERO_BUTTON; - } else if (isSwipeUpMode(ctx)) { - return NavigationModel.TWO_BUTTON; - } else if (isLegacyMode(ctx)) { - return NavigationModel.THREE_BUTTON; - } + final int currentInteractionMode = getCurrentInteractionMode(ctx); + log("Interaction mode = " + currentInteractionMode); + final NavigationModel model = getNavigationModel(currentInteractionMode); + if (model != null) return model; Thread.sleep(100); } fail("Can't detect navigation mode"); @@ -225,6 +221,17 @@ public final class LauncherInstrumentation { return NavigationModel.THREE_BUTTON; } + public static NavigationModel getNavigationModel(int currentInteractionMode) { + if (QuickStepContract.isGesturalMode(currentInteractionMode)) { + return NavigationModel.ZERO_BUTTON; + } else if (QuickStepContract.isSwipeUpMode(currentInteractionMode)) { + return NavigationModel.TWO_BUTTON; + } else if (QuickStepContract.isLegacyMode(currentInteractionMode)) { + return NavigationModel.THREE_BUTTON; + } + return null; + } + public static boolean isAvd() { return Build.MODEL.contains("Cuttlefish"); } @@ -742,19 +749,7 @@ public final class LauncherInstrumentation { return currentTime; } - public static boolean isGesturalMode(Context context) { - return QuickStepContract.isGesturalMode(getCurrentInteractionMode(context)); - } - - public static boolean isSwipeUpMode(Context context) { - return QuickStepContract.isSwipeUpMode(getCurrentInteractionMode(context)); - } - - public static boolean isLegacyMode(Context context) { - return QuickStepContract.isLegacyMode(getCurrentInteractionMode(context)); - } - - private static int getCurrentInteractionMode(Context context) { + public static int getCurrentInteractionMode(Context context) { return getSystemIntegerRes(context, "config_navBarInteractionMode"); }