On notification update, take the newest value of shouldHeadsUp

When addressing only notification updates, this is a very small edge case that will only occur if multiple notification posts/updates occur in the same build cycle, *and* the value of shouldHeadsUp changes.

This change is also being made in preparation for updates to handle onRankingApplied, which may add additional cases where an update occurs to the value of shouldHeadsUp.

Bug: 248325248
Test: HeadsUpCoordinatorTest
Change-Id: I274c5f65d92fc151bacaacb21726445f1bf7fecb
This commit is contained in:
Yuri Lin
2022-10-03 16:29:48 -04:00
parent f5170368b5
commit 0d3b37cdce
2 changed files with 35 additions and 1 deletions

View File

@@ -393,7 +393,7 @@ class HeadsUpCoordinator @Inject constructor(
val posted = mPostedEntries.compute(entry.key) { _, value ->
value?.also { update ->
update.wasUpdated = true
update.shouldHeadsUpEver = update.shouldHeadsUpEver || shouldHeadsUpEver
update.shouldHeadsUpEver = shouldHeadsUpEver
update.shouldHeadsUpAgain = update.shouldHeadsUpAgain || shouldHeadsUpAgain
update.isAlerting = isAlerting
update.isBinding = isBinding

View File

@@ -336,6 +336,40 @@ class HeadsUpCoordinatorTest : SysuiTestCase() {
verify(mHeadsUpManager, never()).showNotification(mEntry)
}
@Test
fun testOnEntryUpdated_toAlert() {
// GIVEN that an entry is posted that should not heads up
setShouldHeadsUp(mEntry, false)
mCollectionListener.onEntryAdded(mEntry)
// WHEN it's updated to heads up
setShouldHeadsUp(mEntry)
mCollectionListener.onEntryUpdated(mEntry)
mBeforeTransformGroupsListener.onBeforeTransformGroups(listOf(mEntry))
mBeforeFinalizeFilterListener.onBeforeFinalizeFilter(listOf(mEntry))
// THEN the notification alerts
finishBind(mEntry)
verify(mHeadsUpManager).showNotification(mEntry)
}
@Test
fun testOnEntryUpdated_toNotAlert() {
// GIVEN that an entry is posted that should heads up
setShouldHeadsUp(mEntry)
mCollectionListener.onEntryAdded(mEntry)
// WHEN it's updated to not heads up
setShouldHeadsUp(mEntry, false)
mCollectionListener.onEntryUpdated(mEntry)
mBeforeTransformGroupsListener.onBeforeTransformGroups(listOf(mEntry))
mBeforeFinalizeFilterListener.onBeforeFinalizeFilter(listOf(mEntry))
// THEN the notification is never bound or shown
verify(mHeadsUpViewBinder, never()).bindHeadsUpView(any(), any())
verify(mHeadsUpManager, never()).showNotification(any())
}
@Test
fun testOnEntryRemovedRemovesHeadsUpNotification() {
// GIVEN the current HUN is mEntry