diff options
author | Christoph Studer <chstuder@google.com> | 2014-06-06 16:09:15 +0200 |
---|---|---|
committer | Christoph Studer <chstuder@google.com> | 2014-06-06 17:46:04 +0200 |
commit | 52b7a5a5973c05fe59b751b82ee357fdfc1c5ef7 (patch) | |
tree | 1301e4a0feac45577444e6725c780099b67cd772 | |
parent | 7012db741c508396ec42e731b6f77c372e0a9ed7 (diff) | |
download | frameworks_base-52b7a5a5973c05fe59b751b82ee357fdfc1c5ef7.zip frameworks_base-52b7a5a5973c05fe59b751b82ee357fdfc1c5ef7.tar.gz frameworks_base-52b7a5a5973c05fe59b751b82ee357fdfc1c5ef7.tar.bz2 |
NoMan: Rank by 'when' instead of 'postTime'
Bug: 15461215
Change-Id: If17e2ff0a6e36ab45da07c2d883fcf8dc8025dc2
-rw-r--r-- | services/core/java/com/android/server/notification/NotificationComparator.java | 2 | ||||
-rw-r--r-- | services/core/java/com/android/server/notification/NotificationRecord.java | 31 |
2 files changed, 32 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/notification/NotificationComparator.java b/services/core/java/com/android/server/notification/NotificationComparator.java index b30baea..6cd4019 100644 --- a/services/core/java/com/android/server/notification/NotificationComparator.java +++ b/services/core/java/com/android/server/notification/NotificationComparator.java @@ -41,6 +41,6 @@ public class NotificationComparator return -1 * Float.compare(leftPeple, rightPeople); } // then break ties by time, most recent first - return -1 * Long.compare(lhs.sbn.getPostTime(), rhs.sbn.getPostTime()); + return -1 * Long.compare(lhs.getRankingTimeMs(), rhs.getRankingTimeMs()); } } diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index 30d4fec..13fb986 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -54,6 +54,9 @@ public final class NotificationRecord { // InterceptedNotifications needs to know if this has been previously evaluated. private boolean mTouchedByZen; + // The timestamp used for ranking. + private long mRankingTimeMs; + // Is this record an update of an old record? public boolean isUpdate; @@ -61,6 +64,7 @@ public final class NotificationRecord { { this.sbn = sbn; this.score = score; + mRankingTimeMs = calculateRankingTimeMs(0L); } // copy any notes that the ranking system may have made before the update @@ -69,6 +73,7 @@ public final class NotificationRecord { mRecentlyIntrusive = previous.mRecentlyIntrusive; mTouchedByZen = previous.mTouchedByZen; mIntercept = previous.mIntercept; + mRankingTimeMs = calculateRankingTimeMs(previous.getRankingTimeMs()); } public Notification getNotification() { return sbn.getNotification(); } @@ -139,6 +144,7 @@ public final class NotificationRecord { pw.println(prefix + " mContactAffinity=" + mContactAffinity); pw.println(prefix + " mRecentlyIntrusive=" + mRecentlyIntrusive); pw.println(prefix + " mIntercept=" + mIntercept); + pw.println(prefix + " mRankingTimeMs=" + mRankingTimeMs); } @@ -206,4 +212,29 @@ public final class NotificationRecord { mTouchedByZen = true; } + /** + * Returns the timestamp to use for time-based sorting in the ranker. + */ + public long getRankingTimeMs() { + return mRankingTimeMs; + } + + /** + * @param previousRankingTimeMs for updated notifications, {@link #getRankingTimeMs()} + * of the previous notification record, 0 otherwise + */ + private long calculateRankingTimeMs(long previousRankingTimeMs) { + Notification n = getNotification(); + // Take developer provided 'when', unless it's in the future. + if (n.when != 0 && n.when <= sbn.getPostTime()) { + return n.when; + } + // If we've ranked a previous instance with a timestamp, inherit it. This case is + // important in order to have ranking stability for updating notifications. + if (previousRankingTimeMs > 0) { + return previousRankingTimeMs; + } + return sbn.getPostTime(); + } + } |