diff options
| -rw-r--r-- | services/java/com/android/server/am/ActivityStackSupervisor.java | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index 483b4a04390e..62e134044326 100644 --- a/services/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -1134,6 +1134,19 @@ public final class ActivityStackSupervisor {                  resultRecord.removeResultsLocked(                      sourceRecord, resultWho, requestCode);              } +            if (sourceRecord.launchedFromUid == callingUid) { +                // The new activity is being launched from the same uid as the previous +                // activity in the flow, and asking to forward its result back to the +                // previous.  In this case the activity is serving as a trampoline between +                // the two, so we also want to update its launchedFromPackage to be the +                // same as the previous activity.  Note that this is safe, since we know +                // these two packages come from the same uid; the caller could just as +                // well have supplied that same package name itself.  This specifially +                // deals with the case of an intent picker/chooser being launched in the app +                // flow to redirect to an activity picked by the user, where we want the final +                // activity to consider it to have been launched by the previous app activity. +                callingPackage = sourceRecord.launchedFromPackage; +            }          }          if (err == ActivityManager.START_SUCCESS && intent.getComponent() == null) { |