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

Commit 0a46c828 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17114925

Change-Id: I8a8cb492657523fc8d0565176cc82394c190e3ca
parents 601864b7 aafbf457
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