Running tests only in 1 nav mode

Pixel1: 3-button
Pixel2: 2-button
Pixel3: 0-button

This is a temporary workaround for the listed bugs.

Bug: 130558787
Bug: 131419978
Change-Id: Ic57422c7ca8e9985fc0613239c803149e66d907f
This commit is contained in:
vadimt 2019-04-26 12:46:56 -07:00
parent 6f09dd61af
commit 9565c2a071
2 changed files with 69 additions and 4 deletions

View File

@ -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);
}

View File

@ -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