Fix NPE before CentralSurfaces is registered

Test: atest StatusBarKeyguardViewManagerTest
Fixes: 259351782
Change-Id: Id397230fbd2b67ef8516e17254e13b5c79284e24
This commit is contained in:
Beverly
2022-11-17 19:05:03 +00:00
parent f8003e57e4
commit 50b6ecd924
2 changed files with 44 additions and 2 deletions

View File

@@ -218,7 +218,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;
@@ -266,7 +266,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 =
@@ -742,6 +742,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);

View File

@@ -570,4 +570,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);
}
}