Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 107f7b7b authored by Nicolas Prevot's avatar Nicolas Prevot
Browse files

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
parent e40d7a63
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -6181,8 +6181,12 @@ public class Intent implements Parcelable, Cloneable {
     * who sent the intent.
     * who sent the intent.
     * @hide
     * @hide
     */
     */
    public void setContentUserHint(int contentUserHint) {
    public void prepareToLeaveUser(int userId) {
        mContentUserHint = contentUserHint;
        // 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;
        }
    }
    }


    /**
    /**
+2 −2
Original line number Original line Diff line number Diff line
@@ -87,9 +87,9 @@ public class IntentForwarderActivity extends Activity {
        if (canForward(newIntent, targetUserId)) {
        if (canForward(newIntent, targetUserId)) {
            if (newIntent.getAction().equals(Intent.ACTION_CHOOSER)) {
            if (newIntent.getAction().equals(Intent.ACTION_CHOOSER)) {
                Intent innerIntent = (Intent) newIntent.getParcelableExtra(Intent.EXTRA_INTENT);
                Intent innerIntent = (Intent) newIntent.getParcelableExtra(Intent.EXTRA_INTENT);
                innerIntent.setContentUserHint(callingUserId);
                innerIntent.prepareToLeaveUser(callingUserId);
            } else {
            } else {
                newIntent.setContentUserHint(callingUserId);
                newIntent.prepareToLeaveUser(callingUserId);
            }
            }


            final android.content.pm.ResolveInfo ri = getPackageManager().resolveActivityAsUser(
            final android.content.pm.ResolveInfo ri = getPackageManager().resolveActivityAsUser(
+1 −1
Original line number Original line Diff line number Diff line
@@ -2829,7 +2829,7 @@ final class ActivityStack {
                    + " res=" + resultCode + " data=" + resultData);
                    + " res=" + resultCode + " data=" + resultData);
            if (resultTo.userId != r.userId) {
            if (resultTo.userId != r.userId) {
                if (resultData != null) {
                if (resultData != null) {
                    resultData.setContentUserHint(r.userId);
                    resultData.prepareToLeaveUser(r.userId);
                }
                }
            }
            }
            if (r.info.applicationInfo.uid > 0) {
            if (r.info.applicationInfo.uid > 0) {