diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt index 2d5c331e2071f..1c66db783a34d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt @@ -18,11 +18,13 @@ package com.android.systemui.statusbar.notification.collection.coordinator import android.service.notification.NotificationListenerService import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener import com.android.systemui.statusbar.notification.collection.render.NotifShadeEventSource +import java.util.concurrent.Executor import javax.inject.Inject /** @@ -32,6 +34,7 @@ import javax.inject.Inject // TODO(b/204468557): Move to @CoordinatorScope @SysUISingleton class ShadeEventCoordinator @Inject internal constructor( + @Main private val mMainExecutor: Executor, private val mLogger: ShadeEventCoordinatorLogger ) : Coordinator, NotifShadeEventSource { private var mNotifRemovedByUserCallback: Runnable? = null @@ -67,11 +70,13 @@ class ShadeEventCoordinator @Inject internal constructor( private fun onBeforeRenderList(entries: List) { if (mEntryRemoved && entries.isEmpty()) { mLogger.logShadeEmptied() - mShadeEmptiedCallback?.run() + // TODO(b/206023518): This was bad. Do not copy this. + mShadeEmptiedCallback?.let { mMainExecutor.execute(it) } } if (mEntryRemoved && mEntryRemovedByUser) { mLogger.logNotifRemovedByUser() - mNotifRemovedByUserCallback?.run() + // TODO(b/206023518): This was bad. Do not copy this. + mNotifRemovedByUserCallback?.let { mMainExecutor.execute(it) } } mEntryRemoved = false mEntryRemovedByUser = false diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinatorTest.kt index 452af21c09d76..5793364a1ef5f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinatorTest.kt @@ -31,9 +31,12 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock +import org.mockito.Mockito.any import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations.initMocks +import java.util.concurrent.Executor +import org.mockito.Mockito.`when` as whenever @SmallTest @RunWith(AndroidTestingRunner::class) @@ -48,13 +51,18 @@ class ShadeEventCoordinatorTest : SysuiTestCase() { @Mock private lateinit var pipeline: NotifPipeline @Mock private lateinit var logger: ShadeEventCoordinatorLogger + @Mock private lateinit var executor: Executor @Mock private lateinit var notifRemovedByUserCallback: Runnable @Mock private lateinit var shadeEmptiedCallback: Runnable @Before fun setUp() { initMocks(this) - coordinator = ShadeEventCoordinator(logger) + whenever(executor.execute(any())).then { + (it.arguments[0] as Runnable).run() + true + } + coordinator = ShadeEventCoordinator(executor, logger) coordinator.attach(pipeline) notifCollectionListener = withArgCaptor { verify(pipeline).addCollectionListener(capture())