Merge "Add a checkbox option to 'require password to decrypt'" into lmp-dev

This commit is contained in:
Jim Miller
2014-10-15 18:21:50 +00:00
committed by Android (Google) Code Review
2 changed files with 50 additions and 12 deletions

View File

@@ -6569,6 +6569,15 @@ public final class Settings {
*/ */
public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned"; public static final String NETWORK_SCORING_PROVISIONED = "network_scoring_provisioned";
/**
* Whether the user wants to be prompted for password to decrypt the device on boot.
* This only matters if the storage is encrypted.
* <p>
* Type: int (0 for false, 1 for true)
* @hide
*/
public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
/** /**
* Settings to backup. This is here so that it's in the same place as the settings * Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update. * keys and easy to update.

View File

@@ -33,6 +33,7 @@ import android.os.IBinder;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.SystemClock; import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.os.storage.IMountService; import android.os.storage.IMountService;
@@ -556,11 +557,18 @@ public class LockPatternUtils {
getLockSettings().setLockPattern(patternToString(pattern), userId); getLockSettings().setLockPattern(patternToString(pattern), userId);
DevicePolicyManager dpm = getDevicePolicyManager(); DevicePolicyManager dpm = getDevicePolicyManager();
if (pattern != null) { if (pattern != null) {
// Update the device encryption password.
int userHandle = userId; if (userId == UserHandle.USER_OWNER
if (userHandle == UserHandle.USER_OWNER) { && LockPatternUtils.isDeviceEncryptionEnabled()) {
String stringPattern = patternToString(pattern); final ContentResolver cr = mContext.getContentResolver();
updateEncryptionPassword(StorageManager.CRYPT_TYPE_PATTERN, stringPattern); final boolean required = Settings.Global.getInt(cr,
Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT, 1) == 1 ? true : false;
if (!required) {
clearEncryptionPassword();
} else {
String stringPattern = patternToString(pattern);
updateEncryptionPassword(StorageManager.CRYPT_TYPE_PATTERN, stringPattern);
}
} }
setBoolean(PATTERN_EVER_CHOSEN_KEY, true); setBoolean(PATTERN_EVER_CHOSEN_KEY, true);
@@ -785,13 +793,23 @@ public class LockPatternUtils {
getLockSettings().setLockPassword(password, userHandle); getLockSettings().setLockPassword(password, userHandle);
int computedQuality = computePasswordQuality(password); int computedQuality = computePasswordQuality(password);
if (userHandle == UserHandle.USER_OWNER) { // Update the device encryption password.
// Update the encryption password. if (userHandle == UserHandle.USER_OWNER
int type = computedQuality == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC && LockPatternUtils.isDeviceEncryptionEnabled()) {
|| computedQuality == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX final ContentResolver cr = mContext.getContentResolver();
? StorageManager.CRYPT_TYPE_PIN final boolean required = Settings.Global.getInt(cr,
: StorageManager.CRYPT_TYPE_PASSWORD; Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT, 1) == 1 ? true : false;
updateEncryptionPassword(type, password); if (!required) {
clearEncryptionPassword();
} else {
boolean numeric = computedQuality
== DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
boolean numericComplex = computedQuality
== DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX;
int type = numeric || numericComplex ? StorageManager.CRYPT_TYPE_PIN
: StorageManager.CRYPT_TYPE_PASSWORD;
updateEncryptionPassword(type, password);
}
} }
if (!isFallback) { if (!isFallback) {
@@ -894,6 +912,17 @@ public class LockPatternUtils {
return true; return true;
} }
/**
* Determine if the device supports encryption, even if it's set to default. This
* differs from isDeviceEncrypted() in that it returns true even if the device is
* encrypted with the default password.
* @return true if device encryption is enabled
*/
public static boolean isDeviceEncryptionEnabled() {
final String status = SystemProperties.get("ro.crypto.state", "unsupported");
return "encrypted".equalsIgnoreCase(status);
}
/** /**
* Clears the encryption password. * Clears the encryption password.
*/ */