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

Commit bdef5377 authored by Yorke Lee's avatar Yorke Lee
Browse files

Don't end task in finishActivityLocked if task is being reused

In scenarios when the task is being cleared for reuse, endTask
is true in finishActivityLocked even though the task is not actually
going to be removed later on. On Arc++, this leads to issues
because the notifyTaskRemovalStarted notification is delivered
and cleanup work happens for a task that isn't actually removed.

Fix this by looking at TaskRecord.mReuseTask, which is set to
true when the task is cleared in order to be reused.

Cherry-picked from
I3c422f57a8cda55f7b0c08e183f4f1a15d3b7ddd

Bug: 37093330
Test: Launch a test activity that relaunches itself with
FLAG_ACTIVITY_NEW_TASK AND FLAG_ACTIVITY_CLEAR_TASK,  verify that
notifyTaskRemovalStarted call back is not sent.

Change-Id: Ifee23ad7104124e38b5ee5e6c520eb25a5846ef2
parent a900430b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3582,7 +3582,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai

            finishActivityResultsLocked(r, resultCode, resultData);

            final boolean endTask = index <= 0;
            final boolean endTask = index <= 0 && !task.isClearingToReuseTask();
            final int transit = endTask ? TRANSIT_TASK_CLOSE : TRANSIT_ACTIVITY_CLOSE;
            if (mResumedActivity == r) {
                if (DEBUG_VISIBILITY || DEBUG_TRANSITION) Slog.v(TAG_TRANSITION,
+7 −0
Original line number Diff line number Diff line
@@ -1564,6 +1564,13 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta
                && (mResizeMode != RESIZE_MODE_FORCE_RESIZABLE_LANDSCAPE_ONLY || landscape);
    }

    /**
     * @return {@code true} if the task is being cleared for the purposes of being reused.
     */
    boolean isClearingToReuseTask() {
        return mReuseTask;
    }

    /**
     * Find the activity in the history stack within the given task.  Returns
     * the index within the history at which it's found, or < 0 if not found.