diff options
2 files changed, 44 insertions, 2 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 26da1c05a0ac..6eed711645a7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -219,7 +219,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb protected LockPatternUtils mLockPatternUtils; protected ViewMediatorCallback mViewMediatorCallback; - protected CentralSurfaces mCentralSurfaces; + @Nullable protected CentralSurfaces mCentralSurfaces; private NotificationPanelViewController mNotificationPanelViewController; private BiometricUnlockController mBiometricUnlockController; private boolean mCentralSurfacesRegistered; @@ -267,7 +267,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb private final KeyguardUpdateMonitor mKeyguardUpdateManager; private final LatencyTracker mLatencyTracker; private final KeyguardSecurityModel mKeyguardSecurityModel; - private KeyguardBypassController mBypassController; + @Nullable private KeyguardBypassController mBypassController; @Nullable private AlternateBouncer mAlternateBouncer; private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback = @@ -744,6 +744,12 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb } private void updateAlternateBouncerShowing(boolean updateScrim) { + if (!mCentralSurfacesRegistered) { + // if CentralSurfaces hasn't been registered yet, then the controllers below haven't + // been initialized yet so there's no need to attempt to forward them events. + return; + } + final boolean isShowingAlternateBouncer = isShowingAlternateBouncer(); if (mKeyguardMessageAreaController != null) { mKeyguardMessageAreaController.setIsVisible(isShowingAlternateBouncer); 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 0ae3a10c5834..bf5186b6324d 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 @@ -587,4 +587,40 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase { mStatusBarKeyguardViewManager.hideBouncer(false); verify(mPrimaryBouncerInteractor, never()).hide(); } + + @Test + public void hideAlternateBouncer_beforeCentralSurfacesRegistered() { + mStatusBarKeyguardViewManager = + new StatusBarKeyguardViewManager( + getContext(), + mViewMediatorCallback, + mLockPatternUtils, + mStatusBarStateController, + mock(ConfigurationController.class), + mKeyguardUpdateMonitor, + mDreamOverlayStateController, + mock(NavigationModeController.class), + mock(DockManager.class), + mock(NotificationShadeWindowController.class), + mKeyguardStateController, + mock(NotificationMediaManager.class), + mKeyguardBouncerFactory, + mKeyguardMessageAreaFactory, + Optional.of(mSysUiUnfoldComponent), + () -> mShadeController, + mLatencyTracker, + mKeyguardSecurityModel, + mFeatureFlags, + mPrimaryBouncerCallbackInteractor, + mPrimaryBouncerInteractor, + mBouncerView) { + @Override + public ViewRootImpl getViewRootImpl() { + return mViewRootImpl; + } + }; + + // the following call before registering centralSurfaces should NOT throw a NPE: + mStatusBarKeyguardViewManager.hideAlternateBouncer(true); + } } |