Merge "Use display windowing mode if undefined" into rvc-dev am: 0b74287ba6
Change-Id: I4c2b646e74c27179b669f310dc67f1e248e3951c
This commit is contained in:
@@ -762,7 +762,11 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
|
|||||||
*/
|
*/
|
||||||
ActivityStack getOrCreateStack(int windowingMode, int activityType, boolean onTop,
|
ActivityStack getOrCreateStack(int windowingMode, int activityType, boolean onTop,
|
||||||
Intent intent, Task candidateTask) {
|
Intent intent, Task candidateTask) {
|
||||||
if (!alwaysCreateStack(windowingMode, activityType)) {
|
// Need to pass in a determined windowing mode to see if a new stack should be created,
|
||||||
|
// so use its parent's windowing mode if it is undefined.
|
||||||
|
if (!alwaysCreateStack(
|
||||||
|
windowingMode != WINDOWING_MODE_UNDEFINED ? windowingMode : getWindowingMode(),
|
||||||
|
activityType)) {
|
||||||
ActivityStack stack = getStack(windowingMode, activityType);
|
ActivityStack stack = getStack(windowingMode, activityType);
|
||||||
if (stack != null) {
|
if (stack != null) {
|
||||||
return stack;
|
return stack;
|
||||||
|
|||||||
@@ -16,8 +16,18 @@
|
|||||||
|
|
||||||
package com.android.server.wm;
|
package com.android.server.wm;
|
||||||
|
|
||||||
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
|
||||||
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
|
||||||
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
||||||
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
|
||||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
|
||||||
|
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
|
||||||
|
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
|
||||||
@@ -27,6 +37,9 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
|
||||||
import android.platform.test.annotations.Presubmit;
|
import android.platform.test.annotations.Presubmit;
|
||||||
|
|
||||||
@@ -134,4 +147,48 @@ public class TaskDisplayAreaTests extends WindowTestsBase {
|
|||||||
assertEquals("The testing DisplayContent should be moved to top with task",
|
assertEquals("The testing DisplayContent should be moved to top with task",
|
||||||
mWm.mRoot.getChildCount() - 1, indexOfDisplayWithPinnedStack);
|
mWm.mRoot.getChildCount() - 1, indexOfDisplayWithPinnedStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReuseTaskAsStack() {
|
||||||
|
final Task candidateTask = createTaskStackOnDisplay(WINDOWING_MODE_FULLSCREEN,
|
||||||
|
ACTIVITY_TYPE_STANDARD, mDisplayContent);
|
||||||
|
final Task newStack = createTaskStackOnDisplay(WINDOWING_MODE_FULLSCREEN,
|
||||||
|
ACTIVITY_TYPE_STANDARD, mDisplayContent);
|
||||||
|
doReturn(newStack).when(mDisplayContent.mTaskContainers).createStack(anyInt(),
|
||||||
|
anyInt(), anyBoolean(), any(), any(), anyBoolean());
|
||||||
|
|
||||||
|
final int type = ACTIVITY_TYPE_STANDARD;
|
||||||
|
assertGetOrCreateStack(WINDOWING_MODE_FULLSCREEN, type, candidateTask,
|
||||||
|
true /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(WINDOWING_MODE_UNDEFINED, type, candidateTask,
|
||||||
|
true /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, type, candidateTask,
|
||||||
|
true /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(WINDOWING_MODE_FREEFORM, type, candidateTask,
|
||||||
|
true /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(WINDOWING_MODE_MULTI_WINDOW, type, candidateTask,
|
||||||
|
true /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, type, candidateTask,
|
||||||
|
false /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(WINDOWING_MODE_PINNED, type, candidateTask,
|
||||||
|
false /* reuseCandidate */);
|
||||||
|
|
||||||
|
final int windowingMode = WINDOWING_MODE_FULLSCREEN;
|
||||||
|
assertGetOrCreateStack(windowingMode, ACTIVITY_TYPE_HOME, candidateTask,
|
||||||
|
false /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(windowingMode, ACTIVITY_TYPE_RECENTS, candidateTask,
|
||||||
|
false /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(windowingMode, ACTIVITY_TYPE_ASSISTANT, candidateTask,
|
||||||
|
false /* reuseCandidate */);
|
||||||
|
assertGetOrCreateStack(windowingMode, ACTIVITY_TYPE_DREAM, candidateTask,
|
||||||
|
false /* reuseCandidate */);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertGetOrCreateStack(int windowingMode, int activityType, Task candidateTask,
|
||||||
|
boolean reuseCandidate) {
|
||||||
|
final TaskDisplayArea taskDisplayArea = (TaskDisplayArea) candidateTask.getParent();
|
||||||
|
final ActivityStack stack = taskDisplayArea.getOrCreateStack(windowingMode, activityType,
|
||||||
|
false /* onTop */, null /* intent */, candidateTask /* candidateTask */);
|
||||||
|
assertEquals(reuseCandidate, stack == candidateTask);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user