mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 10:48:19 +00:00
Merge "After switching nav mode, wait for the sysui mode to sync" into ub-launcher3-qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0d5bd65e6e
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
@@ -748,19 +755,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");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user