Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aafbf457 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 27df8ca3 f3126140
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -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) {
                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)
        }
    }
+31 −0
Original line number Diff line number Diff line
@@ -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