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

Commit 48bb658f authored by Beverly's avatar Beverly
Browse files

Reset dismissAction and notifyCancel dismissCallbacks when altBouncer removed

Fixes: 351712715
Flag: EXEMPT bugfix
Test: atest AlternateBouncerViewModelTest
Test: Enroll SFPS or UDFPS; tap on smartspace on the lockscreen;
observe alternate bouncer; press power button to screen off;
press power button to screen on and then authenticate with FP;
observe device enters and does NOT trigger the smartspace intent
that should have been cancelled after the power off

Change-Id: I110eb99219d806ac901d56199ad30ca0b221bdc4
parent a66dbeee
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel

import android.graphics.Color
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.keyguard.DismissCallbackRegistry
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState.ALTERNATE_BOUNCER
@@ -41,6 +42,7 @@ constructor(
    keyguardTransitionInteractor: KeyguardTransitionInteractor,
    private val dismissCallbackRegistry: DismissCallbackRegistry,
    alternateBouncerInteractor: Lazy<AlternateBouncerInteractor>,
    private val primaryBouncerInteractor: PrimaryBouncerInteractor,
) {
    // When we're fully transitioned to the AlternateBouncer, the alpha of the scrim should be:
    private val alternateBouncerScrimAlpha = .66f
@@ -68,10 +70,13 @@ constructor(

    fun onRemovedFromWindow() {
        statusBarKeyguardViewManager.hideAlternateBouncer(false)
        primaryBouncerInteractor.setDismissAction(null, null)
        dismissCallbackRegistry.notifyDismissCancelled()
    }

    fun onBackRequested() {
        statusBarKeyguardViewManager.hideAlternateBouncer(false)
        primaryBouncerInteractor.setDismissAction(null, null)
        dismissCallbackRegistry.notifyDismissCancelled()
    }
}
+21 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.policy.IKeyguardDismissCallback
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
@@ -30,6 +31,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.statusbar.phone.statusBarKeyguardViewManager
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
@@ -62,13 +64,31 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
    @Test
    fun onRemovedFromWindow() =
        testScope.runTest {
            kosmos.primaryBouncerInteractor.setDismissAction(
                mock(ActivityStarter.OnDismissAction::class.java),
                {},
            )
            assertThat(kosmos.primaryBouncerInteractor.bouncerDismissAction).isNotNull()

            val dismissCallback = mock(IKeyguardDismissCallback::class.java)
            kosmos.dismissCallbackRegistry.addCallback(dismissCallback)
            underTest.onRemovedFromWindow()

            kosmos.fakeExecutor.runAllReady()
            verify(statusBarKeyguardViewManager).hideAlternateBouncer(any())
            verify(dismissCallback).onDismissCancelled()
            assertThat(kosmos.primaryBouncerInteractor.bouncerDismissAction).isNull()
        }

    @Test
    fun onBackRequested() =
        testScope.runTest {
            kosmos.primaryBouncerInteractor.setDismissAction(
                mock(ActivityStarter.OnDismissAction::class.java),
                {},
            )
            assertThat(kosmos.primaryBouncerInteractor.bouncerDismissAction).isNotNull()

            val dismissCallback = mock(IKeyguardDismissCallback::class.java)
            kosmos.dismissCallbackRegistry.addCallback(dismissCallback)

@@ -76,6 +96,7 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
            kosmos.fakeExecutor.runAllReady()
            verify(statusBarKeyguardViewManager).hideAlternateBouncer(any())
            verify(dismissCallback).onDismissCancelled()
            assertThat(kosmos.primaryBouncerInteractor.bouncerDismissAction).isNull()
        }

    @Test
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
package com.android.systemui.keyguard.ui.viewmodel

import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor
import com.android.systemui.keyguard.dismissCallbackRegistry
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
@@ -32,5 +33,6 @@ val Kosmos.alternateBouncerViewModel by Fixture {
        keyguardTransitionInteractor = keyguardTransitionInteractor,
        dismissCallbackRegistry = dismissCallbackRegistry,
        alternateBouncerInteractor = { alternateBouncerInteractor },
        primaryBouncerInteractor = primaryBouncerInteractor,
    )
}