diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-02-11 16:15:31 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-02-11 16:15:31 +0000 |
commit | 6bc18b46d1fe1574db3c46b9128ade1aa7977247 (patch) | |
tree | fb2f26c31e790704f0e519620844fc39dbb1c782 | |
parent | e74f0df1481ec152b90045f34ad33691f53a91e6 (diff) | |
parent | e99efc074e3092efceee3523a9a34a2f1b574793 (diff) | |
download | base-6bc18b46d1fe1574db3c46b9128ade1aa7977247.tar.gz |
Merge cherrypicks of ['googleplex-android-review.googlesource.com/21273360'] into tm-qpr2-b-release.
Change-Id: I6aaecb8d1029aff6e587f7cbf560f8b298a974cb
-rw-r--r-- | packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java | 18 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java | 25 |
2 files changed, 38 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 93027c1914ee..7ae61cd8e2ab 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -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; @@ -2963,6 +2964,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) { diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index e0def25fd8d3..1b0356141432 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -2418,15 +2418,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() { @@ -2920,6 +2933,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, if (DEBUG) Log.d(TAG, "handleReset"); mKeyguardViewControllerLazy.get().reset(true /* hideBouncerWhenShowing */); } + + scheduleNonStrongBiometricIdleTimeout(); } /** |