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

Commit ee9e4e73 authored by Haining Chen's avatar Haining Chen Committed by Automerger Merge Worker
Browse files

Merge "Schedule idle timeout when Keyguard state is reset and only if...

Merge "Schedule idle timeout when Keyguard state is reset and only if possible" into tm-qpr-dev am: d648d084

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21273360



Change-Id: Ida0c7f6d8add76ced4c5cebdc4bca2dc1a30834f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 8742930f d648d084
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.IBiometricEnabledOnKeyguardCallback;
import android.hardware.biometrics.SensorProperties;
import android.hardware.face.FaceManager;
import android.hardware.face.FaceSensorPropertiesInternal;
import android.hardware.fingerprint.FingerprintManager;
@@ -2999,6 +3000,23 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
        return isUnlockWithFacePossible(userId) || isUnlockWithFingerprintPossible(userId);
    }

    /**
     * If non-strong (i.e. weak or convenience) biometrics hardware is available, not disabled, and
     * user has enrolled templates. This does NOT check if the device is encrypted or in lockdown.
     *
     * @param userId User that's trying to unlock.
     * @return {@code true} if possible.
     */
    public boolean isUnlockingWithNonStrongBiometricsPossible(int userId) {
        // This assumes that there is at most one face and at most one fingerprint sensor
        return (mFaceManager != null && !mFaceSensorProperties.isEmpty()
                && (mFaceSensorProperties.get(0).sensorStrength != SensorProperties.STRENGTH_STRONG)
                && isUnlockWithFacePossible(userId))
                || (mFpm != null && !mFingerprintSensorProperties.isEmpty()
                && (mFingerprintSensorProperties.get(0).sensorStrength
                != SensorProperties.STRENGTH_STRONG) && isUnlockWithFingerprintPossible(userId));
    }

    @SuppressLint("MissingPermission")
    @VisibleForTesting
    boolean isUnlockWithFingerprintPossible(int userId) {
+20 −5
Original line number Diff line number Diff line
@@ -2445,15 +2445,28 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
        }
        mKeyguardDisplayManager.show();

        // schedule 4hr idle timeout after which non-strong biometrics (i.e. weak or convenience
        // biometric) can't be used to unlock device until unlocking with strong biometric or
        // primary auth (i.e. PIN/pattern/password)
        mLockPatternUtils.scheduleNonStrongBiometricIdleTimeout(
                KeyguardUpdateMonitor.getCurrentUser());
        scheduleNonStrongBiometricIdleTimeout();

        Trace.endSection();
    }

    /**
     * Schedule 4-hour idle timeout for non-strong biometrics when the device is locked
     */
    private void scheduleNonStrongBiometricIdleTimeout() {
        final int currentUser = KeyguardUpdateMonitor.getCurrentUser();
        // If unlocking with non-strong (i.e. weak or convenience) biometrics is possible, schedule
        // 4hr idle timeout after which non-strong biometrics can't be used to unlock device until
        // unlocking with strong biometric or primary auth (i.e. PIN/pattern/password)
        if (mUpdateMonitor.isUnlockingWithNonStrongBiometricsPossible(currentUser)) {
            if (DEBUG) {
                Log.d(TAG, "scheduleNonStrongBiometricIdleTimeout: schedule an alarm for "
                        + "currentUser=" + currentUser);
            }
            mLockPatternUtils.scheduleNonStrongBiometricIdleTimeout(currentUser);
        }
    }

    private final Runnable mKeyguardGoingAwayRunnable = new Runnable() {
        @Override
        public void run() {
@@ -2947,6 +2960,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
            if (DEBUG) Log.d(TAG, "handleReset");
            mKeyguardViewControllerLazy.get().reset(true /* hideBouncerWhenShowing */);
        }

        scheduleNonStrongBiometricIdleTimeout();
    }

    /**