Methods Summary |
---|
com.android.keyguard.KeyguardSecurityModel$SecurityMode | getAlternateFor(com.android.keyguard.KeyguardSecurityModel$SecurityMode mode)Some unlock methods can have an alternate, such as biometric unlocks (e.g. face unlock).
This function decides if an alternate unlock is available and returns it. Otherwise,
returns @param mode.
if (isBiometricUnlockEnabled() && !isBiometricUnlockSuppressed()
&& (mode == SecurityMode.Password
|| mode == SecurityMode.PIN
|| mode == SecurityMode.Pattern)) {
return SecurityMode.Biometric;
}
return mode; // no alternate, return what was given
|
com.android.keyguard.KeyguardSecurityModel$SecurityMode | getBackupSecurityMode(com.android.keyguard.KeyguardSecurityModel$SecurityMode mode)Some unlock methods can have a backup which gives the user another way to get into
the device. This is currently only supported for Biometric and Pattern unlock.
switch(mode) {
case Biometric:
return getSecurityMode();
case Pattern:
return SecurityMode.Account;
}
return mode; // no backup, return current security mode
|
com.android.keyguard.KeyguardSecurityModel$SecurityMode | getSecurityMode()
KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
SecurityMode mode = SecurityMode.None;
if (SubscriptionManager.isValidSubscriptionId(
monitor.getNextSubIdForState(IccCardConstants.State.PIN_REQUIRED))) {
mode = SecurityMode.SimPin;
} else if (SubscriptionManager.isValidSubscriptionId(
monitor.getNextSubIdForState(IccCardConstants.State.PUK_REQUIRED))
&& mLockPatternUtils.isPukUnlockScreenEnable()) {
mode = SecurityMode.SimPuk;
} else {
final int security = mLockPatternUtils.getKeyguardStoredPasswordQuality();
switch (security) {
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
mode = mLockPatternUtils.isLockPasswordEnabled() ?
SecurityMode.PIN : SecurityMode.None;
break;
case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
mode = mLockPatternUtils.isLockPasswordEnabled() ?
SecurityMode.Password : SecurityMode.None;
break;
case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
if (mLockPatternUtils.isLockPatternEnabled()) {
mode = mLockPatternUtils.isPermanentlyLocked() ?
SecurityMode.Account : SecurityMode.Pattern;
}
break;
default:
throw new IllegalStateException("Unknown security quality:" + security);
}
}
return mode;
|
boolean | isBiometricUnlockEnabled()Returns true if biometric unlock is installed and selected. If this returns false there is
no need to even construct the biometric unlock.
return mLockPatternUtils.usingBiometricWeak()
&& mLockPatternUtils.isBiometricWeakInstalled();
|
private boolean | isBiometricUnlockSuppressed()Returns true if a condition is currently suppressing the biometric unlock. If this returns
true there is no need to even construct the biometric unlock.
KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
final boolean backupIsTimedOut = monitor.getFailedUnlockAttempts() >=
LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
return monitor.getMaxBiometricUnlockAttemptsReached() || backupIsTimedOut
|| !monitor.isAlternateUnlockEnabled()
|| monitor.getPhoneState() != TelephonyManager.CALL_STATE_IDLE;
|
void | setLockPatternUtils(com.android.internal.widget.LockPatternUtils utils)
mLockPatternUtils = utils;
|