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

Commit a8cbe9c2 authored by Sherry Zhou's avatar Sherry Zhou Committed by Android (Google) Code Review
Browse files

Merge "Fix shape effects not react to media player" into main

parents ad7c2ae6 a68e4349
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.systemui.keyguard.ui.viewmodel.keyguardRootViewModel
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.domain.pipeline.legacyMediaDataManagerImpl
import com.android.systemui.res.R
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
@@ -80,6 +81,7 @@ import com.android.systemui.window.ui.viewmodel.fakeBouncerTransitions
import com.google.common.collect.Range
import com.google.common.truth.Truth.assertThat
import kotlin.test.assertIs
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.TestScope
@@ -1536,6 +1538,33 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
            assertThat(stackAbsoluteBottom).isEqualTo(150F)
        }

    @OptIn(ExperimentalCoroutinesApi::class)
    @Test
    @DisableSceneContainer
    fun notificationAbsoluteBottom_onlyMediaInNotifications() =
        testScope.runTest {
            val notificationCount = 0
            val calculateSpace = { _: Float, _: Boolean -> notificationCount }
            val mediaHeight = 100F
            val calculateHeight = { _: Int -> mediaHeight }
            whenever(kosmos.legacyMediaDataManagerImpl.hasActiveMedia()).thenReturn(true)
            val stackAbsoluteBottom by
                collectLastValue(
                    underTest.getNotificationStackAbsoluteBottomOnLockscreen(
                        calculateSpace,
                        calculateHeight,
                    )
                )
            showLockscreen()
            shadeTestUtil.setSplitShade(false)
            kosmos.activeNotificationListRepository.setActiveNotifs(notificationCount)
            keyguardInteractor.setNotificationContainerBounds(
                NotificationContainerBounds(top = 100F, bottom = 100F)
            )
            advanceTimeBy(50L)
            assertThat(stackAbsoluteBottom).isEqualTo(200F)
        }

    @Test
    fun blurRadius_emitsValues_fromPrimaryBouncerTransitions() =
        testScope.runTest {
+41 −3
Original line number Diff line number Diff line
@@ -74,6 +74,8 @@ import com.android.systemui.keyguard.ui.viewmodel.OffToLockscreenTransitionViewM
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.ViewStateAccessor
import com.android.systemui.media.controls.domain.pipeline.MediaDataManager
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Overlays
@@ -96,10 +98,12 @@ import com.android.systemui.util.kotlin.BooleanFlowOperators.not
import com.android.systemui.util.kotlin.FlowDumperImpl
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine
import com.android.systemui.util.kotlin.sample
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
@@ -181,6 +185,7 @@ constructor(
    private val largeScreenHeaderHelperLazy: Lazy<LargeScreenHeaderHelper>,
    unfoldTransitionInteractor: UnfoldTransitionInteractor,
    val activeNotificationsInteractor: ActiveNotificationsInteractor,
    private val mediaDataManager: MediaDataManager,
) : FlowDumperImpl(dumpManager) {

    /**
@@ -797,6 +802,38 @@ constructor(
            )
            .dumpWhileCollecting("translationX")

    val hasActiveMedia: Flow<Boolean>
        get() {
            SceneContainerFlag.assertInLegacyMode()
            return conflatedCallbackFlow {
                val listener =
                    object : MediaDataManager.Listener {
                        override fun onMediaDataLoaded(
                            key: String,
                            oldKey: String?,
                            data: MediaData,
                            immediately: Boolean,
                        ) {
                            trySend(mediaDataManager.hasActiveMedia())
                        }

                        override fun onMediaDataRemoved(key: String, userInitiated: Boolean) {
                            trySend(mediaDataManager.hasActiveMedia())
                        }

                        override fun onCurrentActiveMediaChanged(key: String?, data: MediaData?) {
                            trySend(mediaDataManager.hasActiveMedia())
                        }
                    }

                mediaDataManager.addListener(listener)

                trySend(mediaDataManager.hasActiveMedia())

                awaitClose { mediaDataManager.removeListener(listener) }
            }
        }

    private val availableHeight: Flow<Float> =
        if (SceneContainerFlag.isEnabled) {
                notificationStackAppearanceInteractor.constrainedAvailableSpace.map { it.toFloat() }
@@ -887,10 +924,11 @@ constructor(
        return combine(
                activeNotificationsInteractor.areAnyNotificationsPresent,
                isOnLockscreen,
                ::Pair,
                hasActiveMedia,
                ::Triple,
            )
            .flatMapLatest { (hasNotifications, isOnLockscreen) ->
                if (hasNotifications && isOnLockscreen) {
            .flatMapLatest { (hasNotifications, isOnLockscreen, hasActiveMedia) ->
                if ((hasNotifications || hasActiveMedia) && isOnLockscreen) {
                    combine(
                            getLockscreenDisplayConfig(calculateMaxNotifications).map {
                                (_, maxNotifications) ->
+3 −0
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ import com.android.systemui.keyguard.ui.viewmodel.primaryBouncerToLockscreenTran
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.media.controls.domain.pipeline.legacyMediaDataManagerImpl
import com.android.systemui.media.controls.domain.pipeline.mediaDataManager
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.domain.interactor.shadeModeInteractor
import com.android.systemui.shade.largeScreenHeaderHelper
@@ -118,5 +120,6 @@ val Kosmos.sharedNotificationContainerViewModel by Fixture {
        glanceableHubToAodTransitionViewModel = glanceableHubToAodTransitionViewModel,
        aodToGlanceableHubTransitionViewModel = aodToGlanceableHubTransitionViewModel,
        activeNotificationsInteractor = activeNotificationsInteractor,
        mediaDataManager = legacyMediaDataManagerImpl,
    )
}