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

Commit 38156c50 authored by Justin Koh's avatar Justin Koh
Browse files

Add check to allow notification listener packages to post >50 notifications

Bug: 13433398
Change-Id: I77abf19982add240e1bbe8196fbe148d32884f68
(cherry picked from commit 2dbd36fc)
parent f1381deb
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -1535,14 +1535,15 @@ public class NotificationManagerService extends SystemService {
        }
        checkCallerIsSystemOrSameApp(pkg);
        final boolean isSystemNotification = isUidSystem(callingUid) || ("android".equals(pkg));
        final boolean isNotificationFromListener = mListeners.isListenerPackage(pkg);

        final int userId = ActivityManager.handleIncomingUser(callingPid,
                callingUid, incomingUserId, true, false, "enqueueNotification", pkg);
        final UserHandle user = new UserHandle(userId);

        // Limit the number of notifications that any given package except the android
        // package can enqueue.  Prevents DOS attacks and deals with leaks.
        if (!isSystemNotification) {
        // package or a registered listener can enqueue.  Prevents DOS attacks and deals with leaks.
        if (!isSystemNotification && !isNotificationFromListener) {
            synchronized (mNotificationList) {
                int count = 0;
                final int N = mNotificationList.size();
@@ -2727,6 +2728,21 @@ public class NotificationManagerService extends SystemService {
                Log.e(TAG, "unable to notify listener (listener hints): " + listener, ex);
            }
        }

        private boolean isListenerPackage(String packageName) {
            if (packageName == null) {
                return false;
            }
            // TODO: clean up locking object later
            synchronized (mNotificationList) {
                for (final ManagedServiceInfo serviceInfo : mServices) {
                    if (packageName.equals(serviceInfo.component.getPackageName())) {
                        return true;
                    }
                }
            }
            return false;
        }
    }

    public static final class DumpFilter {