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

Commit 0d5bd65e authored by Vadim Tryshev's avatar Vadim Tryshev Committed by Android (Google) Code Review
Browse files

Merge "After switching nav mode, wait for the sysui mode to sync" into ub-launcher3-qt-dev

parents 924a9665 5ad52ec0
Loading
Loading
Loading
Loading
+40 −5
Original line number Diff line number Diff line
@@ -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,9 +81,12 @@ public class NavigationModeSwitchRule implements TestRule {
                @Override
                public void evaluate() throws Throwable {
                    final Context context = getInstrumentation().getContext();
                    final String prevOverlayPkg = LauncherInstrumentation.isGesturalMode(context)
                    final int currentInteractionMode =
                            LauncherInstrumentation.getCurrentInteractionMode(context);
                    final String prevOverlayPkg =
                            QuickStepContract.isGesturalMode(currentInteractionMode)
                                    ? NAV_BAR_MODE_GESTURAL_OVERLAY
                            : LauncherInstrumentation.isSwipeUpMode(context)
                                    : QuickStepContract.isSwipeUpMode(currentInteractionMode)
                                            ? NAV_BAR_MODE_2BUTTON_OVERLAY
                                            : NAV_BAR_MODE_3BUTTON_OVERLAY;
                    final LauncherInstrumentation.NavigationModel originalMode =
@@ -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);
    }
}
+16 −21
Original line number Diff line number Diff line
@@ -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");
    }