diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index fc412cbdad727..960b1bcd5c423 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2576,6 +2576,7 @@ class ActivityStarter { mInTask = null; } mInTaskFragment = inTaskFragment; + sendNewTaskFragmentResultRequestIfNeeded(); mStartFlags = startFlags; // If the onlyIfNeeded flag is set, then we can do this if the activity being launched @@ -2618,6 +2619,18 @@ class ActivityStarter { } } + private void sendNewTaskFragmentResultRequestIfNeeded() { + if (mStartActivity.resultTo != null && mInTaskFragment != null + && mInTaskFragment != mStartActivity.resultTo.getTaskFragment()) { + Slog.w(TAG, + "Activity is launching as a new TaskFragment, so cancelling activity result."); + mStartActivity.resultTo.sendResult(INVALID_UID, mStartActivity.resultWho, + mStartActivity.requestCode, RESULT_CANCELED, + null /* data */, null /* dataGrants */); + mStartActivity.resultTo = null; + } + } + private void computeLaunchingTaskFlags() { // If the caller is not coming from another activity, but has given us an explicit task into // which they would like us to launch the new activity, then let's see about doing that.