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

Commit 4ea60693 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Fix PendingIntent caching for multiuser

Store the userId in the PendingIntentRecord.Key, so that it doesn't match
an identical pending intent from another user.

Change-Id: Icfc39e0f717c902dc3a60bdf5283a3402bbd2eaa
parent 70574efd
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -4430,7 +4430,8 @@ public final class ActivityManagerService extends ActivityManagerNative
        PendingIntentRecord.Key key = new PendingIntentRecord.Key(
                type, packageName, activity, resultWho,
                requestCode, intents, resolvedTypes, flags, options);
                requestCode, intents, resolvedTypes, flags, options,
                UserHandle.getUserId(callingUid));
        WeakReference<PendingIntentRecord> ref;
        ref = mIntentSenderRecords.get(key);
        PendingIntentRecord rec = ref != null ? ref.get() : null;
+9 −3
Original line number Diff line number Diff line
@@ -54,11 +54,12 @@ class PendingIntentRecord extends IIntentSender.Stub {
        String[] allResolvedTypes;
        final int flags;
        final int hashCode;
        final int userId;
        
        private static final int ODD_PRIME_NUMBER = 37;
        
        Key(int _t, String _p, ActivityRecord _a, String _w,
                int _r, Intent[] _i, String[] _it, int _f, Bundle _o) {
                int _r, Intent[] _i, String[] _it, int _f, Bundle _o, int _userId) {
            type = _t;
            packageName = _p;
            activity = _a;
@@ -70,10 +71,12 @@ class PendingIntentRecord extends IIntentSender.Stub {
            allResolvedTypes = _it;
            flags = _f;
            options = _o;
            userId = _userId;

            int hash = 23;
            hash = (ODD_PRIME_NUMBER*hash) + _f;
            hash = (ODD_PRIME_NUMBER*hash) + _r;
            hash = (ODD_PRIME_NUMBER*hash) + _userId;
            if (_w != null) {
                hash = (ODD_PRIME_NUMBER*hash) + _w.hashCode();
            }
@@ -102,6 +105,9 @@ class PendingIntentRecord extends IIntentSender.Stub {
                if (type != other.type) {
                    return false;
                }
                if (userId != other.userId){
                    return false;
                }
                if (!packageName.equals(other.packageName)) {
                    return false;
                }
@@ -156,7 +162,7 @@ class PendingIntentRecord extends IIntentSender.Stub {
                + " intent="
                + (requestIntent != null
                        ? requestIntent.toShortString(false, true, false, false) : "<null>")
                + " flags=0x" + Integer.toHexString(flags) + "}";
                + " flags=0x" + Integer.toHexString(flags) + " u=" + userId + "}";
        }
        
        String typeName() {