Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7c32555 authored by Jim Miller's avatar Jim Miller Committed by Android (Google) Code Review
Browse files

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

parents 2c3886cb 6848dc8e
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -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.
+41 −12
Original line number Original line Diff line number Diff line
@@ -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.
     */
     */