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

Commit faf687b2 authored by Beverly's avatar Beverly Committed by Beverly Tai
Browse files

Reset the dismiss action on keyguard reset

This resets the dismiss action and informs the
dismissCallbacks of the dismiss cancellation
when the device goes to sleep.

Test: atest StatusBarKeyguardViewManagerTest AlternateBouncerViewModelTest
Test: Enroll UDFPS or SFPS, tap on a notification on the lockscreen
with an intent, observe the alternate bouncer, tap on the alternate
bouncer to show the primary bouncer; enter pin/pattern/password,
observe that the intent triggers
Fixes: 351712715
Flag: EXEMPT bugfix
Change-Id: Ia1c7cfe4ad357c265ccb68250c538e9cd3d0321b
parent b381000f
Loading
Loading
Loading
Loading
+3 −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
@@ -73,5 +75,6 @@ constructor(
    fun onBackRequested() {
        statusBarKeyguardViewManager.hideAlternateBouncer(false)
        dismissCallbackRegistry.notifyDismissCancelled()
        primaryBouncerInteractor.setDismissAction(null, null)
    }
}
+8 −1
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor;
import com.android.systemui.deviceentry.shared.DeviceEntryUdfpsRefactor;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.keyguard.KeyguardWmStateRefactor;
import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor;
@@ -170,6 +172,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
    private final Lazy<ShadeController> mShadeController;
    private final Lazy<SceneInteractor> mSceneInteractorLazy;
    private final Lazy<DeviceEntryInteractor> mDeviceEntryInteractorLazy;
    private final DismissCallbackRegistry mDismissCallbackRegistry;

    private Job mListenForAlternateBouncerTransitionSteps = null;
    private Job mListenForKeyguardAuthenticatedBiometricsHandled = null;
@@ -400,7 +403,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
            Lazy<SceneInteractor> sceneInteractorLazy,
            StatusBarKeyguardViewManagerInteractor statusBarKeyguardViewManagerInteractor,
            @Main DelayableExecutor executor,
            Lazy<DeviceEntryInteractor> deviceEntryInteractorLazy
            Lazy<DeviceEntryInteractor> deviceEntryInteractorLazy,
            DismissCallbackRegistry dismissCallbackRegistry
    ) {
        mContext = context;
        mExecutor = executor;
@@ -437,6 +441,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
        mSceneInteractorLazy = sceneInteractorLazy;
        mStatusBarKeyguardViewManagerInteractor = statusBarKeyguardViewManagerInteractor;
        mDeviceEntryInteractorLazy = deviceEntryInteractorLazy;
        mDismissCallbackRegistry = dismissCallbackRegistry;
    }

    KeyguardTransitionInteractor mKeyguardTransitionInteractor;
@@ -994,6 +999,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
            }
            if (!SceneContainerFlag.isEnabled() && hideBouncerWhenShowing) {
                hideAlternateBouncer(true);
                mDismissCallbackRegistry.notifyDismissCancelled();
                mPrimaryBouncerInteractor.setDismissAction(null, null);
            }
            mKeyguardUpdateManager.sendKeyguardReset();
            updateStates();
+9 −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
@@ -69,6 +71,12 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
    @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 +84,7 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
            kosmos.fakeExecutor.runAllReady()
            verify(statusBarKeyguardViewManager).hideAlternateBouncer(any())
            verify(dismissCallback).onDismissCancelled()
            assertThat(kosmos.primaryBouncerInteractor.bouncerDismissAction).isNull()
        }

    @Test
+13 −3
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ import com.android.systemui.dock.DockManager;
import com.android.systemui.dreams.DreamOverlayStateController;
import com.android.systemui.flags.DisableSceneContainer;
import com.android.systemui.flags.EnableSceneContainer;
import com.android.systemui.keyguard.DismissCallbackRegistry;
import com.android.systemui.keyguard.domain.interactor.KeyguardDismissActionInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
@@ -171,6 +172,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
    @Mock private SelectedUserInteractor mSelectedUserInteractor;
    @Mock private DeviceEntryInteractor mDeviceEntryInteractor;
    @Mock private SceneInteractor mSceneInteractor;
    @Mock private DismissCallbackRegistry mDismissCallbackRegistry;

    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
    private PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback
@@ -242,7 +244,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
                        () -> mSceneInteractor,
                        mock(StatusBarKeyguardViewManagerInteractor.class),
                        mExecutor,
                        () -> mDeviceEntryInteractor) {
                        () -> mDeviceEntryInteractor,
                        mDismissCallbackRegistry) {
                    @Override
                    public ViewRootImpl getViewRootImpl() {
                        return mViewRootImpl;
@@ -765,7 +768,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
                        () -> mSceneInteractor,
                        mock(StatusBarKeyguardViewManagerInteractor.class),
                        mExecutor,
                        () -> mDeviceEntryInteractor) {
                        () -> mDeviceEntryInteractor,
                        mDismissCallbackRegistry) {
                    @Override
                    public ViewRootImpl getViewRootImpl() {
                        return mViewRootImpl;
@@ -777,7 +781,11 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
    }

    @Test
    @DisableSceneContainer
    public void testResetHideBouncerWhenShowing_alternateBouncerHides() {
        reset(mDismissCallbackRegistry);
        reset(mPrimaryBouncerInteractor);

        // GIVEN the keyguard is showing
        reset(mAlternateBouncerInteractor);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
@@ -785,8 +793,10 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
        // WHEN SBKV is reset with hideBouncerWhenShowing=true
        mStatusBarKeyguardViewManager.reset(true);

        // THEN alternate bouncer is hidden
        // THEN alternate bouncer is hidden and dismiss actions reset
        verify(mAlternateBouncerInteractor).hide();
        verify(mDismissCallbackRegistry).notifyDismissCancelled();
        verify(mPrimaryBouncerInteractor).setDismissAction(eq(null), eq(null));
    }

    @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,
    )
}