summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/INotificationManager.aidl2
-rwxr-xr-xservices/core/java/com/android/server/notification/NotificationManagerService.java30
2 files changed, 18 insertions, 14 deletions
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 1d4a1acde434..9aa6b870792d 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -123,7 +123,7 @@ interface INotificationManager
@UnsupportedAppUsage
StatusBarNotification[] getActiveNotifications(String callingPkg);
@UnsupportedAppUsage
- StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count);
+ StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count, boolean includeSnoozed);
NotificationHistory getNotificationHistory(String callingPkg);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index ea77c36c1498..8067ebceca0f 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -527,11 +527,11 @@ public class NotificationManagerService extends SystemService {
private static class Archive {
final int mBufferSize;
- final ArrayDeque<StatusBarNotification> mBuffer;
+ final ArrayDeque<Pair<StatusBarNotification, Integer>> mBuffer;
public Archive(int size) {
mBufferSize = size;
- mBuffer = new ArrayDeque<StatusBarNotification>(mBufferSize);
+ mBuffer = new ArrayDeque<>(mBufferSize);
}
public String toString() {
@@ -544,7 +544,7 @@ public class NotificationManagerService extends SystemService {
return sb.toString();
}
- public void record(StatusBarNotification nr) {
+ public void record(StatusBarNotification nr, int reason) {
if (mBuffer.size() == mBufferSize) {
mBuffer.removeFirst();
}
@@ -552,21 +552,24 @@ public class NotificationManagerService extends SystemService {
// We don't want to store the heavy bits of the notification in the archive,
// but other clients in the system process might be using the object, so we
// store a (lightened) copy.
- mBuffer.addLast(nr.cloneLight());
+ mBuffer.addLast(new Pair<>(nr.cloneLight(), reason));
}
- public Iterator<StatusBarNotification> descendingIterator() {
+ public Iterator<Pair<StatusBarNotification, Integer>> descendingIterator() {
return mBuffer.descendingIterator();
}
- public StatusBarNotification[] getArray(int count) {
+ public StatusBarNotification[] getArray(int count, boolean includeSnoozed) {
if (count == 0) count = mBufferSize;
final StatusBarNotification[] a
= new StatusBarNotification[Math.min(count, mBuffer.size())];
- Iterator<StatusBarNotification> iter = descendingIterator();
+ Iterator<Pair<StatusBarNotification, Integer>> iter = descendingIterator();
int i=0;
while (iter.hasNext() && i < count) {
- a[i++] = iter.next();
+ Pair<StatusBarNotification, Integer> pair = iter.next();
+ if (pair.second != REASON_SNOOZED || includeSnoozed) {
+ a[i++] = pair.first;
+ }
}
return a;
}
@@ -3638,7 +3641,8 @@ public class NotificationManagerService extends SystemService {
*/
@Override
@RequiresPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
- public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count) {
+ public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count,
+ boolean includeSnoozed) {
// enforce() will ensure the calling uid has the correct permission
getContext().enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NOTIFICATIONS,
@@ -3651,7 +3655,7 @@ public class NotificationManagerService extends SystemService {
if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg)
== AppOpsManager.MODE_ALLOWED) {
synchronized (mArchive) {
- tmp = mArchive.getArray(count);
+ tmp = mArchive.getArray(count, includeSnoozed);
}
}
return tmp;
@@ -5199,10 +5203,10 @@ public class NotificationManagerService extends SystemService {
pw.println(" mMaxPackageEnqueueRate=" + mMaxPackageEnqueueRate);
}
pw.println(" mArchive=" + mArchive.toString());
- Iterator<StatusBarNotification> iter = mArchive.descendingIterator();
+ Iterator<Pair<StatusBarNotification, Integer>> iter = mArchive.descendingIterator();
int j=0;
while (iter.hasNext()) {
- final StatusBarNotification sbn = iter.next();
+ final StatusBarNotification sbn = iter.next().first;
if (filter != null && !filter.matches(sbn)) continue;
pw.println(" " + sbn);
if (++j >= 5) {
@@ -7573,7 +7577,7 @@ public class NotificationManagerService extends SystemService {
}
// Save it for users of getHistoricalNotifications()
- mArchive.record(r.getSbn());
+ mArchive.record(r.getSbn(), reason);
final long now = System.currentTimeMillis();
final LogMaker logMaker = r.getItemLogMaker()