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:
Lucas Dupin
2020-06-24 20:42:58 -07:00
parent 1d1bc0f550
commit 37f06ef4a1
2 changed files with 8 additions and 2 deletions

View File

@@ -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();

View File

@@ -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);