Sort VICs to the top of the conversation section

Test: atest
Fixes: 149486189
Change-Id: Ic5fe4c6d7d9c910300b4b16cb664ea84c3b2d13a
This commit is contained in:
Julia Reynolds
2020-02-18 13:30:03 -05:00
parent 03bced0a1f
commit dc07d049f6
3 changed files with 54 additions and 0 deletions

View File

@@ -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)
}

View File

@@ -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
}

View File

@@ -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()