Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37f06ef4 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

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
parent 1d1bc0f5
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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();
+3 −1
Original line number Diff line number Diff line
@@ -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);