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

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

Merge "Update the initial bouncer message whenever the security mode changes" into main

parents cda8f0c9 de747a86
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import androidx.test.filters.SmallTest
import com.android.internal.widget.LockPatternUtils
import com.android.keyguard.KeyguardSecurityModel
import com.android.keyguard.KeyguardSecurityModel.SecurityMode.PIN
import com.android.keyguard.KeyguardSecurityModel.SecurityMode.Pattern
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
@@ -88,7 +89,9 @@ class BouncerMessageInteractorTest : SysuiTestCase() {
        overrideResource(kg_trust_agent_disabled, "Trust agent is unavailable")
    }

    suspend fun TestScope.init() {
    suspend fun TestScope.init(
        fingerprintAuthCurrentlyAllowed: Boolean = true,
    ) {
        kosmos.fakeUserRepository.setSelectedUserInfo(PRIMARY_USER)
        mSetFlagsRule.enableFlags(Flags.FLAG_REVAMPED_BOUNCER_MESSAGES)
        underTest =
@@ -107,13 +110,38 @@ class BouncerMessageInteractorTest : SysuiTestCase() {
                faceAuthRepository = kosmos.fakeDeviceEntryFaceAuthRepository,
                securityModel = securityModel
            )
        biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true)
        biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(
            fingerprintAuthCurrentlyAllowed
        )
        kosmos.fakeDeviceEntryFingerprintAuthRepository.setLockedOut(false)
        kosmos.fakeFingerprintPropertyRepository.supportsSideFps()
        kosmos.fakeKeyguardBouncerRepository.setPrimaryShow(true)
        runCurrent()
    }

    @Test
    fun initialMessage_pin() =
        testScope.runTest {
            init(fingerprintAuthCurrentlyAllowed = false)
            val bouncerMessage by collectLastValue(underTest.bouncerMessage)
            kosmos.fakeKeyguardBouncerRepository.setLastShownSecurityMode(
                KeyguardSecurityModel.SecurityMode.PIN
            )
            assertThat(bouncerMessage).isNotNull()
            assertThat(primaryResMessage(bouncerMessage)).isEqualTo("Enter PIN")
        }

    @Test
    fun onPrimaryAuthMethodChangeFromPinToPattern_initialMessageUpdates() =
        testScope.runTest {
            init(fingerprintAuthCurrentlyAllowed = false)
            val bouncerMessage by collectLastValue(underTest.bouncerMessage)
            whenever(securityModel.getSecurityMode(PRIMARY_USER_ID)).thenReturn(Pattern)
            kosmos.fakeKeyguardBouncerRepository.setLastShownSecurityMode(Pattern)
            assertThat(bouncerMessage).isNotNull()
            assertThat(primaryResMessage(bouncerMessage)).isEqualTo("Draw pattern")
        }

    @Test
    fun onIncorrectSecurityInput_providesTheAppropriateValueForBouncerMessage() =
        testScope.runTest {
+1 −0
Original line number Diff line number Diff line
@@ -577,6 +577,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
        SecurityMode securityMode = whitelistIpcs(() -> mSecurityModel.getSecurityMode(
                mSelectedUserInteractor.getSelectedUserId()));
        if (DEBUG) Log.v(TAG, "showPrimarySecurityScreen(turningOff=" + turningOff + ")");
        mPrimaryBouncerInteractor.get().setLastShownPrimarySecurityScreen(securityMode);
        showSecurityScreen(securityMode);
    }

+19 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.bouncer.data.repository

