diff options
3 files changed, 16 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags index 694e851ef364..a2273419ab76 100644 --- a/services/core/java/com/android/server/EventLogTags.logtags +++ b/services/core/java/com/android/server/EventLogTags.logtags @@ -72,7 +72,7 @@ option java_package com.android.server # when a notification action button has been clicked 27521 notification_action_clicked (key|3),(action_index|1) # when a notification has been canceled -27530 notification_canceled (key|3),(reason|1) +27530 notification_canceled (key|3),(reason|1),(lifespan|1) # --------------------------- # Watchdog.java diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index b6f8e9886304..82da9239a49a 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2663,7 +2663,8 @@ public class NotificationManagerService extends SystemService { // Save it for users of getHistoricalNotifications() mArchive.record(r.sbn); - EventLogTags.writeNotificationCanceled(canceledKey, reason); + int lifespan = (int) (System.currentTimeMillis() - r.getCreationTimeMs()); + EventLogTags.writeNotificationCanceled(canceledKey, reason, lifespan); } /** diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index 39fd9ab54cfa..5569a09d13df 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -62,6 +62,9 @@ public final class NotificationRecord { // The timestamp used for ranking. private long mRankingTimeMs; + // The first post time, stable across updates. + private long mCreationTimeMs; + // Is this record an update of an old record? public boolean isUpdate; private int mPackagePriority; @@ -77,6 +80,7 @@ public final class NotificationRecord { this.score = score; mOriginalFlags = sbn.getNotification().flags; mRankingTimeMs = calculateRankingTimeMs(0L); + mCreationTimeMs = sbn.getPostTime(); } // copy any notes that the ranking system may have made before the update @@ -87,6 +91,7 @@ public final class NotificationRecord { mPackageVisibility = previous.mPackageVisibility; mIntercept = previous.mIntercept; mRankingTimeMs = calculateRankingTimeMs(previous.getRankingTimeMs()); + mCreationTimeMs = previous.mCreationTimeMs; // Don't copy mGlobalSortKey, recompute it. } @@ -167,6 +172,7 @@ public final class NotificationRecord { pw.println(prefix + " mIntercept=" + mIntercept); pw.println(prefix + " mGlobalSortKey=" + mGlobalSortKey); pw.println(prefix + " mRankingTimeMs=" + mRankingTimeMs); + pw.println(prefix + " mCreationTimeMs=" + mCreationTimeMs); } @@ -263,6 +269,13 @@ public final class NotificationRecord { } /** + * Returns the timestamp of the first post, ignoring updates. + */ + public long getCreationTimeMs() { + return mCreationTimeMs; + } + + /** * @param previousRankingTimeMs for updated notifications, {@link #getRankingTimeMs()} * of the previous notification record, 0 otherwise */ |