diff options
| author | 2021-11-11 15:28:10 +0000 | |
|---|---|---|
| committer | 2021-11-11 18:32:45 +0000 | |
| commit | fdac4a25a030d235a4af8985ce9992f16d8d99e2 (patch) | |
| tree | 6ec75d6a4335f98303d49704814230e3b57ea87b | |
| parent | 539da553b643479a6cdba95567d96cd3b01e2103 (diff) | |
Fix issue where onKeyguardOccludedChanged isn't called when occluded changes
This occurs when the keyguard becomes not occluded while the lockscreen is already dismissed.
Fix: 205976368
Test: atest SystemUITests:StatusBarKeyguardViewManagerTest
Change-Id: Ie9a7b8916b1edeaf574677d8ffd1d3cf5eb4f8d9
2 files changed, 52 insertions, 8 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 58d28813df0c..7ab4a1ec237e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -627,7 +627,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb SysUiStatsLog.write(SysUiStatsLog.KEYGUARD_STATE_CHANGED, SysUiStatsLog.KEYGUARD_STATE_CHANGED__STATE__OCCLUDED); if (mStatusBar.isInLaunchTransition()) { - mOccluded = true; + setOccludedAndUpdateStates(true); mStatusBar.fadeKeyguardAfterLaunchTransition(null /* beforeFading */, new Runnable() { @Override @@ -640,7 +640,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } if (mStatusBar.isLaunchingActivityOverLockscreen()) { - mOccluded = true; + setOccludedAndUpdateStates(true); // When isLaunchingActivityOverLockscreen() is true, we know for sure that the post // collapse runnables will be run. @@ -655,7 +655,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb SysUiStatsLog.KEYGUARD_STATE_CHANGED__STATE__SHOWN); } boolean isOccluding = !mOccluded && occluded; - mOccluded = occluded; + setOccludedAndUpdateStates(occluded); if (mShowing) { mMediaManager.updateMediaMetaData(false, animate && !occluded); } @@ -672,6 +672,11 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } } + private void setOccludedAndUpdateStates(boolean occluded) { + mOccluded = occluded; + updateStates(); + } + public boolean isOccluded() { return mOccluded; } 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 dcffd22a484e..6f174cbe0021 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 @@ -61,8 +61,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import dagger.Lazy; - @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper @@ -87,6 +85,8 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock + private KeyguardUpdateMonitor mKeyguardUpdateMonitor; + @Mock private View mNotificationContainer; @Mock private KeyguardBypassController mBypassController; @@ -103,7 +103,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { @Mock private KeyguardMessageArea mKeyguardMessageArea; @Mock - private Lazy<ShadeController> mShadeController; + private ShadeController mShadeController; private WakefulnessLifecycle mWakefulnessLifecycle; private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; @@ -127,7 +127,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mLockPatternUtils, mStatusBarStateController, mock(ConfigurationController.class), - mock(KeyguardUpdateMonitor.class), + mKeyguardUpdateMonitor, mock(NavigationModeController.class), mock(DockManager.class), mock(NotificationShadeWindowController.class), @@ -137,7 +137,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mWakefulnessLifecycle, mUnlockedScreenOffAnimationController, mKeyguardMessageAreaFactory, - mShadeController); + () -> mShadeController); mStatusBarKeyguardViewManager.registerStatusBar( mStatusBar, mNotificationPanelView, @@ -292,6 +292,45 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { } @Test + public void setOccluded_onKeyguardOccludedChangedCalledCorrectly() { + mStatusBarKeyguardViewManager.setOccluded(false /* occluded */, false /* animated */); + verify(mKeyguardUpdateMonitor).onKeyguardOccludedChanged(false); + + clearInvocations(mKeyguardUpdateMonitor); + + mStatusBarKeyguardViewManager.setOccluded(false /* occluded */, false /* animated */); + verify(mKeyguardUpdateMonitor, never()).onKeyguardOccludedChanged(anyBoolean()); + + clearInvocations(mKeyguardUpdateMonitor); + + mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */); + verify(mKeyguardUpdateMonitor).onKeyguardOccludedChanged(true); + + clearInvocations(mKeyguardUpdateMonitor); + + mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */); + verify(mKeyguardUpdateMonitor, never()).onKeyguardOccludedChanged(anyBoolean()); + } + + @Test + public void setOccluded_isInLaunchTransition_onKeyguardOccludedChangedCalled() { + when(mStatusBar.isInLaunchTransition()).thenReturn(true); + mStatusBarKeyguardViewManager.show(null); + + mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */); + verify(mKeyguardUpdateMonitor).onKeyguardOccludedChanged(true); + } + + @Test + public void setOccluded_isLaunchingActivityOverLockscreen_onKeyguardOccludedChangedCalled() { + when(mStatusBar.isLaunchingActivityOverLockscreen()).thenReturn(true); + mStatusBarKeyguardViewManager.show(null); + + mStatusBarKeyguardViewManager.setOccluded(true /* occluded */, false /* animated */); + verify(mKeyguardUpdateMonitor).onKeyguardOccludedChanged(true); + } + + @Test public void testHiding_cancelsGoneRunnable() { OnDismissAction action = mock(OnDismissAction.class); Runnable cancelAction = mock(Runnable.class); |