Fix failed test in order to enable Live Tile (in the next change)

Live tile changes certain assumptions we have for tests, for example
- Launcher will not be in the resumed state after swiping up to Overview

Also, disable live tile for 3rd party launcher for now

Test: presubmit
Fixes: 169694902
Change-Id: Ifd466db0354f59290c4f66a0a2ad4c82f1169f29
This commit is contained in:
Tracy Zhou 2021-03-24 14:12:29 -07:00
parent 29c1e8437e
commit 9d706b1ada
4 changed files with 83 additions and 8 deletions

View File

@ -20,6 +20,8 @@ import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TI
import android.content.Context;
import com.android.quickstep.OverviewComponentObserver;
import com.android.quickstep.RecentsAnimationDeviceState;
import com.android.quickstep.SysUINavigationMode;
import java.util.function.Predicate;
@ -35,6 +37,7 @@ public class NavigationModeFeatureFlag implements
private final Supplier<Boolean> mBasePredicate;
private final Predicate<SysUINavigationMode.Mode> mModePredicate;
private boolean mSupported;
private OverviewComponentObserver mObserver;
private NavigationModeFeatureFlag(Supplier<Boolean> basePredicate,
Predicate<SysUINavigationMode.Mode> modePredicate) {
@ -43,12 +46,16 @@ public class NavigationModeFeatureFlag implements
}
public boolean get() {
return mBasePredicate.get() && mSupported;
return mBasePredicate.get() && mSupported && mObserver.isHomeAndOverviewSame();
}
public void initialize(Context context) {
onNavigationModeChanged(SysUINavigationMode.INSTANCE.get(context).getMode());
SysUINavigationMode.INSTANCE.get(context).addModeChangeListener(this);
// Temporary solution to disable live tile for the fallback launcher
RecentsAnimationDeviceState rads = new RecentsAnimationDeviceState(context);
mObserver = new OverviewComponentObserver(context, rads);
}
@Override

View File

@ -16,7 +16,15 @@
package com.android.quickstep;
import static com.android.quickstep.util.NavigationModeFeatureFlag.LIVE_TILE;
import static org.junit.Assert.assertTrue;
import com.android.launcher3.Launcher;
import com.android.launcher3.tapl.LauncherInstrumentation;
import com.android.launcher3.tapl.LauncherInstrumentation.ContainerType;
import com.android.launcher3.ui.AbstractLauncherUiTest;
import com.android.quickstep.views.RecentsView;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
@ -31,4 +39,49 @@ public abstract class AbstractQuickStepTest extends AbstractLauncherUiTest {
outerRule(new NavigationModeSwitchRule(mLauncher)).
around(super.getRulesInsideActivityMonitor());
}
@Override
protected void onLauncherActivityClose(Launcher launcher) {
RecentsView recentsView = launcher.getOverviewPanel();
if (recentsView != null) {
recentsView.finishRecentsAnimation(true, null);
}
}
@Override
protected void checkLauncherState(Launcher launcher, ContainerType expectedContainerType,
boolean isResumed, boolean isStarted) {
if (!isInLiveTileMode(launcher, expectedContainerType)) {
super.checkLauncherState(launcher, expectedContainerType, isResumed, isStarted);
} else {
assertTrue("[Live Tile] hasBeenResumed() == isStarted(), hasBeenResumed(): "
+ isResumed, isResumed != isStarted);
}
}
@Override
protected void checkLauncherStateInOverview(Launcher launcher,
ContainerType expectedContainerType, boolean isStarted, boolean isResumed) {
if (!isInLiveTileMode(launcher, expectedContainerType)) {
super.checkLauncherStateInOverview(launcher, expectedContainerType, isStarted,
isResumed);
} else {
assertTrue(
"[Live Tile] Launcher is not started or has been resumed in state: "
+ expectedContainerType,
isStarted && !isResumed);
}
}
private boolean isInLiveTileMode(Launcher launcher,
LauncherInstrumentation.ContainerType expectedContainerType) {
if (!LIVE_TILE.get()
|| expectedContainerType != LauncherInstrumentation.ContainerType.OVERVIEW) {
return false;
}
RecentsView recentsView = launcher.getOverviewPanel();
return recentsView.getSizeStrategy().isInLiveTileMode()
&& recentsView.getRunningTaskId() != -1;
}
}

View File

@ -100,6 +100,7 @@ public class StartLauncherViaGestureTests extends AbstractQuickStepTest {
// The test action.
mLauncher.getBackground().switchToOverview();
}
closeLauncherActivity();
mLauncher.pressHome();
}
}

View File

@ -503,6 +503,7 @@ public abstract class AbstractLauncherUiTest {
// Destroy Launcher activity.
executeOnLauncher(launcher -> {
if (launcher != null) {
onLauncherActivityClose(launcher);
launcher.finish();
}
});
@ -524,7 +525,7 @@ public abstract class AbstractLauncherUiTest {
return launcher.getAppsView().getActiveRecyclerView().getCurrentScrollY();
}
private static void checkLauncherIntegrity(
private void checkLauncherIntegrity(
Launcher launcher, ContainerType expectedContainerType) {
if (launcher != null) {
final StateManager<LauncherState> stateManager = launcher.getStateManager();
@ -535,10 +536,8 @@ public abstract class AbstractLauncherUiTest {
stableState == stateManager.getState());
final boolean isResumed = launcher.hasBeenResumed();
assertTrue("hasBeenResumed() != isStarted(), hasBeenResumed(): " + isResumed,
isResumed == launcher.isStarted());
assertTrue("hasBeenResumed() != isUserActive(), hasBeenResumed(): " + isResumed,
isResumed == launcher.isUserActive());
final boolean isStarted = launcher.isStarted();
checkLauncherState(launcher, expectedContainerType, isResumed, isStarted);
final int ordinal = stableState.ordinal;
@ -561,8 +560,7 @@ public abstract class AbstractLauncherUiTest {
break;
}
case OVERVIEW: {
assertTrue(
"Launcher is not resumed in state: " + expectedContainerType,
checkLauncherStateInOverview(launcher, expectedContainerType, isStarted,
isResumed);
assertTrue(TestProtocol.stateOrdinalToString(ordinal),
ordinal == TestProtocol.OVERVIEW_STATE_ORDINAL);
@ -587,4 +585,20 @@ public abstract class AbstractLauncherUiTest {
expectedContainerType == ContainerType.FALLBACK_OVERVIEW);
}
}
protected void checkLauncherState(Launcher launcher, ContainerType expectedContainerType,
boolean isResumed, boolean isStarted) {
assertTrue("hasBeenResumed() != isStarted(), hasBeenResumed(): " + isResumed,
isResumed == isStarted);
assertTrue("hasBeenResumed() != isUserActive(), hasBeenResumed(): " + isResumed,
isResumed == launcher.isUserActive());
}
protected void checkLauncherStateInOverview(Launcher launcher,
ContainerType expectedContainerType, boolean isStarted, boolean isResumed) {
assertTrue("Launcher is not resumed in state: " + expectedContainerType,
isResumed);
}
protected void onLauncherActivityClose(Launcher launcher) { }
}