Only allow roots tasks to be organized

Non-root tasks are relative to their parents so no need to have them
return true to the isOrganized() method.
We can also:
- Reset the windowing mode for a task we are moving to split screen
before we reparent to the split task.
- Remove code in sys-ui that was added to compensate for the
method previous returning true.

Bug: 152619437
Test: They pass
Change-Id: I7a0381f535f2d0b245773ecb1fbb4fdb524954f9
This commit is contained in:
Wale Ogunwale
2020-03-31 12:15:51 -07:00
parent 1df5eb0130
commit 465b1e1870
3 changed files with 5 additions and 23 deletions

View File

@@ -1085,14 +1085,6 @@ public class DividerView extends FrameLayout implements OnTouchListener,
crop.offsetTo(-(otherTaskRect.left - otherRect.left),
-(otherTaskRect.top - otherRect.top));
t.setWindowCrop(mTiles.mSecondarySurface, crop);
// Reposition home and recents surfaces or they would be positioned relatively to its
// parent (split-screen secondary task) position.
for (int i = mTiles.mHomeAndRecentsSurfaces.size() - 1; i >= 0; --i) {
t.setPosition(mTiles.mHomeAndRecentsSurfaces.get(i),
mTiles.mHomeBounds.left - otherTaskRect.left,
mTiles.mHomeBounds.top - otherTaskRect.top);
t.setWindowCrop(mTiles.mHomeAndRecentsSurfaces.get(i), null);
}
final SurfaceControl dividerCtrl = getWindowSurfaceControl();
if (dividerCtrl != null) {
if (isHorizontalDivision()) {

View File

@@ -2802,6 +2802,9 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
false /* includingParents */);
}
WindowContainerTransaction wct = new WindowContainerTransaction();
// Clear out current windowing mode before reparenting to split taks.
wct.setWindowingMode(
task.getStack().mRemoteToken.toWindowContainerToken(), WINDOWING_MODE_UNDEFINED);
wct.reparent(task.getStack().mRemoteToken.toWindowContainerToken(),
primarySplitTask.mRemoteToken.toWindowContainerToken(), toTop);
mWindowOrganizerController.applyTransaction(wct);

View File

@@ -4068,21 +4068,7 @@ class Task extends WindowContainer<WindowContainer> {
@Override
boolean isOrganized() {
final Task rootTask = getRootTask();
if (rootTask.mTaskOrganizer == null) {
// You are obviously not organized...
return false;
}
if (rootTask == this) {
// Root tasks can be organized.
return true;
}
if (rootTask.mCreatedByOrganizer && getParent() == rootTask) {
// Direct children of tasks added by the organizer can the organized.
return true;
}
return false;
return mTaskOrganizer != null;
}
@Override
@@ -4137,6 +4123,7 @@ class Task extends WindowContainer<WindowContainer> {
}
}
@VisibleForTesting
boolean setTaskOrganizer(ITaskOrganizer organizer) {
if (mTaskOrganizer == organizer) {
return false;