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

Commit 0e020e5c authored by Steve Elliott's avatar Steve Elliott Committed by Android (Google) Code Review
Browse files

Merge "Construct ActiveNotifs from representative entries" into main

parents 873ad63a 96cc5e10
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()
    }