From a7269cd7e1c728b68dcb7614233ee2af81e2661e Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Mon, 11 Jul 2022 13:47:45 +0000 Subject: [PATCH] Do not append NEW_TASK flag when caller activity is finishing The caller activity and its task should be able to reuse. There's no need to migrate the launching activity to another Task. Bug: 233591548 Test: wm presubmit Change-Id: I2bd5f01ef9196010f1af1aa7cb9e6a45984e960d --- .../android/server/wm/ActivityStarter.java | 46 +------------------ 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 9b1c6bbd9a3a0..f06afa91ca3a5 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -201,8 +201,6 @@ class ActivityStarter { @VisibleForTesting boolean mAddingToTask; - private ActivityInfo mNewTaskInfo; - private Intent mNewTaskIntent; private Task mSourceRootTask; private Task mTargetRootTask; // The task that the last activity was started into. We currently reset the actual start @@ -613,8 +611,6 @@ class ActivityStarter { mInTaskFragment = starter.mInTaskFragment; mAddingToTask = starter.mAddingToTask; - mNewTaskInfo = starter.mNewTaskInfo; - mNewTaskIntent = starter.mNewTaskIntent; mSourceRootTask = starter.mSourceRootTask; mTargetTask = starter.mTargetTask; @@ -1819,9 +1815,6 @@ class ActivityStarter { voiceSession, voiceInteractor, restrictedBgActivity); computeLaunchingTaskFlags(); - - computeSourceRootTask(); - mIntent.setFlags(mLaunchFlags); boolean dreamStopping = false; @@ -2413,8 +2406,6 @@ class ActivityStarter { mInTaskFragment = null; mAddingToTask = false; - mNewTaskInfo = null; - mNewTaskIntent = null; mSourceRootTask = null; mTargetRootTask = null; @@ -2448,6 +2439,7 @@ class ActivityStarter { mOptions = options; mCallingUid = r.launchedFromUid; mSourceRecord = sourceRecord; + mSourceRootTask = mSourceRecord != null ? mSourceRecord.getRootTask() : null; mVoiceSession = voiceSession; mVoiceInteractor = voiceInteractor; mRestrictedBgActivity = restrictedBgActivity; @@ -2708,39 +2700,6 @@ class ActivityStarter { } } - private void computeSourceRootTask() { - if (mSourceRecord == null) { - mSourceRootTask = null; - return; - } - if (!mSourceRecord.finishing) { - mSourceRootTask = mSourceRecord.getRootTask(); - return; - } - - // If the source is finishing, we can't further count it as our source. This is because the - // task it is associated with may now be empty and on its way out, so we don't want to - // blindly throw it in to that task. Instead we will take the NEW_TASK flow and try to find - // a task for it. But save the task information so it can be used when creating the new task. - if ((mLaunchFlags & FLAG_ACTIVITY_NEW_TASK) == 0) { - Slog.w(TAG, "startActivity called from finishing " + mSourceRecord - + "; forcing " + "Intent.FLAG_ACTIVITY_NEW_TASK for: " + mIntent); - mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK; - - // It is not guaranteed that the source record will have a task associated with it. - // For example, if this method is being called for processing a pending activity - // launch, it is possible that the activity has been removed from the task after the - // launch was enqueued. - final Task sourceTask = mSourceRecord.getTask(); - if (sourceTask == null || sourceTask.getTopNonFinishingActivity() == null) { - mNewTaskInfo = mSourceRecord.info; - mNewTaskIntent = sourceTask != null ? sourceTask.intent : null; - } - } - mSourceRecord = null; - mSourceRootTask = null; - } - /** * Decide whether the new activity should be inserted into an existing task. Returns null * if not or an ActivityRecord with the task into which the new activity should be added. @@ -2934,8 +2893,7 @@ class ActivityStarter { private void setNewTask(Task taskToAffiliate) { final boolean toTop = !mLaunchTaskBehind && !mAvoidMoveToFront; final Task task = mTargetRootTask.reuseOrCreateTask( - mNewTaskInfo != null ? mNewTaskInfo : mStartActivity.info, - mNewTaskIntent != null ? mNewTaskIntent : mIntent, mVoiceSession, + mStartActivity.info, mIntent, mVoiceSession, mVoiceInteractor, toTop, mStartActivity, mSourceRecord, mOptions); task.mTransitionController.collectExistenceChange(task); addOrReparentStartingActivity(task, "setTaskFromReuseOrCreateNewTask");