Loading core/java/android/app/INotificationManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -38,5 +38,6 @@ interface INotificationManager boolean areNotificationsEnabledForPackage(String pkg, int uid); StatusBarNotification[] getActiveNotifications(String callingPkg); StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count); } services/java/com/android/server/NotificationManagerService.java +42 −2 Original line number Diff line number Diff line Loading @@ -235,6 +235,31 @@ public class NotificationManagerService extends INotificationManager.Stub } }; } public StatusBarNotification[] getArray(int count) { if (count == 0) count = Archive.BUFFER_SIZE; final StatusBarNotification[] a = new StatusBarNotification[Math.min(count, mBuffer.size())]; Iterator<StatusBarNotification> iter = descendingIterator(); int i=0; while (iter.hasNext() && i < count) { a[i++] = iter.next(); } return a; } public StatusBarNotification[] getArray(int count, String pkg, int userId) { if (count == 0) count = Archive.BUFFER_SIZE; final StatusBarNotification[] a = new StatusBarNotification[Math.min(count, mBuffer.size())]; Iterator<StatusBarNotification> iter = filter(descendingIterator(), pkg, userId); int i=0; while (iter.hasNext() && i < count) { a[i++] = iter.next(); } return a; } } Archive mArchive = new Archive(); Loading Loading @@ -347,10 +372,9 @@ public class NotificationManagerService extends INotificationManager.Stub public StatusBarNotification[] getActiveNotifications(String callingPkg) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS, "NotificationManagerService"); "NotificationManagerService.getActiveNotifications"); StatusBarNotification[] tmp = null; int userId = UserHandle.getCallingUserId(); int uid = Binder.getCallingUid(); if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg) Loading @@ -366,6 +390,22 @@ public class NotificationManagerService extends INotificationManager.Stub return tmp; } public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS, "NotificationManagerService.getHistoricalNotifications"); StatusBarNotification[] tmp = null; int uid = Binder.getCallingUid(); if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg) == AppOpsManager.MODE_ALLOWED) { synchronized (mArchive) { tmp = mArchive.getArray(count); } } return tmp; } public static final class NotificationRecord { final StatusBarNotification sbn; Loading Loading
core/java/android/app/INotificationManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -38,5 +38,6 @@ interface INotificationManager boolean areNotificationsEnabledForPackage(String pkg, int uid); StatusBarNotification[] getActiveNotifications(String callingPkg); StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count); }
services/java/com/android/server/NotificationManagerService.java +42 −2 Original line number Diff line number Diff line Loading @@ -235,6 +235,31 @@ public class NotificationManagerService extends INotificationManager.Stub } }; } public StatusBarNotification[] getArray(int count) { if (count == 0) count = Archive.BUFFER_SIZE; final StatusBarNotification[] a = new StatusBarNotification[Math.min(count, mBuffer.size())]; Iterator<StatusBarNotification> iter = descendingIterator(); int i=0; while (iter.hasNext() && i < count) { a[i++] = iter.next(); } return a; } public StatusBarNotification[] getArray(int count, String pkg, int userId) { if (count == 0) count = Archive.BUFFER_SIZE; final StatusBarNotification[] a = new StatusBarNotification[Math.min(count, mBuffer.size())]; Iterator<StatusBarNotification> iter = filter(descendingIterator(), pkg, userId); int i=0; while (iter.hasNext() && i < count) { a[i++] = iter.next(); } return a; } } Archive mArchive = new Archive(); Loading Loading @@ -347,10 +372,9 @@ public class NotificationManagerService extends INotificationManager.Stub public StatusBarNotification[] getActiveNotifications(String callingPkg) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS, "NotificationManagerService"); "NotificationManagerService.getActiveNotifications"); StatusBarNotification[] tmp = null; int userId = UserHandle.getCallingUserId(); int uid = Binder.getCallingUid(); if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg) Loading @@ -366,6 +390,22 @@ public class NotificationManagerService extends INotificationManager.Stub return tmp; } public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS, "NotificationManagerService.getHistoricalNotifications"); StatusBarNotification[] tmp = null; int uid = Binder.getCallingUid(); if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg) == AppOpsManager.MODE_ALLOWED) { synchronized (mArchive) { tmp = mArchive.getArray(count); } } return tmp; } public static final class NotificationRecord { final StatusBarNotification sbn; Loading