From 762850ba32283c1ddba91e29774b61cca007ae49 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Tue, 21 Jun 2022 10:05:00 +0000 Subject: Send RESULT_CANCELED immediately if start-activity-for-result across TaskFragments The same reason we don't support it across Tasks. Bug: 236668365 Test: verified on sample app Change-Id: Iad6633d4e378e3a814af5cb650d4fa942b21c521 --- .../core/java/com/android/server/wm/ActivityStarter.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index fc412cbdad72..960b1bcd5c42 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. -- cgit v1.2.3-59-g8ed1b