Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7269cd7 authored by Louis Chang's avatar Louis Chang
Browse files

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
parent 4cbf2ce4
Loading
Loading
Loading
Loading
+2 −44
Original line number Diff line number Diff line
@@ -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");