Merge "Sticky huns dont get cleaned up properly" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-03-10 18:30:13 +00:00
committed by Android (Google) Code Review
2 changed files with 40 additions and 10 deletions

View File

@@ -72,10 +72,11 @@ class HeadsUpCoordinator @Inject constructor(
private var mEndLifetimeExtension: OnEndLifetimeExtensionCallback? = null
private lateinit var mNotifPipeline: NotifPipeline
private var mNow: Long = -1
// notifs we've extended the lifetime for
private val mNotifsExtendingLifetime = ArraySet<NotificationEntry>()
private val mPostedEntries = LinkedHashMap<String, PostedEntry>()
// notifs we've extended the lifetime for with cancellation callbacks
private val mNotifsExtendingLifetime = ArrayMap<NotificationEntry, Runnable?>()
override fun attach(pipeline: NotifPipeline) {
mNotifPipeline = pipeline
mHeadsUpManager.addListener(mOnHeadsUpChangedListener)
@@ -460,23 +461,20 @@ class HeadsUpCoordinator @Inject constructor(
}
if (isSticky(entry)) {
val removeAfterMillis = mHeadsUpManager.getEarliestRemovalTime(entry.key)
mExecutor.executeDelayed({
val canStillRemove = mHeadsUpManager.canRemoveImmediately(entry.key)
if (mNotifsExtendingLifetime.contains(entry) && canStillRemove) {
mHeadsUpManager.removeNotification(entry.key, /* releaseImmediately */ true)
}
mNotifsExtendingLifetime[entry] = mExecutor.executeDelayed({
mHeadsUpManager.removeNotification(entry.key, /* releaseImmediately */ true)
}, removeAfterMillis)
} else {
mExecutor.execute {
mHeadsUpManager.removeNotification(entry.key, /* releaseImmediately */ false)
}
mNotifsExtendingLifetime[entry] = null
}
mNotifsExtendingLifetime.add(entry)
return true
}
override fun cancelLifetimeExtension(entry: NotificationEntry) {
mNotifsExtendingLifetime.remove(entry)
mNotifsExtendingLifetime.remove(entry)?.run()
}
}
@@ -543,7 +541,8 @@ class HeadsUpCoordinator @Inject constructor(
mPostedEntries[entry.key]?.calculateShouldBeHeadsUpStrict ?: isAttemptingToShowHun(entry)
private fun endNotifLifetimeExtensionIfExtended(entry: NotificationEntry) {
if (mNotifsExtendingLifetime.remove(entry)) {
if (mNotifsExtendingLifetime.contains(entry)) {
mNotifsExtendingLifetime.remove(entry)?.run()
mEndLifetimeExtension?.onEndLifetimeExtension(mLifetimeExtender, entry)
}
}

View File

@@ -169,12 +169,42 @@ class HeadsUpCoordinatorTest : SysuiTestCase() {
verify(mHeadsUpManager, times(1)).removeNotification(anyString(), eq(true))
}
@Test
fun testCancelAndReAddStickyNotification() {
whenever(mHeadsUpManager.isSticky(anyString())).thenReturn(true)
addHUN(mEntry)
whenever(mHeadsUpManager.canRemoveImmediately(anyString())).thenReturn(false, true, false)
whenever(mHeadsUpManager.getEarliestRemovalTime(anyString())).thenReturn(1000L)
assertTrue(mNotifLifetimeExtender.maybeExtendLifetime(mEntry, 0))
addHUN(mEntry)
assertFalse(mNotifLifetimeExtender.maybeExtendLifetime(mEntry, 0))
mExecutor.advanceClockToLast()
mExecutor.runAllReady()
assertTrue(mNotifLifetimeExtender.maybeExtendLifetime(mEntry, 0))
verify(mHeadsUpManager, times(0)).removeNotification(anyString(), eq(false))
verify(mHeadsUpManager, times(0)).removeNotification(anyString(), eq(true))
}
@Test
fun hunNotRemovedWhenExtensionCancelled() {
whenever(mHeadsUpManager.isSticky(anyString())).thenReturn(true)
addHUN(mEntry)
whenever(mHeadsUpManager.canRemoveImmediately(anyString())).thenReturn(false)
whenever(mHeadsUpManager.getEarliestRemovalTime(anyString())).thenReturn(1000L)
assertTrue(mNotifLifetimeExtender.maybeExtendLifetime(mEntry, 0))
mNotifLifetimeExtender.cancelLifetimeExtension(mEntry)
mExecutor.advanceClockToLast()
mExecutor.runAllReady()
verify(mHeadsUpManager, times(0)).removeNotification(anyString(), any())
}
@Test
fun testCancelUpdatedStickyNotification() {
whenever(mHeadsUpManager.isSticky(anyString())).thenReturn(true)
addHUN(mEntry)
whenever(mHeadsUpManager.getEarliestRemovalTime(anyString())).thenReturn(1000L, 500L)
assertTrue(mNotifLifetimeExtender.maybeExtendLifetime(mEntry, 0))
addHUN(mEntry)
mExecutor.advanceClockToLast()
mExecutor.runAllReady()
verify(mHeadsUpManager, times(0)).removeNotification(anyString(), eq(false))
@@ -305,6 +335,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() {
mHuns.add(entry)
whenever(mHeadsUpManager.topEntry).thenReturn(entry)
mOnHeadsUpChangedListener.onHeadsUpStateChanged(entry, true)
mNotifLifetimeExtender.cancelLifetimeExtension(entry)
}
@Test