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

Commit 29121c1b authored by Lucas Silva's avatar Lucas Silva Committed by Android (Google) Code Review
Browse files

Merge "Prevent keyguard from flashing after dismissing" into main

parents 1a7e6dcf f53ace42
Loading
Loading
Loading
Loading
+37 −4
Original line number Diff line number Diff line
@@ -224,6 +224,39 @@ class KeyguardInteractorTest : SysuiTestCase() {
            assertThat(dismissAlpha.size).isEqualTo(3)
        }

    @Test
    fun dismissAlpha_onGlanceableHub_doesNotEmitWhenShadeResets() =
        testScope.runTest {
            val dismissAlpha by collectValues(underTest.dismissAlpha)
            assertThat(dismissAlpha[0]).isEqualTo(1f)
            assertThat(dismissAlpha.size).isEqualTo(1)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.LOCKSCREEN,
                testScope,
            )

            // User begins to swipe up
            repository.setStatusBarState(StatusBarState.KEYGUARD)
            repository.setKeyguardDismissible(true)
            shadeRepository.setLegacyShadeExpansion(0.98f)

            assertThat(dismissAlpha[1]).isGreaterThan(0.5f)
            assertThat(dismissAlpha[1]).isLessThan(1f)
            assertThat(dismissAlpha.size).isEqualTo(2)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.GLANCEABLE_HUB,
                testScope,
            )

            // Now reset the shade and verify we don't emit any new values
            shadeRepository.setLegacyShadeExpansion(1f)
            assertThat(dismissAlpha.size).isEqualTo(2)
        }

    @Test
    fun dismissAlpha_doesNotEmitWhileTransitioning() =
        testScope.runTest {
@@ -262,7 +295,7 @@ class KeyguardInteractorTest : SysuiTestCase() {

            configRepository.setDimensionPixelSize(
                R.dimen.keyguard_translate_distance_on_swipe_up,
                100
                100,
            )
            configRepository.onAnyConfigurationChange()

@@ -284,7 +317,7 @@ class KeyguardInteractorTest : SysuiTestCase() {

            configRepository.setDimensionPixelSize(
                R.dimen.keyguard_translate_distance_on_swipe_up,
                100
                100,
            )
            configRepository.onAnyConfigurationChange()

@@ -306,7 +339,7 @@ class KeyguardInteractorTest : SysuiTestCase() {

            configRepository.setDimensionPixelSize(
                R.dimen.keyguard_translate_distance_on_swipe_up,
                100
                100,
            )
            configRepository.onAnyConfigurationChange()

@@ -328,7 +361,7 @@ class KeyguardInteractorTest : SysuiTestCase() {

            configRepository.setDimensionPixelSize(
                R.dimen.keyguard_translate_distance_on_swipe_up,
                100
                100,
            )
            configRepository.onAnyConfigurationChange()

+13 −12
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING
import com.android.systemui.keyguard.shared.model.KeyguardState.GLANCEABLE_HUB
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED
@@ -167,10 +168,7 @@ constructor(
     * but not vice-versa. Also accounts for [isDreamingWithOverlay]
     */
    val isDreaming: StateFlow<Boolean> =
        merge(
                repository.isDreaming,
                repository.isDreamingWithOverlay,
            )
        merge(repository.isDreaming, repository.isDreamingWithOverlay)
            .stateIn(
                scope = applicationScope,
                started = SharingStarted.Eagerly,
@@ -242,7 +240,7 @@ constructor(
                    .map { it == 1f }
                    .onStart { emit(false) }
                    .distinctUntilChanged(),
                repository.topClippingBounds
                repository.topClippingBounds,
            ) { isGone, topClippingBounds ->
                if (!isGone) {
                    emit(topClippingBounds)
@@ -287,11 +285,10 @@ constructor(

    /** Whether camera is launched over keyguard. */
    val isSecureCameraActive: Flow<Boolean> by lazy {
        combine(
        combine(isKeyguardVisible, primaryBouncerShowing, onCameraLaunchDetected) {
                isKeyguardVisible,
                primaryBouncerShowing,
                onCameraLaunchDetected,
            ) { isKeyguardVisible, isPrimaryBouncerShowing, cameraLaunchEvent ->
                isPrimaryBouncerShowing,
                cameraLaunchEvent ->
                when {
                    isKeyguardVisible -> false
                    isPrimaryBouncerShowing -> false
@@ -328,15 +325,17 @@ constructor(
                keyguardTransitionInteractor.currentKeyguardState,
                keyguardTransitionInteractor.transitionState,
                isKeyguardDismissible,
                keyguardTransitionInteractor.isFinishedIn(Scenes.Communal, GLANCEABLE_HUB),
            )
            .filter { (_, _, _, step, _) -> !step.transitionState.isTransitioning() }
            .filter { (_, _, _, step, _, _) -> !step.transitionState.isTransitioning() }
            .transform {
                (
                    legacyShadeExpansion,
                    statusBarState,
                    currentKeyguardState,
                    step,
                    isKeyguardDismissible) ->
                    isKeyguardDismissible,
                    onGlanceableHub) ->
                if (
                    statusBarState == StatusBarState.KEYGUARD &&
                        isKeyguardDismissible &&
@@ -344,7 +343,9 @@ constructor(
                        legacyShadeExpansion != 1f
                ) {
                    emit(MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion))
                } else if (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) {
                } else if (
                    (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) && !onGlanceableHub
                ) {
                    // Resets alpha state
                    emit(1f)
                }
+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.TestScope
import org.mockito.kotlin.any

/**
 * Simply put, I got tired of adding a constructor argument and then having to tweak dozens of
@@ -66,6 +67,7 @@ object KeyguardInteractorFactory {
            mock<KeyguardTransitionInteractor>().also {
                whenever(it.currentKeyguardState).thenReturn(currentKeyguardStateFlow)
                whenever(it.transitionState).thenReturn(transitionStateFlow)
                whenever(it.isFinishedIn(any(), any())).thenReturn(MutableStateFlow(false))
            }
        val configurationDimensionFlow = MutableSharedFlow<ConfigurationBasedDimensions>()
        configurationDimensionFlow.tryEmit(