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

Commit 3b119f78 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by android-build-merger
Browse files

Merge "[DO NOT MERGE] The system can post notifications for any package" into nyc-mr2-dev

am: 1ddddee3

Change-Id: Iaf9aacd39ea328f3a22f26987eb65df682ddccc5
parents 763d6ab4 1ddddee3
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -2533,7 +2533,6 @@ public class NotificationManagerService extends SystemService {
        final int userId = ActivityManager.handleIncomingUser(callingPid,
                callingUid, incomingUserId, true, false, "enqueueNotification", pkg);
        final UserHandle user = new UserHandle(userId);

        // Fix the notification as best we can.
        try {
            final ApplicationInfo ai = getContext().getPackageManager().getApplicationInfoAsUser(
@@ -2547,13 +2546,16 @@ public class NotificationManagerService extends SystemService {

        mUsageStats.registerEnqueuedByApp(pkg);


        if (pkg == null || notification == null) {
            throw new IllegalArgumentException("null not allowed: pkg=" + pkg
                    + " id=" + id + " notification=" + notification);
        }

        // The system can post notifications for any package, let us resolve that.
        final int notificationUid = resolveNotificationUid(opPkg, callingUid, userId);

        final StatusBarNotification n = new StatusBarNotification(
                pkg, opPkg, id, tag, callingUid, callingPid, 0, notification,
                pkg, opPkg, id, tag, notificationUid, callingPid, 0, notification,
                user);

        // Limit the number of notifications that any given package except the android
@@ -2623,6 +2625,19 @@ public class NotificationManagerService extends SystemService {
        idOut[0] = id;
    }

    private int resolveNotificationUid(String opPackageName, int callingUid, int userId) {
        // The system can post notifications on behalf of any package it wants
        if (isCallerSystem() && opPackageName != null && !"android".equals(opPackageName)) {
            try {
                return getContext().getPackageManager()
                        .getPackageUidAsUser(opPackageName, userId);
            } catch (NameNotFoundException e) {
                /* ignore */
            }
        }
        return callingUid;
    }

    private class EnqueueNotificationRunnable implements Runnable {
        private final NotificationRecord r;
        private final int userId;