Merge changes I452376eb,Ib864a279
* changes:
[RESTRICT AUTOMERGE] Support lifecycle CTS on non-fullscreen display
[RESTRICT AUTOMERGE] Do not enforce minimized dock feature to all devices
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleClientTestBase.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleClientTestBase.java
index d3fa81d..58b6325 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleClientTestBase.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleClientTestBase.java
@@ -70,6 +70,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
@@ -687,7 +688,7 @@
void moveTaskToPrimarySplitScreenAndVerify(Activity activity) {
getLifecycleLog().clear();
- moveTaskToPrimarySplitScreen(activity.getTaskId());
+ moveTaskToPrimarySplitScreen(activity.getTaskId(), true /* showSideActivity */);
final Class<? extends Activity> activityClass = activity.getClass();
waitAndAssertActivityEnterSplitScreenTransitions(activityClass, "enterSplitScreen");
@@ -703,20 +704,48 @@
log("Start waitAndAssertActivitySplitScreenTransitions");
final List<LifecycleLog.ActivityCallback> expectedTransitions =
- LifecycleVerifier.getSplitScreenTransitionSequence(activityClass);
+ new ArrayList<LifecycleLog.ActivityCallback>(
+ LifecycleVerifier.getSplitScreenTransitionSequence(activityClass));
+
+ final List<LifecycleLog.ActivityCallback> expectedTransitionForMinimizedDock =
+ LifecycleVerifier.appendMinimizedDockTransitionTrail(expectedTransitions);
mLifecycleTracker.waitForActivityTransitions(activityClass, expectedTransitions);
+
if (!expectedTransitions.contains(ON_MULTI_WINDOW_MODE_CHANGED)) {
- LifecycleVerifier.assertSequence(activityClass, getLifecycleLog(),
- expectedTransitions, message);
+ LifecycleVerifier.assertSequenceMatchesOneOf(
+ activityClass,
+ getLifecycleLog(),
+ Arrays.asList(expectedTransitions, expectedTransitionForMinimizedDock),
+ message);
} else {
final List<LifecycleLog.ActivityCallback> extraSequence =
- Arrays.asList(ON_MULTI_WINDOW_MODE_CHANGED, ON_TOP_POSITION_LOST,
- ON_PAUSE, ON_STOP, ON_DESTROY, PRE_ON_CREATE, ON_CREATE,
- ON_START, ON_POST_CREATE, ON_RESUME, ON_TOP_POSITION_GAINED,
- ON_TOP_POSITION_LOST, ON_PAUSE);
- LifecycleVerifier.assertSequenceMatchesOneOf(activityClass, getLifecycleLog(),
- Arrays.asList(expectedTransitions, extraSequence), message);
+ new ArrayList<LifecycleLog.ActivityCallback>(
+ Arrays.asList(ON_MULTI_WINDOW_MODE_CHANGED, ON_TOP_POSITION_LOST,
+ ON_PAUSE, ON_STOP, ON_DESTROY, PRE_ON_CREATE, ON_CREATE,
+ ON_START, ON_POST_CREATE, ON_RESUME, ON_TOP_POSITION_GAINED));
+ final List<LifecycleLog.ActivityCallback> extraSequenceForMinimizedDock =
+ LifecycleVerifier.appendMinimizedDockTransitionTrail(extraSequence);
+ final int displayWindowingMode =
+ getDisplayWindowingModeByActivity(getComponentName(activityClass));
+ if (displayWindowingMode != WINDOWING_MODE_FULLSCREEN) {
+ // For non-fullscreen display mode, there won't be a multi-window callback.
+ expectedTransitions.removeAll(Collections.singleton(ON_MULTI_WINDOW_MODE_CHANGED));
+ expectedTransitionForMinimizedDock.removeAll(
+ Collections.singleton(ON_MULTI_WINDOW_MODE_CHANGED));
+ extraSequence.removeAll(Collections.singleton(ON_MULTI_WINDOW_MODE_CHANGED));
+ extraSequenceForMinimizedDock.removeAll(
+ Collections.singleton(ON_MULTI_WINDOW_MODE_CHANGED));
+ }
+ LifecycleVerifier.assertSequenceMatchesOneOf(
+ activityClass,
+ getLifecycleLog(),
+ Arrays.asList(
+ expectedTransitions,
+ extraSequence,
+ expectedTransitionForMinimizedDock,
+ extraSequenceForMinimizedDock),
+ message);
}
}
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleKeyguardTests.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleKeyguardTests.java
index 9fbd1da..0062dac 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleKeyguardTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleKeyguardTests.java
@@ -98,10 +98,6 @@
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
.launch();
- // Leaving the minimized dock, the stack state on the primary split screen should change
- // from Paused to Resumed.
- waitAndAssertActivityStates(state(firstActivity, ON_RESUME));
-
// Show and hide lock screen
getLifecycleLog().clear();
try (final LockScreenSession lockScreenSession = new LockScreenSession()) {
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecyclePipTests.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecyclePipTests.java
index e4dc868..b018ea7 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecyclePipTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecyclePipTests.java
@@ -249,8 +249,6 @@
.launch();
LifecycleVerifier.assertLaunchSequence(SecondActivity.class, getLifecycleLog());
- LifecycleVerifier.assertSequence(FirstActivity.class, getLifecycleLog(),
- Arrays.asList(ON_RESUME), "launchToSide");
LifecycleVerifier.assertEmptySequence(PipActivity.class, getLifecycleLog(),
"launchBelow");
}
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleSplitScreenTests.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleSplitScreenTests.java
index 6cf6e99..87caa56 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleSplitScreenTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleSplitScreenTests.java
@@ -94,9 +94,6 @@
.setFlags(FLAG_ACTIVITY_MULTIPLE_TASK | FLAG_ACTIVITY_NEW_TASK)
.launch();
- // Wait for SecondActivity in primary split screen leave minimize dock.
- waitAndAssertActivityStates(state(secondActivity, ON_RESUME));
-
// Finish top activity
secondActivity.finish();
@@ -129,11 +126,6 @@
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
.launch();
- // Wait for first activity to resume after being moved to split-screen.
- waitAndAssertActivityStates(state(firstActivity, ON_RESUME));
- LifecycleVerifier.assertSequence(FirstActivity.class, getLifecycleLog(),
- Arrays.asList(ON_RESUME), "launchToSide");
-
// Launch third activity on top of second
getLifecycleLog().clear();
new Launcher(ThirdActivity.class)
@@ -160,11 +152,6 @@
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
.launch();
- // Wait for first activity to resume after being moved to split-screen.
- waitAndAssertActivityStates(state(firstActivity, ON_RESUME));
- LifecycleVerifier.assertSequence(FirstActivity.class, getLifecycleLog(),
- Arrays.asList(ON_RESUME), "launchToSide");
-
// Launch translucent activity on top of second
getLifecycleLog().clear();
@@ -335,12 +322,23 @@
getLaunchActivityBuilder().
setTargetActivity(getComponentName(SecondActivity.class)));
- // Wait for the activity to receive the change
- waitForActivityTransitions(ConfigChangeHandlingActivity.class,
- Arrays.asList(ON_TOP_POSITION_LOST, ON_MULTI_WINDOW_MODE_CHANGED));
- LifecycleVerifier.assertOrder(getLifecycleLog(), ConfigChangeHandlingActivity.class,
- Arrays.asList(ON_MULTI_WINDOW_MODE_CHANGED, ON_TOP_POSITION_LOST),
- "moveToSplitScreen");
+ final int displayWindowingMode = getDisplayWindowingModeByActivity(
+ getComponentName(ConfigChangeHandlingActivity.class));
+ if (displayWindowingMode == WINDOWING_MODE_FULLSCREEN) {
+ // Wait for the activity to receive the change.
+ waitForActivityTransitions(ConfigChangeHandlingActivity.class,
+ Arrays.asList(ON_TOP_POSITION_LOST, ON_MULTI_WINDOW_MODE_CHANGED));
+ LifecycleVerifier.assertOrder(getLifecycleLog(), ConfigChangeHandlingActivity.class,
+ Arrays.asList(ON_MULTI_WINDOW_MODE_CHANGED, ON_TOP_POSITION_LOST),
+ "moveToSplitScreen");
+ } else {
+ // For non-fullscreen display mode, there won't be a multi-window callback.
+ waitForActivityTransitions(ConfigChangeHandlingActivity.class,
+ Arrays.asList(ON_TOP_POSITION_LOST));
+ LifecycleVerifier.assertTransitionObserved(getLifecycleLog(),
+ transition(ConfigChangeHandlingActivity.class, ON_TOP_POSITION_LOST),
+ "moveToSplitScreen");
+ }
// Exit split-screen
getLifecycleLog().clear();
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTopResumedStateTests.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTopResumedStateTests.java
index 33279f1..7bbf9c1 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTopResumedStateTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/ActivityLifecycleTopResumedStateTests.java
@@ -309,11 +309,6 @@
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
.launch();
- // Wait for first activity to resume after moving to primary split-screen
- waitAndAssertActivityStates(state(firstActivity, ON_RESUME));
- // First activity must be resumed, but not gain the top position
- LifecycleVerifier.assertSequence(CallbackTrackingActivity.class, getLifecycleLog(),
- Arrays.asList(ON_RESUME), "unminimizeDockedStack");
// Second activity must be on top now
LifecycleVerifier.assertLaunchSequence(SingleTopActivity.class, getLifecycleLog());
}
@@ -334,9 +329,6 @@
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
.launch();
- // Wait for first activity to resume after moving to primary split-screen
- waitAndAssertActivityStates(state(firstActivity, ON_RESUME));
-
// Switch top between two activities
getLifecycleLog().clear();
new Launcher(CallbackTrackingActivity.class)
@@ -473,9 +465,6 @@
.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_MULTIPLE_TASK)
.launch();
- // Wait for first activity to resume after moving to primary split-screen
- waitAndAssertActivityStates(state(firstActivity, ON_RESUME));
-
// Tap on first activity to switch the focus
getLifecycleLog().clear();
final ActivityTask dockedStack = getStackForTaskId(firstActivity.getTaskId());
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/LifecycleVerifier.java b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/LifecycleVerifier.java
index 94db5bc..6045fc7 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/LifecycleVerifier.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/lifecycle/LifecycleVerifier.java
@@ -298,14 +298,31 @@
static List<LifecycleLog.ActivityCallback> getSplitScreenTransitionSequence(
Class<? extends Activity> activityClass) {
+ // Minimized-dock is not a policy requirement and but SysUI-specific concept, so we here
+ // don't expect a trailing ON_PAUSE.
return CALLBACK_TRACKING_CLASS.isAssignableFrom(activityClass)
? Arrays.asList(
ON_TOP_POSITION_LOST, ON_PAUSE, ON_STOP, ON_DESTROY, PRE_ON_CREATE,
ON_CREATE, ON_MULTI_WINDOW_MODE_CHANGED, ON_START, ON_POST_CREATE, ON_RESUME,
- ON_TOP_POSITION_GAINED, ON_TOP_POSITION_LOST, ON_PAUSE)
+ ON_TOP_POSITION_GAINED, ON_TOP_POSITION_LOST)
: Arrays.asList(
ON_PAUSE, ON_STOP, ON_DESTROY, PRE_ON_CREATE, ON_CREATE, ON_START,
- ON_RESUME, ON_PAUSE);
+ ON_RESUME);
+ }
+
+ // TODO(b/149338177): Remove this workaround once test passes with TestTaskOrganizer not to
+ // depend on minimized dock feature which is not policy requirement, but SysUI-specific.
+ /**
+ * Returns the result of appending "leave from minimized dock" transitions to given transitions
+ * to "consume" these activity callbacks.
+ */
+ static List<ActivityCallback> appendMinimizedDockTransitionTrail(
+ List<ActivityCallback> transitions) {
+ final List<LifecycleLog.ActivityCallback> newTransitions =
+ new ArrayList<LifecycleLog.ActivityCallback>(transitions);
+ newTransitions.addAll(Arrays.asList(ON_PAUSE, ON_RESUME));
+
+ return newTransitions;
}
static void assertSequence(Class<? extends Activity> activityClass, LifecycleLog lifecycleLog,
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
index 27b44a5..587c538 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
@@ -753,6 +753,10 @@
return null;
}
+ protected int getDisplayWindowingModeByActivity(ComponentName activity) {
+ return mWmState.getDisplay(mWmState.getDisplayByActivity(activity)).getWindowingMode();
+ }
+
/**
* Launches the home activity directly. If there is no specific reason to simulate a home key
* (which will trigger stop-app-switches), it is the recommended method to go home.