summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Studer <chstuder@google.com>2014-06-06 16:09:15 +0200
committerChristoph Studer <chstuder@google.com>2014-06-06 17:46:04 +0200
commit52b7a5a5973c05fe59b751b82ee357fdfc1c5ef7 (patch)
tree1301e4a0feac45577444e6725c780099b67cd772
parent7012db741c508396ec42e731b6f77c372e0a9ed7 (diff)
downloadframeworks_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.java2
-rw-r--r--services/core/java/com/android/server/notification/NotificationRecord.java31
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();
+ }
+
}