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

Commit 4bff6fb6 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Don't show the altBouncer in rearDisplay mode

Also, include REAR_DISPLAY_OUTER_DEFAULT in the
definition for rear display mode. And cleanup
some unused code.

Fix up AlternateBouncerInteractorTest. There were
tests that were passing that didn't actually
accurately test the code.

Test: atest AlternateBouncerInteractorTest
Test: manually go into rear display mode (ie: from camera
app) and trigger an affordance that would normally
show the alt bouncer (observe no alt bouncer); on primary
bouncer, observe no sidefps affordance
Fixes: 435655210
Flag: EXEMPT bugfix

Change-Id: Idb8ea59dfbe4c01eacd92310bfe2371cf4d769ef
parent 5828e7e6
Loading
Loading
Loading
Loading
+2 −63
Original line number Diff line number Diff line
@@ -18,23 +18,19 @@ package com.android.systemui.bouncer.domain.interactor

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.keyguard.keyguardUpdateMonitor
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository
import com.android.systemui.authentication.domain.interactor.authenticationInteractor
import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.biometricSettingsRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.policy.keyguardStateController
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.map
@@ -44,7 +40,6 @@ import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.whenever

@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -62,7 +57,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
    @DisableSceneContainer
    fun canShowAlternateBouncer_false_dueToTransitionState() =
        kosmos.testScope.runTest {
            givenAlternateBouncerSupported()
            kosmos.givenAlternateBouncerSupported()
            val canShowAlternateBouncer by collectLastValue(underTest.canShowAlternateBouncer)
            kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
                from = KeyguardState.AOD,
@@ -76,7 +71,7 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
    @EnableSceneContainer
    fun canShowAlternateBouncer_false_dueToTransitionState_scene_container() =
        kosmos.testScope.runTest {
            givenAlternateBouncerSupported()
            kosmos.givenAlternateBouncerSupported()
            val canShowAlternateBouncer by collectLastValue(underTest.canShowAlternateBouncer)
            val isDeviceUnlocked by
                collectLastValue(
@@ -91,46 +86,6 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
            assertThat(canShowAlternateBouncer).isFalse()
        }

    @Test
    fun canShowAlternateBouncerForFingerprint_ifFingerprintIsNotUsuallyAllowed() {
        givenCanShowAlternateBouncer()
        kosmos.biometricSettingsRepository.setIsFingerprintAuthEnrolledAndEnabled(false)

        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    @Test
    fun canShowAlternateBouncerForFingerprint_strongBiometricNotAllowed() {
        givenCanShowAlternateBouncer()
        kosmos.biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(false)

        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    @Test
    fun canShowAlternateBouncerForFingerprint_fingerprintLockedOut() {
        givenCanShowAlternateBouncer()
        whenever(kosmos.keyguardUpdateMonitor.isFingerprintLockedOut).thenReturn(true)

        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    @Test
    fun canShowAlternateBouncerForFingerprint_butCanDismissLockScreen() {
        givenCanShowAlternateBouncer()
        whenever(kosmos.keyguardStateController.isUnlocked).thenReturn(true)

        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    @Test
    fun canShowAlternateBouncerForFingerprint_primaryBouncerShowing() {
        givenCanShowAlternateBouncer()
        kosmos.keyguardBouncerRepository.setPrimaryShow(true)

        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    @Test
    fun hide_wasPreviouslyShowing() {
        kosmos.keyguardBouncerRepository.setAlternateVisible(true)
@@ -146,20 +101,4 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
        assertFalse(underTest.hide())
        assertFalse(kosmos.keyguardBouncerRepository.alternateBouncerVisible.value)
    }

    @Test
    fun canShowAlternateBouncerForFingerprint_rearFps() {
        givenCanShowAlternateBouncer()
        kosmos.fingerprintPropertyRepository.supportsRearFps() // does not support alternate bouncer

        assertFalse(underTest.canShowAlternateBouncerForFingerprint())
    }

    private fun givenAlternateBouncerSupported() {
        kosmos.givenAlternateBouncerSupported()
    }

    private fun givenCanShowAlternateBouncer() {
        kosmos.givenCanShowAlternateBouncer()
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import android.view.windowManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.domain.interactor.givenCanShowAlternateBouncer
import com.android.systemui.bouncer.domain.interactor.givenAlternateBouncerSupported
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -73,7 +73,7 @@ class AlternateBouncerViewBinderTest : SysuiTestCase() {
    @Test
    fun addViewToWindowManager() {
        testScope.runTest {
            kosmos.givenCanShowAlternateBouncer()
            kosmos.givenAlternateBouncerSupported()
            kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.ALTERNATE_BOUNCER,
@@ -86,7 +86,7 @@ class AlternateBouncerViewBinderTest : SysuiTestCase() {
    @Test
    fun viewRemovedImmediatelyIfAlreadyAttachedToWindow() {
        testScope.runTest {
            kosmos.givenCanShowAlternateBouncer()
            kosmos.givenAlternateBouncerSupported()
            kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.ALTERNATE_BOUNCER,
@@ -107,7 +107,7 @@ class AlternateBouncerViewBinderTest : SysuiTestCase() {
    @Test
    fun viewNotRemovedUntilAttachedToWindow() {
        testScope.runTest {
            kosmos.givenCanShowAlternateBouncer()
            kosmos.givenAlternateBouncerSupported()
            kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.ALTERNATE_BOUNCER,
+0 −2
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.givenCanShowAlternateBouncer
import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
@@ -277,7 +276,6 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
            sceneInteractor.changeScene(toScene = Scenes.Lockscreen, loggingReason = "reason")
            assertThat(currentScene).isEqualTo(Scenes.Lockscreen)

            givenCanShowAlternateBouncer()
            alternateBouncerInteractor.forceShow()
            assertThat(alternateBouncerIsVisible).isTrue()

+11 −11
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ import com.android.systemui.keyguard.domain.interactor.DeviceEntrySideFpsOverlay
import com.android.systemui.keyguard.ui.viewmodel.SideFpsProgressBarViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.res.R
import com.android.systemui.util.kotlin.sample
import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -132,21 +131,19 @@ constructor(
                            biometricStatusInteractor.get().sfpsAuthenticationReason,
                            deviceEntrySideFpsOverlayInteractor.get().showIndicatorForDeviceEntry,
                            sideFpsProgressBarViewModel.get().isVisible,
                            ::Triple,
                        )
                        .sample(displayStateInteractor.get().isInRearDisplayMode, ::Pair)
                        .collect { (combinedFlows, isInRearDisplayMode: Boolean) ->
                            val (
                            displayStateInteractor.get().isInRearDisplayMode,
                        ) {
                            systemServerAuthReason,
                            showIndicatorForDeviceEntry,
                                progressBarIsVisible) =
                                combinedFlows
                            progressBarIsVisible,
                            isInRearDisplayMode ->
                            Log.d(
                                TAG,
                                "systemServerAuthReason = $systemServerAuthReason, " +
                                    "showIndicatorForDeviceEntry = " +
                                    "$showIndicatorForDeviceEntry, " +
                                    "progressBarIsVisible = $progressBarIsVisible",
                                    "progressBarIsVisible = $progressBarIsVisible, " +
                                    "isInRearDisplayMode = $isInRearDisplayMode",
                            )
                            if (!isInRearDisplayMode) {
                                if (progressBarIsVisible) {
@@ -158,8 +155,11 @@ constructor(
                                } else {
                                    hide()
                                }
                            } else {
                                hide()
                            }
                        }
                        .collect {}
                }
            }
        }
+19 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import com.android.systemui.bouncer.data.repository.KeyguardBouncerRepository
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryBiometricsAllowedInteractor
import com.android.systemui.display.domain.interactor.DisplayStateInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -57,6 +58,7 @@ constructor(
        Lazy<DeviceEntryBiometricsAllowedInteractor>,
    private val keyguardInteractor: Lazy<KeyguardInteractor>,
    keyguardTransitionInteractor: Lazy<KeyguardTransitionInteractor>,
    displayStateInteractor: Lazy<DisplayStateInteractor>,
    sceneInteractor: Lazy<SceneInteractor>,
    @Application scope: CoroutineScope,
) {
@@ -80,6 +82,18 @@ constructor(
            )
            .distinctUntilChanged()

    private val currentDisplayModeSupported: Flow<Boolean> =
        fingerprintPropertyRepository.sensorType.flatMapLatest {
            // SideFPS doesn't support AlternateBouncer in rear display mode
            if (it.isPowerButton()) {
                displayStateInteractor.get().isInRearDisplayMode.map { inRearDisplayMode ->
                    !inRearDisplayMode
                }
            } else {
                flowOf(true)
            }
        }

    /**
     * Whether the current biometric, bouncer, and keyguard states allow the alternate bouncer to
     * show.
@@ -108,15 +122,18 @@ constructor(
                                    keyguardInteractor.get().isKeyguardDismissible,
                                    bouncerRepository.primaryBouncerShow,
                                    isDozingOrAod,
                                    currentDisplayModeSupported,
                                ) {
                                    fingerprintAllowed,
                                    keyguardDismissible,
                                    primaryBouncerShowing,
                                    dozing ->
                                    dozing,
                                    currentDisplayModeSupported ->
                                    fingerprintAllowed &&
                                        !keyguardDismissible &&
                                        !primaryBouncerShowing &&
                                        !dozing
                                        !dozing &&
                                        currentDisplayModeSupported
                                }
                            }
                        }
Loading