diff --git a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java index 572f9a9735..93e403cc84 100644 --- a/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java +++ b/quickstep/tests/src/com/android/quickstep/NavigationModeSwitchRule.java @@ -71,7 +71,8 @@ public class NavigationModeSwitchRule implements TestRule { @Override public Statement apply(Statement base, Description description) { - if (TestHelpers.isInLauncherProcess() && + // b/130558787; b/131419978 + if (false && TestHelpers.isInLauncherProcess() && description.getAnnotation(NavigationModeSwitch.class) != null) { Mode mode = description.getAnnotation(NavigationModeSwitch.class).mode(); return new Statement() { @@ -92,12 +93,9 @@ public class NavigationModeSwitchRule implements TestRule { if (mode == TWO_BUTTON || mode == ALL) { evaluateWithTwoButtons(); } - /* - b/131419978 if (mode == THREE_BUTTON || mode == ALL) { evaluateWithThreeButtons(); } - */ } finally { setActiveOverlay(prevOverlayPkg, originalMode); } diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java index a37218b179..15402870f4 100644 --- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java @@ -17,6 +17,10 @@ package com.android.launcher3.ui; import static androidx.test.InstrumentationRegistry.getInstrumentation; +import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_2BUTTON_OVERLAY; +import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_3BUTTON_OVERLAY; +import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_GESTURAL_OVERLAY; + import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -29,6 +33,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.LauncherActivityInfo; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Process; import android.os.RemoteException; import android.util.Log; @@ -57,6 +62,7 @@ import com.android.launcher3.util.rule.LauncherActivityRule; import com.android.launcher3.util.rule.ShellCommandRule; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TestRule; @@ -67,6 +73,7 @@ import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.lang.reflect.Method; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -102,6 +109,66 @@ public abstract class AbstractLauncherUiTest { } if (TestHelpers.isInLauncherProcess()) Utilities.enableRunningInTestHarnessForTests(); mLauncher = new LauncherInstrumentation(instrumentation); + + // b/130558787; b/131419978 + try { + Class systemProps = Class.forName("android.os.SystemProperties"); + Method getInt = systemProps.getMethod("getInt", String.class, int.class); + int apiLevel = (int) getInt.invoke(null, "ro.product.first_api_level", 0); + + if (apiLevel >= Build.VERSION_CODES.P) { + setActiveOverlay(NAV_BAR_MODE_GESTURAL_OVERLAY, + LauncherInstrumentation.NavigationModel.ZERO_BUTTON); + } + if (apiLevel >= Build.VERSION_CODES.O && apiLevel < Build.VERSION_CODES.P) { + setActiveOverlay(NAV_BAR_MODE_2BUTTON_OVERLAY, + LauncherInstrumentation.NavigationModel.TWO_BUTTON); + } + if (apiLevel < Build.VERSION_CODES.O) { + setActiveOverlay(NAV_BAR_MODE_3BUTTON_OVERLAY, + LauncherInstrumentation.NavigationModel.THREE_BUTTON); + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + + public void setActiveOverlay(String overlayPackage, + LauncherInstrumentation.NavigationModel expectedMode) { + setOverlayPackageEnabled(NAV_BAR_MODE_3BUTTON_OVERLAY, + overlayPackage == NAV_BAR_MODE_3BUTTON_OVERLAY); + setOverlayPackageEnabled(NAV_BAR_MODE_2BUTTON_OVERLAY, + overlayPackage == NAV_BAR_MODE_2BUTTON_OVERLAY); + setOverlayPackageEnabled(NAV_BAR_MODE_GESTURAL_OVERLAY, + overlayPackage == NAV_BAR_MODE_GESTURAL_OVERLAY); + + for (int i = 0; i != 100; ++i) { + if (mLauncher.getNavigationModel() == expectedMode) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return; + } + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + Assert.fail("Couldn't switch to " + overlayPackage); + } + + private void setOverlayPackageEnabled(String overlayPackage, boolean enable) { + Log.d(TAG, "setOverlayPackageEnabled: " + overlayPackage + " " + enable); + final String action = enable ? "enable" : "disable"; + try { + UiDevice.getInstance(getInstrumentation()).executeShellCommand( + "cmd overlay " + action + " " + overlayPackage); + } catch (IOException e) { + e.printStackTrace(); + } } @Rule