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

Commit 9d18e08a authored by Chandru S's avatar Chandru S Committed by Android (Google) Code Review
Browse files

Merge "Reset blur radius to 0 whenever blur is not supported" into main

parents 018493c0 786ce073
Loading
Loading
Loading
Loading
+27 −1
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.testKosmos
import com.android.systemui.window.data.repository.fakeWindowRootViewBlurRepository
import com.android.systemui.window.data.repository.windowRootViewBlurRepository
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
@@ -34,7 +36,7 @@ import org.junit.runner.RunWith

@SmallTest
@RunWith(AndroidJUnit4::class)
@EnableFlags(Flags.FLAG_BOUNCER_UI_REVAMP)
@EnableFlags(Flags.FLAG_BOUNCER_UI_REVAMP, Flags.FLAG_GLANCEABLE_HUB_BLURRED_BACKGROUND)
class WindowRootViewModelTest : SysuiTestCase() {
    val kosmos = testKosmos()
    val testScope = kosmos.testScope
@@ -49,6 +51,7 @@ class WindowRootViewModelTest : SysuiTestCase() {
    @Test
    fun bouncerTransitionChangesWindowBlurRadius() =
        testScope.runTest {
            kosmos.fakeWindowRootViewBlurRepository.isBlurSupported.value = true
            val blurRadius by collectLastValue(underTest.blurRadius)
            val isBlurOpaque by collectLastValue(underTest.isBlurOpaque)
            runCurrent()
@@ -59,4 +62,27 @@ class WindowRootViewModelTest : SysuiTestCase() {
            assertThat(blurRadius).isEqualTo(30)
            assertThat(isBlurOpaque).isEqualTo(false)
        }

    @Test
    fun blurRadiusDoesNotChangeWhenBlurIsNotSupported() =
        testScope.runTest {
            kosmos.fakeWindowRootViewBlurRepository.isBlurSupported.value = false
            val blurRadius by collectLastValue(underTest.blurRadius)
            runCurrent()

            kosmos.fakeBouncerTransitions.first().windowBlurRadius.value = 30.0f
            runCurrent()

            assertThat(blurRadius).isEqualTo(0f)

            kosmos.fakeGlanceableHubTransitions.first().windowBlurRadius.value = 50.0f
            runCurrent()

            assertThat(blurRadius).isEqualTo(0f)

            kosmos.windowRootViewBlurRepository.blurRadius.value = 60
            runCurrent()

            assertThat(blurRadius).isEqualTo(0f)
        }
}
+21 −2
Original line number Diff line number Diff line
@@ -26,11 +26,14 @@ import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
@@ -38,6 +41,7 @@ import kotlinx.coroutines.flow.onEach
typealias BlurAppliedUiEvent = Int

/** View model for window root view. */
@OptIn(ExperimentalCoroutinesApi::class)
class WindowRootViewModel
@AssistedInject
constructor(
@@ -58,7 +62,7 @@ constructor(
            glanceableHubTransitions.map { it.windowBlurRadius.logIfPossible(it.javaClass.name) }
        else emptyList()

    val blurRadius: Flow<Float> =
    private val _blurRadius =
        listOf(
                *bouncerBlurRadiusFlows.toTypedArray(),
                *glanceableHubBlurRadiusFlows.toTypedArray(),
@@ -66,8 +70,23 @@ constructor(
            )
            .merge()

    val blurRadius: Flow<Float> =
        blurInteractor.isBlurCurrentlySupported.flatMapLatest { blurSupported ->
            if (blurSupported) {
                _blurRadius
            } else {
                flowOf(0f)
            }
        }

    val isBlurOpaque =
        blurInteractor.isBlurCurrentlySupported.flatMapLatest { blurSupported ->
            if (blurSupported) {
                blurInteractor.isBlurOpaque.distinctUntilChanged().logIfPossible("isBlurOpaque")
            } else {
                flowOf(false)
            }
        }

    override suspend fun onActivated(): Nothing {
        coroutineScope {