Remove use of TaskTile
We just have the TaskOrganizer create root task directly
Test: Existing tests pass
Bug: 133381284
Bug: 149429752
Change-Id: Id884cbe8e7d2fdd93e729fcb2793fad4afd59b21
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 214a676..35492f4 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -36,7 +36,6 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
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 android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
@@ -122,6 +121,7 @@
import static com.android.server.wm.Task.LOCK_TASK_AUTH_DONT_LOCK;
import static com.android.server.wm.Task.REPARENT_KEEP_STACK_AT_FRONT;
import static com.android.server.wm.Task.REPARENT_LEAVE_STACK_IN_PLACE;
+import static com.android.server.wm.WindowContainer.POSITION_TOP;
import android.Manifest;
import android.annotation.IntDef;
@@ -144,7 +144,6 @@
import android.app.IAssistDataReceiver;
import android.app.INotificationManager;
import android.app.IRequestFinishCallback;
-import android.window.ITaskOrganizerController;
import android.app.ITaskStackListener;
import android.app.Notification;
import android.app.NotificationManager;
@@ -230,9 +229,9 @@
import android.view.IRecentsAnimationRunner;
import android.view.RemoteAnimationAdapter;
import android.view.RemoteAnimationDefinition;
+import android.view.WindowManager;
import android.window.IWindowOrganizerController;
import android.window.WindowContainerTransaction;
-import android.view.WindowManager;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
@@ -2349,16 +2348,18 @@
}
final ActivityStack stack = task.getStack();
- // Convert some windowing-mode changes into root-task reparents for split-screen.
- if (stack.getTile() != null) {
- stack.getDisplay().onSplitScreenModeDismissed();
- }
if (toTop) {
stack.moveToFront("setTaskWindowingMode", task);
}
- stack.setWindowingMode(windowingMode);
- stack.getDisplay().ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
- true /* notifyClients */);
+ // Convert some windowing-mode changes into root-task reparents for split-screen.
+ if (stack.inSplitScreenWindowingMode()) {
+ stack.getDisplay().onSplitScreenModeDismissed();
+
+ } else {
+ stack.setWindowingMode(windowingMode);
+ stack.getDisplay().ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS,
+ true /* notifyClients */);
+ }
return true;
} finally {
Binder.restoreCallingIdentity(ident);
@@ -2755,24 +2756,22 @@
}
final int prevMode = task.getWindowingMode();
- moveTaskToSplitScreenPrimaryTile(task, toTop);
+ moveTaskToSplitScreenPrimaryTask(task, toTop);
return prevMode != task.getWindowingMode();
}
- void moveTaskToSplitScreenPrimaryTile(Task task, boolean toTop) {
- ActivityStack stack = task.getStack();
- TaskTile tile = null;
- for (int i = stack.getDisplay().getStackCount() - 1; i >= 0; --i) {
- tile = stack.getDisplay().getStackAt(i).asTile();
- if (tile != null && tile.getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
- break;
- }
+ void moveTaskToSplitScreenPrimaryTask(Task task, boolean toTop) {
+ final DisplayContent display = task.getDisplayContent();
+ final ActivityStack primarySplitTask = display.getRootSplitScreenPrimaryTask();
+ if (primarySplitTask == null) {
+ throw new IllegalStateException("Can't enter split without associated organized task");
}
- if (tile == null) {
- throw new IllegalStateException("Can't enter split without associated tile");
+
+ if (toTop) {
+ display.positionStackAt(POSITION_TOP, primarySplitTask, false /* includingParents */);
}
WindowContainerTransaction wct = new WindowContainerTransaction();
- wct.reparent(stack.mRemoteToken, tile.mRemoteToken, toTop);
+ wct.reparent(task.getStack().mRemoteToken, primarySplitTask.mRemoteToken, toTop);
mWindowOrganizerController.applyTransaction(wct);
}
@@ -3239,7 +3238,8 @@
final ActivityStack stack = r.getRootTask();
final Task task = stack.getDisplay().createStack(stack.getWindowingMode(),
- stack.getActivityType(), !ON_TOP, ainfo, intent);
+ stack.getActivityType(), !ON_TOP, ainfo, intent,
+ false /* createdByOrganizer */);
if (!mRecentTasks.addToBottom(task)) {
// The app has too many tasks already and we can't add any more
@@ -4278,19 +4278,9 @@
try {
synchronized (mGlobalLock) {
final DisplayContent dc = mRootWindowContainer.getDefaultDisplay();
- TaskTile primary = null;
- TaskTile secondary = null;
- for (int i = dc.getStackCount() - 1; i >= 0; --i) {
- final TaskTile t = dc.getStackAt(i).asTile();
- if (t == null) {
- continue;
- }
- if (t.getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY) {
- primary = t;
- } else if (t.getWindowingMode() == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY) {
- secondary = t;
- }
- }
+ final Task primary = dc.getRootSplitScreenPrimaryTask();
+ final Task secondary = dc.getTask(t -> t.mCreatedByOrganizer && t.isRootTask()
+ && t.inSplitScreenSecondaryWindowingMode());
if (primary == null || secondary == null) {
return;
}