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

Commit 312fcac7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Blur glanceable hub UI when primary bouncer is showing" into main

parents cc7887c0 7dee85e8
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.blur
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.BlendMode
@@ -43,6 +44,7 @@ import com.android.compose.animation.scene.SceneTransitionLayout
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.observableTransitionState
import com.android.compose.animation.scene.transitions
import com.android.compose.modifiers.thenIf
import com.android.systemui.communal.shared.model.CommunalBackgroundType
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.shared.model.CommunalTransitionKeys
@@ -158,6 +160,7 @@ fun CommunalContainer(
            transitions = sceneTransitions,
        )
    }
    val isUiBlurred by viewModel.isUiBlurred.collectAsStateWithLifecycle()

    val detector = remember { CommunalSwipeDetector() }

@@ -174,9 +177,11 @@ fun CommunalContainer(
        onDispose { viewModel.setTransitionState(null) }
    }

    val blurRadius = with(LocalDensity.current) { viewModel.blurRadiusPx.toDp() }

    SceneTransitionLayout(
        state = state,
        modifier = modifier.fillMaxSize(),
        modifier = modifier.fillMaxSize().thenIf(isUiBlurred) { Modifier.blur(blurRadius) },
        swipeSourceDetector = detector,
        swipeDetector = detector,
    ) {
+18 −0
Original line number Diff line number Diff line
@@ -25,10 +25,12 @@ import android.provider.Settings
import android.widget.RemoteViews
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.systemui.Flags.FLAG_BOUNCER_UI_REVAMP
import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.Flags.FLAG_COMMUNAL_RESPONSIVE_GRID
import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_DIRECT_EDIT_MODE
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.communal.data.model.CommunalSmartspaceTimer
import com.android.systemui.communal.data.repository.FakeCommunalMediaRepository
import com.android.systemui.communal.data.repository.FakeCommunalSceneRepository
@@ -69,6 +71,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.keyguard.ui.transitions.blurConfig
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.logcatLogBuffer
@@ -184,6 +187,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            logcatLogBuffer("CommunalViewModelTest"),
            metricsLogger,
            kosmos.mediaCarouselController,
            kosmos.blurConfig,
        )
    }

@@ -893,6 +897,20 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            assertThat(selectedKey2).isEqualTo(key)
        }

    @Test
    @EnableFlags(FLAG_BOUNCER_UI_REVAMP)
    fun uiIsBlurred_whenPrimaryBouncerIsShowing() =
        testScope.runTest {
            val viewModel = createViewModel()
            val isUiBlurred by collectLastValue(viewModel.isUiBlurred)

            kosmos.fakeKeyguardBouncerRepository.setPrimaryShow(true)
            assertThat(isUiBlurred).isTrue()

            kosmos.fakeKeyguardBouncerRepository.setPrimaryShow(false)
            assertThat(isUiBlurred).isFalse()
        }

    private suspend fun setIsMainUser(isMainUser: Boolean) {
        val user = if (isMainUser) MAIN_USER_INFO else SECONDARY_USER_INFO
        with(userRepository) {
+11 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.Logger
import com.android.systemui.log.dagger.CommunalLog
@@ -92,6 +93,7 @@ constructor(
    @CommunalLog logBuffer: LogBuffer,
    private val metricsLogger: CommunalMetricsLogger,
    mediaCarouselController: MediaCarouselController,
    blurConfig: BlurConfig,
) :
    BaseCommunalViewModel(
        communalSceneInteractor,
@@ -221,6 +223,15 @@ constructor(
    val isEnableWorkProfileDialogShowing: Flow<Boolean> =
        _isEnableWorkProfileDialogShowing.asStateFlow()

    val isUiBlurred: StateFlow<Boolean> =
        if (Flags.bouncerUiRevamp()) {
            keyguardInteractor.primaryBouncerShowing
        } else {
            MutableStateFlow(false)
        }

    val blurRadiusPx: Float = blurConfig.maxBlurRadiusPx / 2.0f

    init {
        // Initialize our media host for the UMO. This only needs to happen once and must be done
        // before the MediaHierarchyManager attempts to move the UMO to the hub.