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

Commit 2c000e76 authored by Beverly's avatar Beverly
Browse files

Don't reset the biometricUnlockState until the next time keyguard shows

Before this CL, the biometricUnlockState would almost immediately
update to NONE after WAKE_UNLOCK_PULSING, so the consumer
would never receive the WAKE_UNLOCK_PULSING state to play the
authentication success haptic.

Flag: none
Test: atest  BiometricUnlockControllerTest
Fixes: 319035806
Change-Id: I97e173ecc6ec1f391d81ce9335b844d3aef515af
parent 7d796f4f
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -51,6 +51,9 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.BiometricUnlockInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.keyguard.shared.model.KeyguardState;
import com.android.systemui.keyguard.shared.model.TransitionStep;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.res.R;
@@ -59,6 +62,7 @@ import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.user.domain.interactor.SelectedUserInteractor;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.time.SystemClock;

import dagger.Lazy;
@@ -286,7 +290,9 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
            VibratorHelper vibrator,
            SystemClock systemClock,
            Lazy<SelectedUserInteractor> selectedUserInteractor,
            BiometricUnlockInteractor biometricUnlockInteractor
            BiometricUnlockInteractor biometricUnlockInteractor,
            JavaAdapter javaAdapter,
            KeyguardTransitionInteractor keyguardTransitionInteractor
    ) {
        mPowerManager = powerManager;
        mUpdateMonitor = keyguardUpdateMonitor;
@@ -317,10 +323,19 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
        mOrderUnlockAndWake = resources.getBoolean(
                com.android.internal.R.bool.config_orderUnlockAndWake);
        mSelectedUserInteractor = selectedUserInteractor;

        javaAdapter.alwaysCollectFlow(
                keyguardTransitionInteractor.getStartedKeyguardTransitionStep(),
                this::consumeTransitionStepOnStartedKeyguardState);
        dumpManager.registerDumpable(this);
    }

    @VisibleForTesting
    protected void consumeTransitionStepOnStartedKeyguardState(TransitionStep transitionStep) {
        if (transitionStep.getFrom() == KeyguardState.GONE) {
            mBiometricUnlockInteractor.setBiometricUnlockState(MODE_NONE);
        }
    }

    public void setKeyguardViewController(KeyguardViewController keyguardViewController) {
        mKeyguardViewController = keyguardViewController;
    }
@@ -773,7 +788,6 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
        for (BiometricUnlockEventsListener listener : mBiometricUnlockEventsListeners) {
            listener.onResetMode();
        }
        mBiometricUnlockInteractor.setBiometricUnlockState(MODE_NONE);
        mNumConsecutiveFpFailures = 0;
        mLastFpFailureUptimeMillis = 0;
    }
+33 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar.phone;

import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_NONE;
import static com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK;

import static com.google.common.truth.Truth.assertThat;
@@ -26,6 +27,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
@@ -51,6 +53,10 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardViewMediator;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.BiometricUnlockInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.keyguard.shared.model.KeyguardState;
import com.android.systemui.keyguard.shared.model.TransitionState;
import com.android.systemui.keyguard.shared.model.TransitionStep;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.NotificationMediaManager;
@@ -58,6 +64,7 @@ import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.VibratorHelper;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.user.domain.interactor.SelectedUserInteractor;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.time.FakeSystemClock;

import org.junit.Before;
@@ -158,7 +165,9 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase {
                mSessionTracker, mLatencyTracker, mScreenOffAnimationController, mVibratorHelper,
                mSystemClock,
                () -> mSelectedUserInteractor,
                mBiometricUnlockInteractor
                mBiometricUnlockInteractor,
                mock(JavaAdapter.class),
                mock(KeyguardTransitionInteractor.class)
        );
        biometricUnlockController.setKeyguardViewController(mStatusBarKeyguardViewManager);
        biometricUnlockController.addListener(mBiometricUnlockEventsListener);
@@ -461,6 +470,29 @@ public class BiometricsUnlockControllerTest extends SysuiTestCase {
        verify(mPowerManager, never()).wakeUp(anyLong(), anyInt(), anyString());
    }

    @Test
    public void biometricUnlockStateResetOnTransitionFromGone() {
        mBiometricUnlockController.consumeTransitionStepOnStartedKeyguardState(
                new TransitionStep(
                        KeyguardState.AOD,
                        KeyguardState.GONE,
                        .1f /* value */,
                        TransitionState.STARTED
                )
        );
        verify(mBiometricUnlockInteractor, never()).setBiometricUnlockState(anyInt());

        mBiometricUnlockController.consumeTransitionStepOnStartedKeyguardState(
                new TransitionStep(
                        KeyguardState.GONE,
                        KeyguardState.AOD,
                        .1f /* value */,
                        TransitionState.STARTED
                )
        );
        verify(mBiometricUnlockInteractor).setBiometricUnlockState(eq(MODE_NONE));
    }

    @Test
    public void onFingerprintDetect_showBouncer() {
        // WHEN fingerprint detect occurs