Added the can host home task flag to TaskDisplayArea
In TaskDisplayArea added the mCanHostHomeTask flag that should allow/limit a TaskDisplayArea to have a home task. Bug: 183416428 Test: atest DisplayAreaPolicyTests#testTaskDisplayAreasCanHostHomeTask Change-Id: I1a34be2c679b3839e5dc91746b71fc6b8c2d88da
This commit is contained in:
committed by
Darryl L Johnson
parent
062dde5e2b
commit
530c26e4c5
@@ -1686,6 +1686,11 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!taskDisplayArea.canHostHomeTask()) {
|
||||
// Can't launch home on a TaskDisplayArea that does not support root home task
|
||||
return false;
|
||||
}
|
||||
|
||||
if (taskDisplayArea.getDisplayId() != DEFAULT_DISPLAY && !mService.mSupportsMultiDisplay) {
|
||||
// Can't launch home on secondary display if device does not support multi-display.
|
||||
return false;
|
||||
|
||||
@@ -172,18 +172,33 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
|
||||
*/
|
||||
final boolean mCreatedByOrganizer;
|
||||
|
||||
/**
|
||||
* True if this TaskDisplayArea can have a home task
|
||||
* {@link WindowConfiguration#ACTIVITY_TYPE_HOME}
|
||||
*/
|
||||
private final boolean mCanHostHomeTask;
|
||||
|
||||
TaskDisplayArea(DisplayContent displayContent, WindowManagerService service, String name,
|
||||
int displayAreaFeature) {
|
||||
this(displayContent, service, name, displayAreaFeature, false /* createdByOrganizer */);
|
||||
int displayAreaFeature) {
|
||||
this(displayContent, service, name, displayAreaFeature, false /* createdByOrganizer */,
|
||||
true /* canHostHomeTask */);
|
||||
}
|
||||
|
||||
TaskDisplayArea(DisplayContent displayContent, WindowManagerService service, String name,
|
||||
int displayAreaFeature, boolean createdByOrganizer) {
|
||||
int displayAreaFeature, boolean createdByOrganizer) {
|
||||
this(displayContent, service, name, displayAreaFeature, createdByOrganizer,
|
||||
true /* canHostHomeTask */);
|
||||
}
|
||||
|
||||
TaskDisplayArea(DisplayContent displayContent, WindowManagerService service, String name,
|
||||
int displayAreaFeature, boolean createdByOrganizer,
|
||||
boolean canHostHomeTask) {
|
||||
super(service, Type.ANY, name, displayAreaFeature);
|
||||
mDisplayContent = displayContent;
|
||||
mRootWindowContainer = service.mRoot;
|
||||
mAtmService = service.mAtmService;
|
||||
mCreatedByOrganizer = createdByOrganizer;
|
||||
mCanHostHomeTask = canHostHomeTask;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1667,7 +1682,9 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
|
||||
@Nullable
|
||||
Task getOrCreateRootHomeTask(boolean onTop) {
|
||||
Task homeTask = getRootHomeTask();
|
||||
if (homeTask == null && mDisplayContent.supportsSystemDecorations()) {
|
||||
// Take into account if this TaskDisplayArea can have a home task before trying to
|
||||
// create the root task
|
||||
if (homeTask == null && canHostHomeTask()) {
|
||||
homeTask = createRootTask(WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, onTop);
|
||||
}
|
||||
return homeTask;
|
||||
@@ -1881,6 +1898,13 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exposes the home task capability of the TaskDisplayArea
|
||||
*/
|
||||
boolean canHostHomeTask() {
|
||||
return mDisplayContent.supportsSystemDecorations() && mCanHostHomeTask;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback for when the order of the root tasks in the display changes.
|
||||
*/
|
||||
|
||||
@@ -28,6 +28,7 @@ import static com.android.server.wm.WindowContainer.POSITION_TOP;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
@@ -48,6 +49,7 @@ import org.junit.runner.RunWith;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Tests for the {@link DisplayAreaPolicy}.
|
||||
@@ -183,6 +185,43 @@ public class DisplayAreaPolicyTests extends WindowTestsBase {
|
||||
taskDisplayArea5, taskDisplayArea1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTaskDisplayAreasCanHostHomeTask() {
|
||||
final WindowManagerService wms = mWm;
|
||||
final DisplayContent displayContent = mock(DisplayContent.class);
|
||||
doReturn(true).when(displayContent).isTrusted();
|
||||
doReturn(true).when(displayContent).supportsSystemDecorations();
|
||||
final RootDisplayArea root = new SurfacelessDisplayAreaRoot(wms);
|
||||
final TaskDisplayArea taskDisplayAreaWithHome = new TaskDisplayArea(displayContent, wms,
|
||||
"Tasks1", FEATURE_DEFAULT_TASK_CONTAINER);
|
||||
final TaskDisplayArea taskDisplayAreaWithNoHome = new TaskDisplayArea(displayContent, wms,
|
||||
"Tasks2", FEATURE_VENDOR_FIRST + 1, false, false);
|
||||
final DisplayArea.Tokens ime = new DisplayArea.Tokens(wms, ABOVE_TASKS, "Ime");
|
||||
final DisplayAreaPolicy policy = new DisplayAreaPolicyBuilder()
|
||||
.setRootHierarchy(new DisplayAreaPolicyBuilder.HierarchyBuilder(root)
|
||||
.setImeContainer(ime)
|
||||
.setTaskDisplayAreas(Lists.newArrayList(taskDisplayAreaWithHome,
|
||||
taskDisplayAreaWithNoHome))
|
||||
)
|
||||
.build(wms);
|
||||
assertTaskDisplayAreaPresentAndCanHaveHome(policy, FEATURE_DEFAULT_TASK_CONTAINER, true);
|
||||
assertTaskDisplayAreaPresentAndCanHaveHome(policy, FEATURE_VENDOR_FIRST + 1, false);
|
||||
final Task stackHome = taskDisplayAreaWithHome.getOrCreateRootHomeTask(true);
|
||||
final Task stackNoHome = taskDisplayAreaWithNoHome.getOrCreateRootHomeTask(true);
|
||||
assertNotNull(stackHome);
|
||||
assertNull(stackNoHome);
|
||||
}
|
||||
|
||||
private void assertTaskDisplayAreaPresentAndCanHaveHome(DisplayAreaPolicy policy,
|
||||
int featureId,
|
||||
boolean canHaveHome) {
|
||||
Optional<DisplayArea> optionalDisplayArea = policy.mRoot.mChildren
|
||||
.stream().filter(displayArea -> displayArea.mFeatureId == featureId)
|
||||
.findAny();
|
||||
assertTrue(optionalDisplayArea.isPresent());
|
||||
assertEquals(canHaveHome, optionalDisplayArea.get().asTaskDisplayArea().canHostHomeTask());
|
||||
}
|
||||
|
||||
private void assertTaskDisplayAreasOrder(DisplayAreaPolicy policy,
|
||||
TaskDisplayArea... expectTdaOrder) {
|
||||
List<TaskDisplayArea> expectOrder = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user