summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorNicolas Prevot <nprevot@google.com>2015-07-01 16:31:48 +0100
committerNicolas Prevot <nprevot@google.com>2015-07-01 17:05:18 +0100
commit107f7b7becdb5fe6d735a4f1355eb3421f068fb0 (patch)
tree7ea368ade9a9337154b521d29de5255b64f850b8 /core/java
parente40d7a632668a3813a443195ba8e2146407a0517 (diff)
Fix the case where an intent bounces several times between users.
An intent may bounce several times between users. In this case, we want mContentUserHint to refer to the original user. BUG:19656340 Change-Id: I22a35fab0c228140dcb223899f5e38ff33ee5aed
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/Intent.java8
-rw-r--r--core/java/com/android/internal/app/IntentForwarderActivity.java4
2 files changed, 8 insertions, 4 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index b1d80f021b50..c9f9b565751a 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -6181,8 +6181,12 @@ public class Intent implements Parcelable, Cloneable {
* who sent the intent.
* @hide
*/
- public void setContentUserHint(int contentUserHint) {
- mContentUserHint = contentUserHint;
+ public void prepareToLeaveUser(int userId) {
+ // If mContentUserHint is not UserHandle.USER_CURRENT, the intent has already left a user.
+ // We want mContentUserHint to refer to the original user, so don't do anything.
+ if (mContentUserHint == UserHandle.USER_CURRENT) {
+ mContentUserHint = userId;
+ }
}
/**
diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java
index f598828d712f..233bee3b5bc0 100644
--- a/core/java/com/android/internal/app/IntentForwarderActivity.java
+++ b/core/java/com/android/internal/app/IntentForwarderActivity.java
@@ -87,9 +87,9 @@ public class IntentForwarderActivity extends Activity {
if (canForward(newIntent, targetUserId)) {
if (newIntent.getAction().equals(Intent.ACTION_CHOOSER)) {
Intent innerIntent = (Intent) newIntent.getParcelableExtra(Intent.EXTRA_INTENT);
- innerIntent.setContentUserHint(callingUserId);
+ innerIntent.prepareToLeaveUser(callingUserId);
} else {
- newIntent.setContentUserHint(callingUserId);
+ newIntent.prepareToLeaveUser(callingUserId);
}
final android.content.pm.ResolveInfo ri = getPackageManager().resolveActivityAsUser(