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

Commit 7337b151 authored by Matt Pietal's avatar Matt Pietal
Browse files

Only call dismissCallback cancel on reset if bouncer is showing

There are many ways that reset() can get called, including coming
out of dozing. This has the potential to remove a registered
callback before the dismissal has actually occurred. The callback
should only be canceled if the user has closed the bouncer.

Fixes: 363091441
Test: atest StatusBarKeyguardViewManagerTest
Flag: EXEMPT bugfix
Change-Id: I3b8b55f7f1748433bdf7078dbf027076fc3f30b8
parent 1253c747
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -992,7 +992,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
            } else {
                showBouncerOrKeyguard(hideBouncerWhenShowing, isFalsingReset);
            }
            if (!SceneContainerFlag.isEnabled() && hideBouncerWhenShowing) {
            if (!SceneContainerFlag.isEnabled() && hideBouncerWhenShowing && isBouncerShowing()) {
                hideAlternateBouncer(true);
                mDismissCallbackRegistry.notifyDismissCancelled();
                mPrimaryBouncerInteractor.setDismissAction(null, null);
+21 −0
Original line number Diff line number Diff line
@@ -777,6 +777,26 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
        mStatusBarKeyguardViewManager.hideAlternateBouncer(true);
    }

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

        // GIVEN the keyguard is showing
        reset(mAlternateBouncerInteractor);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        when(mPrimaryBouncerInteractor.isFullyShowing()).thenReturn(false);

        // WHEN SBKV is reset with hideBouncerWhenShowing=true
        mStatusBarKeyguardViewManager.reset(true);

        // THEN no calls to hide should be made
        verify(mAlternateBouncerInteractor, never()).hide();
        verify(mDismissCallbackRegistry, never()).notifyDismissCancelled();
        verify(mPrimaryBouncerInteractor, never()).setDismissAction(eq(null), eq(null));
    }

    @Test
    @DisableSceneContainer
    public void testResetHideBouncerWhenShowing_alternateBouncerHides() {
@@ -786,6 +806,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
        // GIVEN the keyguard is showing
        reset(mAlternateBouncerInteractor);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        when(mPrimaryBouncerInteractor.isFullyShowing()).thenReturn(true);

        // WHEN SBKV is reset with hideBouncerWhenShowing=true
        mStatusBarKeyguardViewManager.reset(true);