diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt index 2981252f148c7..e612c07ac18a7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManager.kt @@ -33,6 +33,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationSectionsMan import com.android.systemui.statusbar.phone.NotificationGroupManager import com.android.systemui.statusbar.policy.HeadsUpManager import dagger.Lazy +import java.util.Comparator import java.util.Objects import javax.inject.Inject @@ -73,6 +74,9 @@ open class NotificationRankingManager @Inject constructor( val aIsPeople = a.isPeopleNotification() val bIsPeople = b.isPeopleNotification() + val aIsImportantPeople = a.isImportantPeopleNotification() + val bIsImportantPeople = b.isImportantPeopleNotification() + val aMedia = isImportantMedia(a) val bMedia = isImportantMedia(b) @@ -87,6 +91,8 @@ open class NotificationRankingManager @Inject constructor( when { usePeopleFiltering && aIsPeople != bIsPeople -> if (aIsPeople) -1 else 1 + usePeopleFiltering && aIsImportantPeople != bIsImportantPeople -> + if (aIsImportantPeople) -1 else 1 aHeadsUp != bHeadsUp -> if (aHeadsUp) -1 else 1 // Provide consistent ranking with headsUpManager aHeadsUp -> headsUpManager.compare(a, b) @@ -192,6 +198,9 @@ open class NotificationRankingManager @Inject constructor( private fun NotificationEntry.isPeopleNotification() = peopleNotificationIdentifier.isPeopleNotification(sbn, ranking) + private fun NotificationEntry.isImportantPeopleNotification() = + peopleNotificationIdentifier.isImportantPeopleNotification(sbn, ranking) + private fun NotificationEntry.isHighPriority() = highPriorityProvider.isHighPriority(this) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt index 4672de046c49a..e15fa2eac4fd5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt @@ -23,6 +23,7 @@ import javax.inject.Singleton interface PeopleNotificationIdentifier { fun isPeopleNotification(sbn: StatusBarNotification, ranking: Ranking): Boolean + fun isImportantPeopleNotification(sbn: StatusBarNotification, ranking: Ranking): Boolean } @Singleton @@ -32,4 +33,7 @@ class PeopleNotificationIdentifierImpl @Inject constructor( override fun isPeopleNotification(sbn: StatusBarNotification, ranking: Ranking) = ranking.isConversation || personExtractor.isPersonNotification(sbn) + + override fun isImportantPeopleNotification(sbn: StatusBarNotification, ranking: Ranking) = + isPeopleNotification(sbn, ranking) && ranking.channel.isImportantConversation } \ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt index c6b496dd82155..8e330c6f5049c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationRankingManagerTest.kt @@ -144,6 +144,47 @@ class NotificationRankingManagerTest : SysuiTestCase() { rankingManager.updateRanking(null, listOf(a, b), "test")) } + @Test + fun testSort_importantPeople() { + val aN = Notification.Builder(mContext, "test") + .setStyle(Notification.MessagingStyle("")) + .build() + val aC = NotificationChannel("test", "", IMPORTANCE_DEFAULT) + aC.setConversationId("parent", "convo") + val a = NotificationEntryBuilder() + .setImportance(IMPORTANCE_HIGH) + .setPkg("pkg") + .setOpPkg("pkg") + .setTag("tag") + .setNotification(aN) + .setChannel(aC) + .setUser(mContext.getUser()) + .setOverrideGroupKey("") + .build() + + val bN = Notification.Builder(mContext, "test") + .setStyle(Notification.MessagingStyle("")) + .build() + val bC = NotificationChannel("test", "", IMPORTANCE_DEFAULT) + bC.setConversationId("parent", "convo") + bC.setImportantConversation(true) + val b = NotificationEntryBuilder() + .setImportance(IMPORTANCE_HIGH) + .setPkg("pkg2") + .setOpPkg("pkg2") + .setTag("tag") + .setNotification(bN) + .setChannel(bC) + .setUser(mContext.getUser()) + .setOverrideGroupKey("") + .build() + + + assertEquals( + listOf(b, a), + rankingManager.updateRanking(null, listOf(a, b), "test")) + } + @Test fun testSort_properlySetsAlertingBucket() { val notif = Notification.Builder(mContext, "test") .build()