Fix status bar flickering
After refactoring NPV, BiometricUnlockController started to receive authentication callbacks before NotificationPanelViewController. This means that wakeAndUnlock will start earlier, and the order that onBiometricAuthenticated and onBiometricRunningStateChanged is not guaranteed anymore. This CL checks if we're unlocking with biometrics before showing the status bar, in order to keep it hidden when dismissing the keyguard, regardless of callback invocation order. Test: unlock with face Test: wait for face timeout Test: unlock with password Test: unlock with face after SB is visible Fixes: 159445348 Change-Id: I43f78f4ab4d0e89e27fcfe5ba527a6c3ff18b0ae
This commit is contained in:
@@ -166,6 +166,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
private final ConfigurationListener mConfigurationListener = new ConfigurationListener();
|
||||
private final StatusBarStateListener mStatusBarStateListener = new StatusBarStateListener();
|
||||
private final ExpansionCallback mExpansionCallback = new ExpansionCallback();
|
||||
private final BiometricUnlockController mBiometricUnlockController;
|
||||
private final NotificationPanelView mView;
|
||||
private final MetricsLogger mMetricsLogger;
|
||||
private final ActivityManager mActivityManager;
|
||||
@@ -227,7 +228,8 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mBarState == StatusBarState.KEYGUARD
|
||||
|| mBarState == StatusBarState.SHADE_LOCKED;
|
||||
if (!running && mFirstBypassAttempt && keyguardOrShadeLocked && !mDozing
|
||||
&& !mDelayShowingKeyguardStatusBar) {
|
||||
&& !mDelayShowingKeyguardStatusBar
|
||||
&& !mBiometricUnlockController.isBiometricUnlock()) {
|
||||
mFirstBypassAttempt = false;
|
||||
animateKeyguardStatusBarIn(StackStateAnimator.ANIMATION_DURATION_STANDARD);
|
||||
}
|
||||
@@ -486,6 +488,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
StatusBarTouchableRegionManager statusBarTouchableRegionManager,
|
||||
ConversationNotificationManager conversationNotificationManager,
|
||||
MediaHierarchyManager mediaHierarchyManager,
|
||||
BiometricUnlockController biometricUnlockController,
|
||||
StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
|
||||
super(view, falsingManager, dozeLog, keyguardStateController,
|
||||
(SysuiStatusBarStateController) statusBarStateController, vibratorHelper,
|
||||
@@ -510,6 +513,7 @@ public class NotificationPanelViewController extends PanelViewController {
|
||||
mDisplayId = displayId;
|
||||
mPulseExpansionHandler = pulseExpansionHandler;
|
||||
mDozeParameters = dozeParameters;
|
||||
mBiometricUnlockController = biometricUnlockController;
|
||||
pulseExpansionHandler.setPulseExpandAbortListener(() -> {
|
||||
if (mQs != null) {
|
||||
mQs.animateHeaderSlidingOut();
|
||||
|
||||
@@ -180,6 +180,8 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private ConversationNotificationManager mConversationNotificationManager;
|
||||
@Mock
|
||||
private BiometricUnlockController mBiometricUnlockController;
|
||||
@Mock
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
private FlingAnimationUtils.Builder mFlingAnimationUtilsBuilder;
|
||||
|
||||
@@ -238,7 +240,7 @@ public class NotificationPanelViewTest extends SysuiTestCase {
|
||||
mMetricsLogger, mActivityManager, mZenModeController, mConfigurationController,
|
||||
mFlingAnimationUtilsBuilder, mStatusBarTouchableRegionManager,
|
||||
mConversationNotificationManager, mMediaHiearchyManager,
|
||||
mStatusBarKeyguardViewManager);
|
||||
mBiometricUnlockController, mStatusBarKeyguardViewManager);
|
||||
mNotificationPanelViewController.initDependencies(mStatusBar, mGroupManager,
|
||||
mNotificationShelf, mNotificationAreaController, mScrimController);
|
||||
mNotificationPanelViewController.setHeadsUpManager(mHeadsUpManager);
|
||||
|
||||
Reference in New Issue
Block a user