Always create root task for ACTIVITY_TYPE_RECENTS
- When alwaysCreateRootTask() returns false lets say for recents activity, it leads to double nesting of root tasks on top of recents. - This double nesting works fine for phones where recents is full-screen but it leads to inconsistent state for the cases where the recents activity itself needs to be in a multi window mode i.e. inside a launch root task. Fix: 277088827 Test: atest TaskDisplayAreaTests Change-Id: I3a097028b58b451a33932eb039ae9fb970d734df
This commit is contained in:
@@ -6045,7 +6045,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
static boolean alwaysCreateRootTask(int windowingMode, int activityType) {
|
||||
// Always create a root task for fullscreen, freeform, and multi windowing
|
||||
// modes so that we can manage visual ordering and return types correctly.
|
||||
return activityType == ACTIVITY_TYPE_STANDARD
|
||||
return (activityType == ACTIVITY_TYPE_STANDARD || activityType == ACTIVITY_TYPE_RECENTS)
|
||||
&& (windowingMode == WINDOWING_MODE_FULLSCREEN
|
||||
|| windowingMode == WINDOWING_MODE_FREEFORM
|
||||
|| windowingMode == WINDOWING_MODE_PINNED
|
||||
|
||||
@@ -63,6 +63,8 @@ import com.android.server.wm.LaunchParamsController.LaunchParams;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Tests for the {@link TaskDisplayArea} container.
|
||||
*
|
||||
@@ -349,23 +351,24 @@ public class TaskDisplayAreaTests extends WindowTestsBase {
|
||||
@Test
|
||||
public void testReuseTaskAsRootTask() {
|
||||
final Task candidateTask = createTask(mDisplayContent);
|
||||
final int type = ACTIVITY_TYPE_STANDARD;
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_FULLSCREEN, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_UNDEFINED, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_FREEFORM, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_MULTI_WINDOW, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_PINNED, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
List<Integer> activityTypesWithReusableRootTask = List.of(ACTIVITY_TYPE_STANDARD,
|
||||
ACTIVITY_TYPE_RECENTS);
|
||||
for (Integer type : activityTypesWithReusableRootTask) {
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_FULLSCREEN, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_UNDEFINED, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_FREEFORM, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_MULTI_WINDOW, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(WINDOWING_MODE_PINNED, type, candidateTask,
|
||||
true /* reuseCandidate */);
|
||||
}
|
||||
|
||||
final int windowingMode = WINDOWING_MODE_FULLSCREEN;
|
||||
assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_HOME, candidateTask,
|
||||
false /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_RECENTS, candidateTask,
|
||||
false /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_ASSISTANT, candidateTask,
|
||||
false /* reuseCandidate */);
|
||||
assertGetOrCreateRootTask(windowingMode, ACTIVITY_TYPE_DREAM, candidateTask,
|
||||
|
||||
Reference in New Issue
Block a user