Merge "Allow delegates to see the notifications they post"
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 306c366..606b00b 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -1838,12 +1838,17 @@
* Recover a list of active notifications: ones that have been posted by the calling app that
* have not yet been dismissed by the user or {@link #cancel(String, int)}ed by the app.
*
- * Each notification is embedded in a {@link StatusBarNotification} object, including the
+ * <p><Each notification is embedded in a {@link StatusBarNotification} object, including the
* original <code>tag</code> and <code>id</code> supplied to
* {@link #notify(String, int, Notification) notify()}
* (via {@link StatusBarNotification#getTag() getTag()} and
* {@link StatusBarNotification#getId() getId()}) as well as a copy of the original
* {@link Notification} object (via {@link StatusBarNotification#getNotification()}).
+ * </p>
+ * <p>From {@link Build.VERSION_CODES#Q}, will also return notifications you've posted as an
+ * app's notification delegate via
+ * {@link NotificationManager#notifyAsPackage(String, String, int, Notification)}.
+ * </p>
*
* @return An array of {@link StatusBarNotification}.
*/
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 405edd2..8fa3c46 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -2647,6 +2647,10 @@
* Note that since notification posting is done asynchronously, this will not return
* notifications that are in the process of being posted.
*
+ * From {@link Build.VERSION_CODES#Q}, will also return notifications you've posted as
+ * an app's notification delegate via
+ * {@link NotificationManager#notifyAsPackage(String, String, int, Notification)}.
+ *
* @returns A list of all the package's notifications, in natural order.
*/
@Override
@@ -2689,16 +2693,18 @@
private StatusBarNotification sanitizeSbn(String pkg, int userId,
StatusBarNotification sbn) {
- if (sbn.getPackageName().equals(pkg) && sbn.getUserId() == userId) {
- // We could pass back a cloneLight() but clients might get confused and
- // try to send this thing back to notify() again, which would not work
- // very well.
- return new StatusBarNotification(
- sbn.getPackageName(),
- sbn.getOpPkg(),
- sbn.getId(), sbn.getTag(), sbn.getUid(), sbn.getInitialPid(),
- sbn.getNotification().clone(),
- sbn.getUser(), sbn.getOverrideGroupKey(), sbn.getPostTime());
+ if (sbn.getUserId() == userId) {
+ if (sbn.getPackageName().equals(pkg) || sbn.getOpPkg().equals(pkg)) {
+ // We could pass back a cloneLight() but clients might get confused and
+ // try to send this thing back to notify() again, which would not work
+ // very well.
+ return new StatusBarNotification(
+ sbn.getPackageName(),
+ sbn.getOpPkg(),
+ sbn.getId(), sbn.getTag(), sbn.getUid(), sbn.getInitialPid(),
+ sbn.getNotification().clone(),
+ sbn.getUser(), sbn.getOverrideGroupKey(), sbn.getPostTime());
+ }
}
return null;
}