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

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

Merge "Allow alternateBouncer if at least once source has ui available" into udc-qpr-dev

parents 93c0bed9 5d49248b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ constructor(
    }

    private fun listenForAlternateBouncerVisibility() {
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(true)
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(true, "SideFpsController")
        scope.launch {
            alternateBouncerInteractor.isVisible.collect { isVisible: Boolean ->
                if (isVisible) {
+3 −2
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ constructor(
        dumpManager,
    ),
    UdfpsKeyguardViewControllerAdapter {
    private val uniqueIdentifier = this.toString()
    private val useExpandedOverlay: Boolean =
        featureFlags.isEnabled(Flags.UDFPS_NEW_TOUCH_DETECTION)
    private var showingUdfpsBouncer = false
@@ -282,7 +283,7 @@ constructor(

    public override fun onViewAttached() {
        super.onViewAttached()
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(true)
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(true, uniqueIdentifier)
        val dozeAmount = statusBarStateController.dozeAmount
        lastDozeAmount = dozeAmount
        stateListener.onDozeAmountChanged(dozeAmount, dozeAmount)
@@ -312,7 +313,7 @@ constructor(

    override fun onViewDetached() {
        super.onViewDetached()
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(false)
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(false, uniqueIdentifier)
        faceDetectRunning = false
        keyguardStateController.removeCallback(keyguardStateControllerCallback)
        statusBarStateController.removeCallback(stateListener)
+3 −2
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ open class UdfpsKeyguardViewController(
        dumpManager,
    ),
    UdfpsKeyguardViewControllerAdapter {
    private val uniqueIdentifier = this.toString()
    override val tag: String
        get() = TAG

@@ -55,12 +56,12 @@ open class UdfpsKeyguardViewController(

    public override fun onViewAttached() {
        super.onViewAttached()
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(true)
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(true, uniqueIdentifier)
    }

    public override fun onViewDetached() {
        super.onViewDetached()
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(false)
        alternateBouncerInteractor.setAlternateBouncerUIAvailable(false, uniqueIdentifier)
    }

    override fun shouldPauseAuth(): Boolean {
+10 −2
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ constructor(
) {
    var receivedDownTouch = false
    val isVisible: Flow<Boolean> = bouncerRepository.alternateBouncerVisible
    private val alternateBouncerUiAvailableFromSource: HashSet<String> = HashSet()

    /**
     * Sets the correct bouncer states to show the alternate bouncer if it can show.
@@ -69,8 +70,15 @@ constructor(
        return bouncerRepository.alternateBouncerVisible.value
    }

    fun setAlternateBouncerUIAvailable(isAvailable: Boolean) {
        bouncerRepository.setAlternateBouncerUIAvailable(isAvailable)
    fun setAlternateBouncerUIAvailable(isAvailable: Boolean, token: String) {
        if (isAvailable) {
            alternateBouncerUiAvailableFromSource.add(token)
        } else {
            alternateBouncerUiAvailableFromSource.remove(token)
        }
        bouncerRepository.setAlternateBouncerUIAvailable(
            alternateBouncerUiAvailableFromSource.isNotEmpty()
        )
    }

    fun canShowAlternateBouncerForFingerprint(): Boolean {
+22 −0
Original line number Diff line number Diff line
@@ -165,6 +165,28 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
        assertFalse(bouncerRepository.alternateBouncerVisible.value)
    }

    @Test
    fun alternateBouncerUiAvailable_fromMultipleSources() {
        assertFalse(bouncerRepository.alternateBouncerUIAvailable.value)

        // GIVEN there are two different sources indicating the alternate bouncer is available
        underTest.setAlternateBouncerUIAvailable(true, "source1")
        underTest.setAlternateBouncerUIAvailable(true, "source2")
        assertTrue(bouncerRepository.alternateBouncerUIAvailable.value)

        // WHEN one of the sources no longer says the UI is available
        underTest.setAlternateBouncerUIAvailable(false, "source1")

        // THEN alternate bouncer UI is still available (from the other source)
        assertTrue(bouncerRepository.alternateBouncerUIAvailable.value)

        // WHEN all sources say the UI is not available
        underTest.setAlternateBouncerUIAvailable(false, "source2")

        // THEN alternate boucer UI is not available
        assertFalse(bouncerRepository.alternateBouncerUIAvailable.value)
    }

    private fun givenCanShowAlternateBouncer() {
        bouncerRepository.setAlternateBouncerUIAvailable(true)
        biometricSettingsRepository.setFingerprintEnrolled(true)