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

Commit 59c156cf authored by Jeff Chang's avatar Jeff Chang
Browse files

Avoid creating new instance on top when started for result

A new activity instance was created when the task top activity with
launch mode singleTop started itself via startActivityForResult.

Update the rule for checking if the activity being launched is the
same as the one currently at the top. Send the cancel result back
if startActivityForResult on the case. Moreover, remove the
Single-task condition because it is not working here.

Bug: 122967919
Test: atest IntentTests
Change-Id: I4c59e8050cb6ddb7430d8141d8454699dc14d2a0
parent 0feb7574
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -2027,12 +2027,12 @@ class ActivityStarter {
     */
    private int deliverToCurrentTopIfNeeded(Task topStack, NeededUriGrants intentGrants) {
        final ActivityRecord top = topStack.topRunningNonDelayedActivityLocked(mNotTop);
        final boolean dontStart = top != null && mStartActivity.resultTo == null
        final boolean dontStart = top != null
                && top.mActivityComponent.equals(mStartActivity.mActivityComponent)
                && top.mUserId == mStartActivity.mUserId
                && top.attachedToProcess()
                && ((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0
                || isLaunchModeOneOf(LAUNCH_SINGLE_TOP, LAUNCH_SINGLE_TASK))
                || LAUNCH_SINGLE_TOP == mLaunchMode)
                // This allows home activity to automatically launch on secondary task display area
                // when it was added, if home was the top activity on default task display area,
                // instead of sending new intent to the home activity on default display area.
@@ -2053,6 +2053,13 @@ class ActivityStarter {
            return START_RETURN_INTENT_TO_CALLER;
        }

        if (mStartActivity.resultTo != null) {
            mStartActivity.resultTo.sendResult(INVALID_UID, mStartActivity.resultWho,
                    mStartActivity.requestCode, RESULT_CANCELED,
                    null /* data */, null /* dataGrants */);
            mStartActivity.resultTo = null;
        }

        deliverNewIntent(top, intentGrants);

        // Don't use mStartActivity.task to show the toast. We're not starting a new activity but