summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/ChooseLockGeneric.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/ChooseLockGeneric.java')
-rw-r--r--src/com/android/settings/ChooseLockGeneric.java33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index df421a2..88f7ae6 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -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);