summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ResetTargetTaskHelper.java57
1 files changed, 25 insertions, 32 deletions
diff --git a/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java b/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java
index 45f8a15979f4..420997a5b82d 100644
--- a/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java
+++ b/services/core/java/com/android/server/wm/ResetTargetTaskHelper.java
@@ -20,7 +20,6 @@ import static com.android.server.wm.ActivityStack.TAG_ADD_REMOVE;
import static com.android.server.wm.ActivityStack.TAG_TASKS;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_ADD_REMOVE;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_TASKS;
-import static com.android.server.wm.Task.REPARENT_LEAVE_STACK_IN_PLACE;
import android.app.ActivityOptions;
import android.content.Intent;
@@ -233,48 +232,42 @@ class ResetTargetTaskHelper {
}
final ActivityTaskManagerService atmService = mTargetStack.mAtmService;
- final ArrayList<Task> createdTasks = new ArrayList<>();
+ DisplayContent display = mTargetStack.getDisplay();
+ final boolean singleTaskInstanceDisplay = display.isSingleTaskInstance();
+ if (singleTaskInstanceDisplay) {
+ display = atmService.mRootWindowContainer.getDefaultDisplay();
+ }
+
+ final int windowingMode = mTargetStack.getWindowingMode();
+ final int activityType = mTargetStack.getActivityType();
+
while (!mPendingReparentActivities.isEmpty()) {
final ActivityRecord r = mPendingReparentActivities.remove(0);
- final ActivityRecord bottom = mTargetStack.getBottomMostActivity();
- final Task targetTask;
- if (bottom != null && r.taskAffinity.equals(bottom.getTask().affinity)) {
+ final boolean alwaysCreateTask = DisplayContent.alwaysCreateStack(windowingMode,
+ activityType);
+ final Task task = alwaysCreateTask
+ ? display.getBottomMostTask() : mTargetStack.getBottomMostTask();
+ Task targetTask = null;
+ if (task != null && r.taskAffinity.equals(task.affinity)) {
// If the activity currently at the bottom has the same task affinity as
// the one we are moving, then merge it into the same task.
- targetTask = bottom.getTask();
+ targetTask = task;
if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Start pushing activity "
+ r + " out to bottom task " + targetTask);
- } else {
- targetTask = mTargetStack.reuseOrCreateTask(
- r.info, null /*intent*/, false /*toTop*/);
+ }
+ if (targetTask == null) {
+ if (alwaysCreateTask) {
+ targetTask = display.getOrCreateStack(windowingMode, activityType,
+ false /* onTop */);
+ } else {
+ targetTask = mTargetStack.reuseOrCreateTask(r.info, null /*intent*/,
+ false /*toTop*/);
+ }
targetTask.affinityIntent = r.intent;
- createdTasks.add(targetTask);
- if (DEBUG_TASKS) Slog.v(TAG_TASKS, "Start pushing activity "
- + r + " out to new task " + targetTask);
}
r.reparent(targetTask, 0 /* position */, "resetTargetTaskIfNeeded");
atmService.mStackSupervisor.mRecentTasks.add(targetTask);
}
-
- DisplayContent display = mTargetStack.getDisplay();
- final boolean singleTaskInstanceDisplay = display.isSingleTaskInstance();
- if (singleTaskInstanceDisplay) {
- display = atmService.mRootWindowContainer.getDefaultDisplay();
- }
-
- final int windowingMode = mTargetStack.getWindowingMode();
- final int activityType = mTargetStack.getActivityType();
- if (!singleTaskInstanceDisplay && !display.alwaysCreateStack(windowingMode, activityType)) {
- return;
- }
-
- while (!createdTasks.isEmpty()) {
- final Task targetTask = createdTasks.remove(createdTasks.size() - 1);
- final ActivityStack targetStack = display.getOrCreateStack(
- windowingMode, activityType, false /* onTop */);
- targetTask.reparent(targetStack, false /* toTop */, REPARENT_LEAVE_STACK_IN_PLACE,
- false /* animate */, true /* deferResume */, "resetTargetTask");
- }
}
private boolean takeOption(ActivityRecord p, boolean noOptions) {