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

Commit 60373e80 authored by Nicolas Prevot's avatar Nicolas Prevot Committed by Android (Google) Code Review
Browse files

Merge "Fix the case where an intent bounces several times between users." into mnc-dev

parents 00f0716a 107f7b7b
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) {