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

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

Merge "Change the background color of the bouncer based on whether blur is...

Merge "Change the background color of the bouncer based on whether blur is supported or not" into main
parents 299d6106 26b2f663
Loading
Loading
Loading
Loading
+1 −19
Original line number Diff line number Diff line
@@ -22,17 +22,12 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.overscroll
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalResources
import androidx.compose.ui.platform.testTag
import com.android.compose.animation.scene.ContentScope
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.internal.R
import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.bouncer.ui.viewmodel.BouncerUserActionsViewModel
@@ -51,19 +46,6 @@ object Bouncer {
        val Content = ElementKey("BouncerContent")
    }

    object Colors {
        val Background: Color
            @Composable
            @ReadOnlyComposable
            get() =
                Color(
                    LocalResources.current.getColor(
                        R.color.surface_effect_0,
                        LocalContext.current.theme,
                    )
                )
    }

    object TestTags {
        const val Root = "bouncer_root"
    }
@@ -107,7 +89,7 @@ private fun ContentScope.BouncerOverlay(
    dialogFactory: BouncerDialogFactory,
    modifier: Modifier = Modifier,
) {
    val backgroundColor = Bouncer.Colors.Background
    val backgroundColor = viewModel.backgroundColor

    DisposableEffect(Unit) { onDispose { viewModel.onUiDestroyed() } }

+15 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.startable.sceneContainerStartable
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.testKosmos
import com.android.systemui.window.data.repository.fakeWindowRootViewBlurRepository
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import kotlinx.coroutines.flow.emptyFlow
@@ -253,6 +254,20 @@ class BouncerOverlayContentViewModelTest : SysuiTestCase() {
            assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
        }

    @Test
    fun backgroundColor_changesBasedOnWhetherBlurIsSupported() =
        kosmos.runTest {
            kosmos.fakeWindowRootViewBlurRepository.isBlurSupported.value = false
            runCurrent()

            assertThat(underTest.backgroundColor.alpha).isEqualTo(1.0f)

            kosmos.fakeWindowRootViewBlurRepository.isBlurSupported.value = true
            runCurrent()

            assertThat(underTest.backgroundColor.alpha).isLessThan(1.0f)
        }

    private fun authMethodsToTest(): List<AuthenticationMethodModel> {
        return listOf(None, Pin, Password, Pattern, Sim)
    }
+20 −2
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.app.admin.DevicePolicyManager
import android.app.admin.DevicePolicyResources
import android.content.Context
import android.graphics.Bitmap
import androidx.compose.runtime.getValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.input.key.type
import androidx.core.graphics.drawable.toBitmap
@@ -33,17 +35,19 @@ import com.android.systemui.authentication.shared.model.BouncerInputSide
import com.android.systemui.bouncer.domain.interactor.BouncerActionButtonInteractor
import com.android.systemui.bouncer.domain.interactor.BouncerInteractor
import com.android.systemui.bouncer.shared.model.BouncerActionButtonModel
import com.android.systemui.bouncer.ui.BouncerColors.surfaceColor
import com.android.systemui.bouncer.ui.helper.BouncerHapticPlayer
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Text
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardMediaKeyInteractor
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.HydratedActivatable
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.user.ui.viewmodel.UserSwitcherViewModel
import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.awaitCancellation
@@ -74,7 +78,8 @@ constructor(
    private val bouncerActionButtonInteractor: BouncerActionButtonInteractor,
    private val keyguardDismissActionInteractor: KeyguardDismissActionInteractor,
    private val sceneInteractor: SceneInteractor,
) : ExclusiveActivatable() {
    private val windowRootViewBlurInteractor: WindowRootViewBlurInteractor,
) : HydratedActivatable() {
    private val _selectedUserImage = MutableStateFlow<Bitmap?>(null)
    val selectedUserImage: StateFlow<Bitmap?> = _selectedUserImage.asStateFlow()

@@ -157,6 +162,19 @@ constructor(
    /** How much the bouncer UI should be scaled. */
    val scale: StateFlow<Float> = bouncerInteractor.scale

    /** Bouncer background color */
    val backgroundColor by
        windowRootViewBlurInteractor.isBlurCurrentlySupported
            .map { Color(applicationContext.surfaceColor(it)) }
            .hydratedStateOf(
                "backgroundColor",
                Color(
                    applicationContext.surfaceColor(
                        windowRootViewBlurInteractor.isBlurCurrentlySupported.value
                    )
                ),
            )

    private val _isInputEnabled =
        MutableStateFlow(authenticationInteractor.lockoutEndTimestamp == null)
    private val isInputEnabled: StateFlow<Boolean> = _isInputEnabled.asStateFlow()
+2 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.user.domain.interactor.selectedUserInteractor
import com.android.systemui.user.ui.viewmodel.userSwitcherViewModel
import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor
import kotlinx.coroutines.flow.StateFlow

val Kosmos.bouncerUserActionsViewModel by Fixture { BouncerUserActionsViewModel() }
@@ -63,6 +64,7 @@ val Kosmos.bouncerOverlayContentViewModel by Fixture {
        bouncerActionButtonInteractor = bouncerActionButtonInteractor,
        keyguardDismissActionInteractor = keyguardDismissActionInteractor,
        sceneInteractor = sceneInteractor,
        windowRootViewBlurInteractor = windowRootViewBlurInteractor,
    )
}