From 3026d0bf0a4d89788cdc29573dcecb2bd72b263c Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Wed, 12 Mar 2014 11:10:08 -0700 Subject: [PATCH] Fix issue #11965706: Calls using IntentChooser are now Broken in 4.3 and 4.4 The activity manager needs to set launchedFromPackage to be that of the previous package in the case where flow has been redirected through an intermediate activity. Change-Id: I678fc2e7d984991ac715251a784ba7d7ccbf9fca --- .../android/server/am/ActivityStackSupervisor.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index 483b4a04390e0..62e1340443269 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) {