From c6c639cb0641248f245538d4164bea6d4e0c2fc3 Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Fri, 5 May 2017 19:49:22 -0700 Subject: [PATCH] Fixed the ordering of colorized media notifications Previously colorized media notifications were downranked if they were not foreground services. This could lead to bugs where colorized notifications were ranked below non-colorized ones. Test: runtest systemui-notification Bug: 38049452 Change-Id: I8652de55acff0b03fa337478ad7ad463ecc4e82d --- .../notification/NotificationComparator.java | 9 +++------ .../notification/NotificationComparatorTest.java | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationComparator.java b/services/core/java/com/android/server/notification/NotificationComparator.java index 63647ffa2193e..a239c38646d86 100644 --- a/services/core/java/com/android/server/notification/NotificationComparator.java +++ b/services/core/java/com/android/server/notification/NotificationComparator.java @@ -48,8 +48,8 @@ public class NotificationComparator @Override public int compare(NotificationRecord left, NotificationRecord right) { // first all colorized notifications - boolean leftImportantColorized = isImportantOngoingColorized(left); - boolean rightImportantColorized = isImportantOngoingColorized(right); + boolean leftImportantColorized = isImportantColorized(left); + boolean rightImportantColorized = isImportantColorized(right); if (leftImportantColorized != rightImportantColorized) { return -1 * Boolean.compare(leftImportantColorized, rightImportantColorized); @@ -110,10 +110,7 @@ public class NotificationComparator return -1 * Long.compare(left.getRankingTimeMs(), right.getRankingTimeMs()); } - private boolean isImportantOngoingColorized(NotificationRecord record) { - if (!isOngoing(record)) { - return false; - } + private boolean isImportantColorized(NotificationRecord record) { if (record.getImportance() < NotificationManager.IMPORTANCE_LOW) { return false; } diff --git a/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java b/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java index 84945ab5acd39..dde08fc12a509 100644 --- a/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java +++ b/services/tests/notification/src/com/android/server/notification/NotificationComparatorTest.java @@ -76,7 +76,7 @@ public class NotificationComparatorTest { private NotificationRecord mRecordUrgent; private NotificationRecord mRecordCheater; private NotificationRecord mRecordCheaterColorized; - + private NotificationRecord mNoMediaSessionMedia; @Before public void setUp() { @@ -124,7 +124,6 @@ public class NotificationComparatorTest { Notification n3 = new Notification.Builder(mContext, TEST_CHANNEL_ID) .setStyle(new Notification.MediaStyle() .setMediaSession(new MediaSession.Token(null))) - .setFlag(Notification.FLAG_FOREGROUND_SERVICE, true) .build(); mRecordDefaultMedia = new NotificationRecord(mContext, new StatusBarNotification(pkg2, pkg2, 1, "media", uid2, uid2, n3, new UserHandle(userId), @@ -192,6 +191,16 @@ public class NotificationComparatorTest { pkg2, 1, "cheater", uid2, uid2, n11, new UserHandle(userId), "", 9258), getDefaultChannel()); mRecordCheaterColorized.setUserImportance(NotificationManager.IMPORTANCE_LOW); + + Notification n12 = new Notification.Builder(mContext, TEST_CHANNEL_ID) + .setCategory(Notification.CATEGORY_MESSAGE) + .setColorized(true) + .setStyle(new Notification.MediaStyle()) + .build(); + mNoMediaSessionMedia = new NotificationRecord(mContext, new StatusBarNotification( + pkg2, pkg2, 1, "cheater", uid2, uid2, n12, new UserHandle(userId), + "", 9258), getDefaultChannel()); + mNoMediaSessionMedia.setUserImportance(NotificationManager.IMPORTANCE_DEFAULT); } @Test @@ -205,6 +214,7 @@ public class NotificationComparatorTest { expected.add(mRecordContact); expected.add(mRecordEmail); expected.add(mRecordUrgent); + expected.add(mNoMediaSessionMedia); expected.add(mRecordCheater); expected.add(mRecordCheaterColorized); expected.add(mRecordMinCall);