summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Will Brockman <brockman@google.com> 2020-05-01 13:21:28 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-05-01 13:21:28 +0000
commitb36bf3d231e6c91df8d39c590a4de1cd08edd636 (patch)
tree54f00a7135081b48144a7623a145facd9a822a3d
parent06028798b9e8ca1f42aa5791c6881a798ec68171 (diff)
parent8da8c8e768f7a4d6a739296ba4031d1192a7886d (diff)
Merge "Statsd logs: NotificationReported.group_instance_id." into rvc-dev
-rwxr-xr-xservices/core/java/com/android/server/notification/NotificationManagerService.java18
-rw-r--r--services/core/java/com/android/server/notification/NotificationRecordLogger.java5
-rw-r--r--services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java6
-rwxr-xr-xservices/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java22
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java9
5 files changed, 53 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 76acf57db408..d007b77c3203 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -235,6 +235,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.compat.IPlatformCompat;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
+import com.android.internal.logging.InstanceId;
import com.android.internal.logging.InstanceIdSequence;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
@@ -6490,7 +6491,7 @@ public class NotificationManagerService extends SystemService {
// Log event to statsd
mNotificationRecordLogger.maybeLogNotificationPosted(r, old, position,
- buzzBeepBlinkLoggingCode);
+ buzzBeepBlinkLoggingCode, getGroupInstanceId(n.getGroupKey()));
} finally {
int N = mEnqueuedNotifications.size();
for (int i = 0; i < N; i++) {
@@ -6506,6 +6507,21 @@ public class NotificationManagerService extends SystemService {
}
/**
+ *
+ */
+ @GuardedBy("mNotificationLock")
+ InstanceId getGroupInstanceId(String groupKey) {
+ if (groupKey == null) {
+ return null;
+ }
+ NotificationRecord group = mSummaryByGroupKey.get(groupKey);
+ if (group == null) {
+ return null;
+ }
+ return group.getSbn().getInstanceId();
+ }
+
+ /**
* If the notification differs enough visually, consider it a new interruptive notification.
*/
@GuardedBy("mNotificationLock")
diff --git a/services/core/java/com/android/server/notification/NotificationRecordLogger.java b/services/core/java/com/android/server/notification/NotificationRecordLogger.java
index eba57304124a..34e6ec18be88 100644
--- a/services/core/java/com/android/server/notification/NotificationRecordLogger.java
+++ b/services/core/java/com/android/server/notification/NotificationRecordLogger.java
@@ -27,6 +27,7 @@ import android.os.Bundle;
import android.service.notification.NotificationListenerService;
import android.service.notification.NotificationStats;
+import com.android.internal.logging.InstanceId;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
@@ -48,10 +49,12 @@ public interface NotificationRecordLogger {
* @param old The previous NotificationRecord. Null if there was no previous record.
* @param position The position at which this notification is ranked.
* @param buzzBeepBlink Logging code reflecting whether this notification alerted the user.
+ * @param groupId The instance Id of the group summary notification, or null.
*/
void maybeLogNotificationPosted(@Nullable NotificationRecord r,
@Nullable NotificationRecord old,
- int position, int buzzBeepBlink);
+ int position, int buzzBeepBlink,
+ InstanceId groupId);
/**
* Logs a notification cancel / dismiss event using UiEventReported (event ids from the
diff --git a/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java b/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java
index 494ff314a8aa..c6ec95a2e1d5 100644
--- a/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java
+++ b/services/core/java/com/android/server/notification/NotificationRecordLoggerImpl.java
@@ -16,6 +16,7 @@
package com.android.server.notification;
+import com.android.internal.logging.InstanceId;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLoggerImpl;
import com.android.internal.util.FrameworkStatsLog;
@@ -30,7 +31,8 @@ public class NotificationRecordLoggerImpl implements NotificationRecordLogger {
@Override
public void maybeLogNotificationPosted(NotificationRecord r, NotificationRecord old,
- int position, int buzzBeepBlink) {
+ int position, int buzzBeepBlink,
+ InstanceId groupId) {
NotificationRecordPair p = new NotificationRecordPair(r, old);
if (!p.shouldLogReported(buzzBeepBlink)) {
return;
@@ -43,7 +45,7 @@ public class NotificationRecordLoggerImpl implements NotificationRecordLogger {
/* int32 notification_id_hash = 5 */ p.getNotificationIdHash(),
/* int32 channel_id_hash = 6 */ p.getChannelIdHash(),
/* string group_id_hash = 7 */ p.getGroupIdHash(),
- /* int32 group_instance_id = 8 */ 0, // TODO generate and fill instance ids
+ /* int32 group_instance_id = 8 */ (groupId == null) ? 0 : groupId.getId(),
/* bool is_group_summary = 9 */ r.getSbn().getNotification().isGroupSummary(),
/* string category = 10 */ r.getSbn().getNotification().category,
/* int32 style = 11 */ p.getStyle(),
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index d5ecfeb55e95..e644f64cf307 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -1772,6 +1772,28 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
}
@Test
+ public void testGroupInstanceIds() throws Exception {
+ final NotificationRecord group1 = generateNotificationRecord(
+ mTestNotificationChannel, 1, "group1", true);
+ mBinderService.enqueueNotificationWithTag(PKG, PKG, "testFindGroupNotificationsLocked",
+ group1.getSbn().getId(), group1.getSbn().getNotification(),
+ group1.getSbn().getUserId());
+ waitForIdle();
+
+ // same group, child, should be returned
+ final NotificationRecord group1Child = generateNotificationRecord(
+ mTestNotificationChannel, 2, "group1", false);
+ mBinderService.enqueueNotificationWithTag(PKG, PKG, "testFindGroupNotificationsLocked",
+ group1Child.getSbn().getId(),
+ group1Child.getSbn().getNotification(), group1Child.getSbn().getUserId());
+ waitForIdle();
+
+ assertEquals(2, mNotificationRecordLogger.numCalls());
+ assertEquals(mNotificationRecordLogger.get(0).getInstanceId(),
+ mNotificationRecordLogger.get(1).groupInstanceId.getId());
+ }
+
+ @Test
public void testFindGroupNotificationsLocked() throws Exception {
// make sure the same notification can be found in both lists and returned
final NotificationRecord group1 = generateNotificationRecord(
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java
index 6b18cc64c5fb..64fd19e69009 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordLoggerFake.java
@@ -16,6 +16,7 @@
package com.android.server.notification;
+import com.android.internal.logging.InstanceId;
import com.android.internal.logging.UiEventLogger;
import java.util.ArrayList;
@@ -32,14 +33,16 @@ class NotificationRecordLoggerFake implements NotificationRecordLogger {
static final int INVALID = -1;
public int position = INVALID, buzzBeepBlink = INVALID;
public boolean wasLogged;
+ public InstanceId groupInstanceId;
CallRecord(NotificationRecord r, NotificationRecord old, int position,
- int buzzBeepBlink) {
+ int buzzBeepBlink, InstanceId groupId) {
super(r, old);
this.position = position;
this.buzzBeepBlink = buzzBeepBlink;
wasLogged = shouldLogReported(buzzBeepBlink);
event = wasLogged ? NotificationReportedEvent.fromRecordPair(this) : null;
+ groupInstanceId = groupId;
}
CallRecord(NotificationRecord r, UiEventLogger.UiEventEnum event) {
@@ -67,8 +70,8 @@ class NotificationRecordLoggerFake implements NotificationRecordLogger {
@Override
public void maybeLogNotificationPosted(NotificationRecord r, NotificationRecord old,
- int position, int buzzBeepBlink) {
- mCalls.add(new CallRecord(r, old, position, buzzBeepBlink));
+ int position, int buzzBeepBlink, InstanceId groupId) {
+ mCalls.add(new CallRecord(r, old, position, buzzBeepBlink, groupId));
}
@Override