Merge "Reset blur radius to 0 whenever blur is not supported" into main
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt
index 390518f..a023b3c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt
@@ -25,6 +25,8 @@
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 @@
@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 @@
@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 @@
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)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt b/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt
index b18c39dc..1b42352 100644
--- a/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt
@@ -26,11 +26,14 @@
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 @@
typealias BlurAppliedUiEvent = Int
/** View model for window root view. */
+@OptIn(ExperimentalCoroutinesApi::class)
class WindowRootViewModel
@AssistedInject
constructor(
@@ -58,7 +62,7 @@
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 @@
)
.merge()
+ val blurRadius: Flow<Float> =
+ blurInteractor.isBlurCurrentlySupported.flatMapLatest { blurSupported ->
+ if (blurSupported) {
+ _blurRadius
+ } else {
+ flowOf(0f)
+ }
+ }
+
val isBlurOpaque =
- blurInteractor.isBlurOpaque.distinctUntilChanged().logIfPossible("isBlurOpaque")
+ blurInteractor.isBlurCurrentlySupported.flatMapLatest { blurSupported ->
+ if (blurSupported) {
+ blurInteractor.isBlurOpaque.distinctUntilChanged().logIfPossible("isBlurOpaque")
+ } else {
+ flowOf(false)
+ }
+ }
override suspend fun onActivated(): Nothing {
coroutineScope {