import android.os.Build
import android.util.Log
import com.android.keyguard.KeyguardSecurityModel
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EXPANSION_HIDDEN
import com.android.systemui.bouncer.shared.model.BouncerDismissActionModel
import com.android.systemui.bouncer.shared.model.BouncerShowMessageModel
@@ -89,6 +90,9 @@ interface KeyguardBouncerRepository {
    val alternateBouncerVisible: StateFlow<Boolean>
    val alternateBouncerUIAvailable: StateFlow<Boolean>

    /** Last shown security mode of the primary bouncer (ie: pin/pattern/password/SIM) */
    val lastShownSecurityMode: StateFlow<KeyguardSecurityModel.SecurityMode>

    /** Action that should be run right after the bouncer is dismissed. */
    var bouncerDismissActionModel: BouncerDismissActionModel?

@@ -123,6 +127,8 @@ interface KeyguardBouncerRepository {
    fun setAlternateVisible(isVisible: Boolean)

    fun setAlternateBouncerUIAvailable(isAvailable: Boolean)

    fun setLastShownSecurityMode(securityMode: KeyguardSecurityModel.SecurityMode)
}

@SysUISingleton
@@ -181,6 +187,11 @@ constructor(

    private val _showMessage = MutableStateFlow<BouncerShowMessageModel?>(null)
    override val showMessage = _showMessage.asStateFlow()
    private val _lastShownSecurityMode =
        MutableStateFlow(KeyguardSecurityModel.SecurityMode.Invalid)
    override val lastShownSecurityMode: StateFlow<KeyguardSecurityModel.SecurityMode> =
        _lastShownSecurityMode.asStateFlow()

    private val _resourceUpdateRequests = MutableStateFlow(false)
    override val resourceUpdateRequests = _resourceUpdateRequests.asStateFlow()

@@ -262,6 +273,10 @@ constructor(
        _isBackButtonEnabled.value = isBackButtonEnabled
    }

    override fun setLastShownSecurityMode(securityMode: KeyguardSecurityModel.SecurityMode) {
        _lastShownSecurityMode.value = securityMode
    }

    /** Sets up logs for state flows. */
    private fun setUpLogging() {
        if (!Build.IS_DEBUGGABLE) {
@@ -308,6 +323,10 @@ constructor(
        alternateBouncerUIAvailable
            .logDiffsForTable(buffer, "", "IsAlternateBouncerUIAvailable", false)
            .launchIn(applicationScope)
        lastShownSecurityMode
            .map { it.name }
            .logDiffsForTable(buffer, "", "lastShownSecurityMode", null)
            .launchIn(applicationScope)
    }

    companion object {
+4 −3
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ import com.android.systemui.flags.SystemPropertiesHelper
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.TrustRepository
import com.android.systemui.user.data.repository.UserRepository
import com.android.systemui.util.kotlin.Sextuple
import com.android.systemui.util.kotlin.Septuple
import com.android.systemui.util.kotlin.combine
import javax.inject.Inject
import kotlin.math.roundToInt
@@ -145,15 +145,16 @@ constructor(

    private val initialBouncerMessage: Flow<BouncerMessageModel> =
        combine(
                primaryBouncerInteractor.lastShownSecurityMode, // required to update defaultMessage
                biometricSettingsRepository.authenticationFlags,
                trustRepository.isCurrentUserTrustManaged,
                isAnyBiometricsEnabledAndEnrolled,
                deviceEntryFingerprintAuthInteractor.isLockedOut,
                faceAuthRepository.isLockedOut,
                isFingerprintAuthCurrentlyAllowedOnBouncer,
                ::Sextuple
                ::Septuple
            )
            .map { (flags, _, biometricsEnrolledAndEnabled, fpLockedOut, faceLockedOut, _) ->
            .map { (_, flags, _, biometricsEnrolledAndEnabled, fpLockedOut, faceLockedOut, _) ->
                val isTrustUsuallyManaged = trustRepository.isCurrentUserTrustUsuallyManaged.value
                val trustOrBiometricsAvailable =
                    (isTrustUsuallyManaged || biometricsEnrolledAndEnabled)
+6 −0
Original line number Diff line number Diff line
@@ -103,6 +103,8 @@ constructor(
    val resourceUpdateRequests: Flow<Boolean> = repository.resourceUpdateRequests.filter { it }
    val keyguardPosition: Flow<Float> = repository.keyguardPosition.filterNotNull()
    val panelExpansionAmount: Flow<Float> = repository.panelExpansionAmount
    val lastShownSecurityMode: Flow<KeyguardSecurityModel.SecurityMode> =
        repository.lastShownSecurityMode

    /** 0f = bouncer fully hidden. 1f = bouncer fully visible. */
    val bouncerExpansion: Flow<Float> =
@@ -384,6 +386,10 @@ constructor(
        return isShowing.value
    }

    fun setLastShownPrimarySecurityScreen(securityMode: KeyguardSecurityModel.SecurityMode) {
        repository.setLastShownSecurityMode(securityMode)
    }

    /** Whether we want to wait to show the bouncer in case passive auth succeeds. */
    private fun usePrimaryBouncerPassiveAuthDelay(): Boolean {
        val canRunActiveUnlock =
Loading