FileDocCategorySizeDatePackage
KeyguardSecurityModel.javaAPI DocAndroid 5.1 API6374Thu Mar 12 22:22:42 GMT 2015com.android.keyguard

KeyguardSecurityModel

public class KeyguardSecurityModel extends Object

Fields Summary
private android.content.Context
mContext
private com.android.internal.widget.LockPatternUtils
mLockPatternUtils
Constructors Summary
KeyguardSecurityModel(android.content.Context context)

        mContext = context;
        mLockPatternUtils = new LockPatternUtils(context);
    
Methods Summary
com.android.keyguard.KeyguardSecurityModel$SecurityModegetAlternateFor(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.

param
mode the mode we want the alternate for
return
alternate or the given 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$SecurityModegetBackupSecurityMode(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.

return
backup method or current security mode

        switch(mode) {
            case Biometric:
                return getSecurityMode();
            case Pattern:
                return SecurityMode.Account;
        }
        return mode; // no backup, return current security mode
    
com.android.keyguard.KeyguardSecurityModel$SecurityModegetSecurityMode()

        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;
    
booleanisBiometricUnlockEnabled()
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 booleanisBiometricUnlockSuppressed()
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;
    
voidsetLockPatternUtils(com.android.internal.widget.LockPatternUtils utils)

        mLockPatternUtils = utils;