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

Commit 96cc5e10 authored by Steve Elliott's avatar Steve Elliott
Browse files

Construct ActiveNotifs from representative entries

Flag: ACONFIG com.android.systemui.notifications_icon_container_refactor
DEVELOPMENT
Bug: 278765923
Test: atest SystemUITests

Change-Id: I0ad0b523ab096e531fbd88230eba126b9f3365ad
parent fc8397a6
Loading
Loading
Loading
Loading
+17 −15
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.systemui.statusbar.notification.domain.interactor

import android.graphics.drawable.Icon
import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository
import com.android.systemui.statusbar.notification.shared.ActiveNotificationModel
@@ -44,28 +45,29 @@ constructor(
     */
    fun setRenderedList(entries: List<ListEntry>) {
        repository.activeNotifications.update { existingModels ->
            entries.associateBy(
            entries
                .asSequence()
                .mapNotNull { it.representativeEntry }
                .associateBy(
                    keySelector = { it.key },
                    valueTransform = { it.toModel(existingModels) },
                )
        }
    }

    private fun ListEntry.toModel(
        existingModels: ModelStore,
    ): ActiveNotificationModel =
    private fun NotificationEntry.toModel(existingModels: ModelStore): ActiveNotificationModel =
        existingModels.createOrReuse(
            key = key,
            groupKey = representativeEntry?.sbn?.groupKey,
            groupKey = sbn.groupKey,
            isAmbient = sectionStyleProvider.isMinimized(this),
            isRowDismissed = representativeEntry?.isRowDismissed == true,
            isRowDismissed = isRowDismissed,
            isSilent = sectionStyleProvider.isSilent(this),
            isLastMessageFromReply = representativeEntry?.isLastMessageFromReply == true,
            isSuppressedFromStatusBar = representativeEntry?.shouldSuppressStatusBar() == true,
            isPulsing = representativeEntry?.showingPulsing() == true,
            aodIcon = representativeEntry?.icons?.aodIcon?.sourceIcon,
            shelfIcon = representativeEntry?.icons?.shelfIcon?.sourceIcon,
            statusBarIcon = representativeEntry?.icons?.statusBarIcon?.sourceIcon,
            isLastMessageFromReply = isLastMessageFromReply,
            isSuppressedFromStatusBar = shouldSuppressStatusBar(),
            isPulsing = showingPulsing(),
            aodIcon = icons.aodIcon?.sourceIcon,
            shelfIcon = icons.shelfIcon?.sourceIcon,
            statusBarIcon = icons.statusBarIcon?.sourceIcon,
        )

    private fun ModelStore.createOrReuse(
+12 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository
import com.android.systemui.statusbar.notification.shared.byKey
import com.android.systemui.util.mockito.mock
@@ -42,7 +43,17 @@ class RenderNotificationsListInteractorTest : SysuiTestCase() {
    fun setRenderedList_preservesOrdering() = runTest {
        val notifs by collectLastValue(notifsInteractor.notifications)
        val keys = (1..50).shuffled().map { "$it" }
        val entries = keys.map { mock<ListEntry> { whenever(key).thenReturn(it) } }
        val entries =
            keys.map {
                mock<ListEntry> {
                    val mockRep = mock<NotificationEntry> {
                        whenever(key).thenReturn(it)
                        whenever(sbn).thenReturn(mock())
                        whenever(icons).thenReturn(mock())
                    }
                    whenever(representativeEntry).thenReturn(mockRep)
                }
            }
        underTest.setRenderedList(entries)
        assertThat(notifs).comparingElementsUsing(byKey).containsExactlyElementsIn(keys).inOrder()
    }