Merge "Allowing FaceUnlock with a PIN fixes 5467194"

This commit is contained in:
Steven Ross
2011-11-30 20:48:23 -08:00
committed by Android (Google) Code Review
2 changed files with 33 additions and 9 deletions

View File

@@ -33,6 +33,8 @@ import android.widget.ListView;
import com.android.internal.widget.LockPatternUtils;
import libcore.util.MutableBoolean;
public class ChooseLockGeneric extends PreferenceActivity {
@Override
@@ -167,23 +169,37 @@ public class ChooseLockGeneric extends PreferenceActivity {
if (quality == -1) {
// If caller didn't specify password quality, show UI and allow the user to choose.
quality = intent.getIntExtra(MINIMUM_QUALITY_KEY, -1);
quality = upgradeQuality(quality);
MutableBoolean allowBiometric = new MutableBoolean(false);
quality = upgradeQuality(quality, allowBiometric);
final PreferenceScreen prefScreen = getPreferenceScreen();
if (prefScreen != null) {
prefScreen.removeAll();
}
addPreferencesFromResource(R.xml.security_settings_picker);
disableUnusablePreferences(quality);
disableUnusablePreferences(quality, allowBiometric);
} else {
updateUnlockMethodAndFinish(quality, false);
}
}
private int upgradeQuality(int quality) {
/** increases the quality if necessary, and returns whether biometric is allowed */
private int upgradeQuality(int quality, MutableBoolean allowBiometric) {
quality = upgradeQualityForDPM(quality);
quality = upgradeQualityForEncryption(quality);
quality = upgradeQualityForKeyStore(quality);
return quality;
int encryptionQuality = upgradeQualityForEncryption(quality);
if (encryptionQuality > quality) {
//The first case checks whether biometric is allowed, prior to the user making
//their selection from the list
if (allowBiometric != null) {
allowBiometric.value = quality <=
DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
//When the user has selected biometric we shouldn't change that due to
//encryption
return quality;
}
}
return encryptionQuality;
}
private int upgradeQualityForDPM(int quality) {
@@ -228,7 +244,7 @@ public class ChooseLockGeneric extends PreferenceActivity {
*
* @param quality the requested quality.
*/
private void disableUnusablePreferences(final int quality) {
private void disableUnusablePreferences(final int quality, MutableBoolean allowBiometric) {
final PreferenceScreen entries = getPreferenceScreen();
final boolean onlyShowFallback = getActivity().getIntent()
.getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false);
@@ -245,7 +261,8 @@ public class ChooseLockGeneric extends PreferenceActivity {
} else if (KEY_UNLOCK_SET_NONE.equals(key)) {
enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
} else if (KEY_UNLOCK_SET_BIOMETRIC_WEAK.equals(key)) {
enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK ||
allowBiometric.value;
visible = weakBiometricAvailable; // If not available, then don't show it.
} else if (KEY_UNLOCK_SET_PATTERN.equals(key)) {
enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
@@ -311,7 +328,7 @@ public class ChooseLockGeneric extends PreferenceActivity {
final boolean isFallback = getActivity().getIntent()
.getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false);
quality = upgradeQuality(quality);
quality = upgradeQuality(quality, null);
if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
int minLength = mDPM.getPasswordMinimumLength(null);

View File

@@ -159,7 +159,14 @@ public class CryptKeeperSettings extends Fragment {
*/
private boolean runKeyguardConfirmation(int request) {
// 1. Confirm that we have a sufficient PIN/Password to continue
int quality = new LockPatternUtils(getActivity()).getActivePasswordQuality();
LockPatternUtils lockPatternUtils = new LockPatternUtils(getActivity());
int quality = lockPatternUtils.getActivePasswordQuality();
if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK
&& lockPatternUtils.isLockPasswordEnabled()) {
// Use the alternate as the quality. We expect this to be
// PASSWORD_QUALITY_SOMETHING(pattern) or PASSWORD_QUALITY_NUMERIC(PIN).
quality = lockPatternUtils.getKeyguardStoredPasswordQuality();
}
if (quality < MIN_PASSWORD_QUALITY) {
return false;
}