diff options
| author | 2024-09-05 15:54:36 +0000 | |
|---|---|---|
| committer | 2024-09-05 16:25:26 +0000 | |
| commit | 7337b1515eb8b6beeabd11726fcce1f3e1e21bf6 (patch) | |
| tree | 03800b37cc459d440aacfd7277304bd0d2fa72ad | |
| parent | 1253c74742d8df87e308315865e241ba006dab07 (diff) | |
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
2 files changed, 22 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 43f9af6016f1..dd4b0005b034 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -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); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java index 3e3c046ce62e..01a3d36a05ec 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java @@ -779,6 +779,26 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { @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() { reset(mDismissCallbackRegistry); reset(mPrimaryBouncerInteractor); @@ -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); |