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

Commit 8690289f authored by Beverly Tai's avatar Beverly Tai Committed by Automerger Merge Worker
Browse files

Merge "Only stop face auth if display is off & awake" into udc-qpr-dev am: 6f341f9e

parents 795827df 6f341f9e
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ data class KeyguardFaceListenModel(
    override var userId: Int = 0,
    override var listening: Boolean = false,
    // keep sorted
    var allowedDisplayState: Boolean = false,
    var allowedDisplayStateWhileAwake: Boolean = false,
    var alternateBouncerShowing: Boolean = false,
    var authInterruptActive: Boolean = false,
    var biometricSettingEnabledForUser: Boolean = false,
@@ -58,7 +58,7 @@ data class KeyguardFaceListenModel(
            userId.toString(),
            listening.toString(),
            // keep sorted
            allowedDisplayState.toString(),
            allowedDisplayStateWhileAwake.toString(),
            alternateBouncerShowing.toString(),
            authInterruptActive.toString(),
            biometricSettingEnabledForUser.toString(),
@@ -98,7 +98,7 @@ data class KeyguardFaceListenModel(
                userId = model.userId
                listening = model.listening
                // keep sorted
                allowedDisplayState = model.allowedDisplayState
                allowedDisplayStateWhileAwake = model.allowedDisplayStateWhileAwake
                alternateBouncerShowing = model.alternateBouncerShowing
                authInterruptActive = model.authInterruptActive
                biometricSettingEnabledForUser = model.biometricSettingEnabledForUser
@@ -143,7 +143,7 @@ data class KeyguardFaceListenModel(
                "userId",
                "listening",
                // keep sorted
                "allowedDisplayState",
                "allowedDisplayStateWhileAwake",
                "alternateBouncerShowing",
                "authInterruptActive",
                "biometricSettingEnabledForUser",
+14 −8
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_STARTED_WAK
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_STRONG_AUTH_CHANGED;
import static com.android.keyguard.FaceAuthUiEvent.FACE_AUTH_UPDATED_USER_SWITCHING;
import static com.android.systemui.DejankUtils.whitelistIpcs;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN;

@@ -163,6 +164,7 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpsysTableLogger;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.FaceAuthenticationListener;
import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
import com.android.systemui.keyguard.shared.constants.TrustAgentUiEvent;
@@ -345,15 +347,16 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                return;
            }

            if (mDisplayTracker.getDisplay(mDisplayTracker.getDefaultDisplayId()).getState()
            if (mWakefulness.getWakefulness() == WAKEFULNESS_AWAKE
                    && mDisplayTracker.getDisplay(mDisplayTracker.getDefaultDisplayId()).getState()
                    == Display.STATE_OFF) {
                mAllowedDisplayStateForFaceAuth = false;
                mAllowedDisplayStateWhileAwakeForFaceAuth = false;
                updateFaceListeningState(
                        BIOMETRIC_ACTION_STOP,
                        FACE_AUTH_DISPLAY_OFF
                );
            } else {
                mAllowedDisplayStateForFaceAuth = true;
                mAllowedDisplayStateWhileAwakeForFaceAuth = true;
            }
        }
    };
@@ -377,7 +380,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private boolean mOccludingAppRequestingFp;
    private boolean mOccludingAppRequestingFace;
    private boolean mSecureCameraLaunched;
    private boolean mAllowedDisplayStateForFaceAuth = true;
    private boolean mAllowedDisplayStateWhileAwakeForFaceAuth = true;
    @VisibleForTesting
    protected boolean mTelephonyCapable;
    private boolean mAllowFingerprintOnCurrentOccludingActivity;
@@ -426,6 +429,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private KeyguardFaceAuthInteractor mFaceAuthInteractor;
    private final TaskStackChangeListeners mTaskStackChangeListeners;
    private final IActivityTaskManager mActivityTaskManager;
    private final WakefulnessLifecycle mWakefulness;
    private final DisplayTracker mDisplayTracker;
    private final LockPatternUtils mLockPatternUtils;
    @VisibleForTesting
@@ -2211,7 +2215,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        Trace.beginSection("KeyguardUpdateMonitor#handleStartedWakingUp");
        Assert.isMainThread();

        mAllowedDisplayStateForFaceAuth = true;
        mAllowedDisplayStateWhileAwakeForFaceAuth = true;
        updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
        if (mFaceWakeUpTriggersConfig.shouldTriggerFaceAuthOnWakeUpFrom(pmWakeReason)) {
            FACE_AUTH_UPDATED_STARTED_WAKING_UP.setExtraInfo(pmWakeReason);
@@ -2368,7 +2372,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
            FeatureFlags featureFlags,
            TaskStackChangeListeners taskStackChangeListeners,
            IActivityTaskManager activityTaskManagerService,
            DisplayTracker displayTracker) {
            DisplayTracker displayTracker,
            WakefulnessLifecycle wakefulness) {
        mContext = context;
        mSubscriptionManager = subscriptionManager;
        mUserTracker = userTracker;
@@ -2416,6 +2421,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                .collect(Collectors.toSet());
        mTaskStackChangeListeners = taskStackChangeListeners;
        mActivityTaskManager = activityTaskManagerService;
        mWakefulness = wakefulness;
        mDisplayTracker = displayTracker;
        if (mFeatureFlags.isEnabled(Flags.STOP_FACE_AUTH_ON_DISPLAY_OFF)) {
            mDisplayTracker.addDisplayChangeCallback(mDisplayCallback, mainExecutor);
@@ -3230,7 +3236,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                && faceAndFpNotAuthenticated
                && !mGoingToSleep
                && isPostureAllowedForFaceAuth
                && mAllowedDisplayStateForFaceAuth;
                && mAllowedDisplayStateWhileAwakeForFaceAuth;

        // Aggregate relevant fields for debug logging.
        logListenerModelData(
@@ -3238,7 +3244,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                    System.currentTimeMillis(),
                    user,
                    shouldListen,
                    mAllowedDisplayStateForFaceAuth,
                    mAllowedDisplayStateWhileAwakeForFaceAuth,
                    mAlternateBouncerShowing,
                    mAuthInterruptActive,
                    biometricEnabledForUser,
+59 −2
Original line number Diff line number Diff line
@@ -41,6 +41,9 @@ import static com.android.keyguard.KeyguardUpdateMonitor.HAL_POWER_PRESS_TIMEOUT
import static com.android.keyguard.KeyguardUpdateMonitor.getCurrentUser;
import static com.android.systemui.flags.Flags.FP_LISTEN_OCCLUDING_APPS;
import static com.android.systemui.flags.Flags.STOP_FACE_AUTH_ON_DISPLAY_OFF;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_ASLEEP;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_WAKING;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_CLOSED;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN;
@@ -146,6 +149,7 @@ import com.android.systemui.biometrics.FingerprintInteractiveToAuthProvider;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.flags.FakeFeatureFlags;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.settings.FakeDisplayTracker;
@@ -283,6 +287,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
    private TaskStackChangeListeners mTaskStackChangeListeners;
    @Mock
    private IActivityTaskManager mActivityTaskManager;
    @Mock
    private WakefulnessLifecycle mWakefulness;

    private List<FaceSensorPropertiesInternal> mFaceSensorProperties;
    private List<FingerprintSensorPropertiesInternal> mFingerprintSensorProperties;
@@ -3084,8 +3090,57 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
        // THEN face listening is stopped.
        verify(faceCancel).cancel();
        verify(callback).onBiometricRunningStateChanged(
                eq(false), eq(BiometricSourceType.FACE)); // beverlyt
                eq(false), eq(BiometricSourceType.FACE));
    }

    @Test
    public void onDisplayOff_whileAsleep_doesNotStopFaceAuth() throws RemoteException {
        enableStopFaceAuthOnDisplayOff();
        when(mWakefulness.getWakefulness()).thenReturn(WAKEFULNESS_ASLEEP);

        // GIVEN device is listening for face
        mKeyguardUpdateMonitor.setKeyguardShowing(true, false);
        mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON);
        mTestableLooper.processAllMessages();
        verifyFaceAuthenticateCall();

        final CancellationSignal faceCancel = spy(mKeyguardUpdateMonitor.mFaceCancelSignal);
        mKeyguardUpdateMonitor.mFaceCancelSignal = faceCancel;
        KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
        mKeyguardUpdateMonitor.registerCallback(callback);

        // WHEN the default display state changes to OFF
        triggerDefaultDisplayStateChangeToOff();

        // THEN face listening is NOT stopped.
        verify(faceCancel, never()).cancel();
        verify(callback, never()).onBiometricRunningStateChanged(
                eq(false), eq(BiometricSourceType.FACE));
    }

    @Test
    public void onDisplayOff_whileWaking_doesNotStopFaceAuth() throws RemoteException {
        enableStopFaceAuthOnDisplayOff();
        when(mWakefulness.getWakefulness()).thenReturn(WAKEFULNESS_WAKING);

        // GIVEN device is listening for face
        mKeyguardUpdateMonitor.setKeyguardShowing(true, false);
        mKeyguardUpdateMonitor.dispatchStartedWakingUp(PowerManager.WAKE_REASON_POWER_BUTTON);
        mTestableLooper.processAllMessages();
        verifyFaceAuthenticateCall();

        final CancellationSignal faceCancel = spy(mKeyguardUpdateMonitor.mFaceCancelSignal);
        mKeyguardUpdateMonitor.mFaceCancelSignal = faceCancel;
        KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
        mKeyguardUpdateMonitor.registerCallback(callback);

        // WHEN the default display state changes to OFF
        triggerDefaultDisplayStateChangeToOff();

        // THEN face listening is NOT stopped.
        verify(faceCancel, never()).cancel();
        verify(callback, never()).onBiometricRunningStateChanged(
                eq(false), eq(BiometricSourceType.FACE));
    }

    private void triggerDefaultDisplayStateChangeToOn() {
@@ -3393,6 +3448,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
        mFeatureFlags.set(STOP_FACE_AUTH_ON_DISPLAY_OFF, true);
        mKeyguardUpdateMonitor = new TestableKeyguardUpdateMonitor(mContext);
        setupBiometrics(mKeyguardUpdateMonitor);
        when(mWakefulness.getWakefulness()).thenReturn(WAKEFULNESS_AWAKE);
        assertThat(mDisplayTracker.getDisplayCallbacks().size()).isEqualTo(1);
    }

@@ -3473,7 +3529,8 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
                    mPackageManager, mFaceManager, mFingerprintManager, mBiometricManager,
                    mFaceWakeUpTriggersConfig, mDevicePostureController,
                    Optional.of(mInteractiveToAuthProvider), mFeatureFlags,
                    mTaskStackChangeListeners, mActivityTaskManager, mDisplayTracker);
                    mTaskStackChangeListeners, mActivityTaskManager, mDisplayTracker,
                    mWakefulness);
            setStrongAuthTracker(KeyguardUpdateMonitorTest.this.mStrongAuthTracker);
        }