Merge "Pipe through attributeId to notification app-op" into rvc-dev
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 948546b..f590eb9 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -123,10 +123,14 @@
// INotificationListener method.
@UnsupportedAppUsage
StatusBarNotification[] getActiveNotifications(String callingPkg);
+ StatusBarNotification[] getActiveNotificationsWithAttribution(String callingPkg,
+ String callingAttributionTag);
@UnsupportedAppUsage
StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count, boolean includeSnoozed);
+ StatusBarNotification[] getHistoricalNotificationsWithAttribution(String callingPkg,
+ String callingAttributionTag, int count, boolean includeSnoozed);
- NotificationHistory getNotificationHistory(String callingPkg);
+ NotificationHistory getNotificationHistory(String callingPkg, String callingAttributionTag);
void registerListener(in INotificationListener listener, in ComponentName component, int userid);
void unregisterListener(in INotificationListener listener, int userid);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 788d022..60c3875 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -3638,13 +3638,23 @@
}
/**
+ * @deprecated Use {@link #getActiveNotificationsWithAttribution(String, String)} instead.
+ */
+ @Deprecated
+ @Override
+ public StatusBarNotification[] getActiveNotifications(String callingPkg) {
+ return getActiveNotificationsWithAttribution(callingPkg, null);
+ }
+
+ /**
* System-only API for getting a list of current (i.e. not cleared) notifications.
*
* Requires ACCESS_NOTIFICATIONS which is signature|system.
* @returns A list of all the notifications, in natural order.
*/
@Override
- public StatusBarNotification[] getActiveNotifications(String callingPkg) {
+ public StatusBarNotification[] getActiveNotificationsWithAttribution(String callingPkg,
+ String callingAttributionTag) {
// enforce() will ensure the calling uid has the correct permission
getContext().enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NOTIFICATIONS,
@@ -3654,7 +3664,8 @@
int uid = Binder.getCallingUid();
// noteOp will check to make sure the callingPkg matches the uid
- if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg)
+ if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg,
+ callingAttributionTag, null)
== AppOpsManager.MODE_ALLOWED) {
synchronized (mNotificationLock) {
tmp = new StatusBarNotification[mNotificationList.size()];
@@ -3736,12 +3747,24 @@
}
/**
- * System-only API for getting a list of recent (cleared, no longer shown) notifications.
+ * @deprecated Use {@link #getHistoricalNotificationsWithAttribution} instead.
*/
+ @Deprecated
@Override
@RequiresPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count,
boolean includeSnoozed) {
+ return getHistoricalNotificationsWithAttribution(callingPkg, null, count,
+ includeSnoozed);
+ }
+
+ /**
+ * System-only API for getting a list of recent (cleared, no longer shown) notifications.
+ */
+ @Override
+ @RequiresPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
+ public StatusBarNotification[] getHistoricalNotificationsWithAttribution(String callingPkg,
+ String callingAttributionTag, int count, boolean includeSnoozed) {
// enforce() will ensure the calling uid has the correct permission
getContext().enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NOTIFICATIONS,
@@ -3751,7 +3774,8 @@
int uid = Binder.getCallingUid();
// noteOp will check to make sure the callingPkg matches the uid
- if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg)
+ if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg,
+ callingAttributionTag, null)
== AppOpsManager.MODE_ALLOWED) {
synchronized (mArchive) {
tmp = mArchive.getArray(count, includeSnoozed);
@@ -3767,7 +3791,8 @@
@Override
@WorkerThread
@RequiresPermission(android.Manifest.permission.ACCESS_NOTIFICATIONS)
- public NotificationHistory getNotificationHistory(String callingPkg) {
+ public NotificationHistory getNotificationHistory(String callingPkg,
+ String callingAttributionTag) {
// enforce() will ensure the calling uid has the correct permission
getContext().enforceCallingOrSelfPermission(
android.Manifest.permission.ACCESS_NOTIFICATIONS,
@@ -3775,7 +3800,8 @@
int uid = Binder.getCallingUid();
// noteOp will check to make sure the callingPkg matches the uid
- if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg)
+ if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg,
+ callingAttributionTag, null)
== AppOpsManager.MODE_ALLOWED) {
IntArray currentUserIds = mUserProfiles.getCurrentProfileIds();
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "notifHistoryReadHistory");