From 465b1e1870d044018eb9c69b69cb02c5c51dd621 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Tue, 31 Mar 2020 12:15:51 -0700 Subject: [PATCH] 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 --- .../systemui/stackdivider/DividerView.java | 8 -------- .../server/wm/ActivityTaskManagerService.java | 3 +++ .../core/java/com/android/server/wm/Task.java | 17 ++--------------- 3 files changed, 5 insertions(+), 23 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java index e21861ab426ee..3879c164a84cc 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java @@ -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()) { diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 682e991bdad27..7803c7370dacd 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -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); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 0151b82d2f020..7c6343c872321 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -4068,21 +4068,7 @@ class Task extends 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 { } } + @VisibleForTesting boolean setTaskOrganizer(ITaskOrganizer organizer) { if (mTaskOrganizer == organizer) { return false;