Merge "Add a checkbox option to 'require password to decrypt'" into lmp-dev
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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,12 +557,19 @@ 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()) {
|
||||||
|
final ContentResolver cr = mContext.getContentResolver();
|
||||||
|
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);
|
String stringPattern = patternToString(pattern);
|
||||||
updateEncryptionPassword(StorageManager.CRYPT_TYPE_PATTERN, stringPattern);
|
updateEncryptionPassword(StorageManager.CRYPT_TYPE_PATTERN, stringPattern);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setBoolean(PATTERN_EVER_CHOSEN_KEY, true);
|
setBoolean(PATTERN_EVER_CHOSEN_KEY, true);
|
||||||
if (!isFallback) {
|
if (!isFallback) {
|
||||||
@@ -785,14 +793,24 @@ 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,
|
||||||
|
Settings.Global.REQUIRE_PASSWORD_TO_DECRYPT, 1) == 1 ? true : false;
|
||||||
|
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;
|
: StorageManager.CRYPT_TYPE_PASSWORD;
|
||||||
updateEncryptionPassword(type, password);
|
updateEncryptionPassword(type, password);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!isFallback) {
|
if (!isFallback) {
|
||||||
deleteGallery();
|
deleteGallery();
|
||||||
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user