diff options
author | Jim Miller <jaggies@google.com> | 2014-10-13 18:15:17 -0700 |
---|---|---|
committer | Jim Miller <jaggies@google.com> | 2014-10-14 18:40:30 -0700 |
commit | 46c7f6d6f32efec26bc9343f591ad1ddbe8f3b4a (patch) | |
tree | 2bea20cdff429e942f679ea0616942b569b7a7b8 /src/com/android/settings/ChooseLockGeneric.java | |
parent | 94dce7618584b4ca51bf17937cbd6cb0c22aaaea (diff) | |
download | packages_apps_Settings-46c7f6d6f32efec26bc9343f591ad1ddbe8f3b4a.zip packages_apps_Settings-46c7f6d6f32efec26bc9343f591ad1ddbe8f3b4a.tar.gz packages_apps_Settings-46c7f6d6f32efec26bc9343f591ad1ddbe8f3b4a.tar.bz2 |
Add a checkbox option to 'require password to decrypt'
Fixes bug 17881324
Change-Id: I3f256f448a35cf8104ee6acb4de253874101f7c0
Diffstat (limited to 'src/com/android/settings/ChooseLockGeneric.java')
-rw-r--r-- | src/com/android/settings/ChooseLockGeneric.java | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java index c65aa21..89ba20b 100644 --- a/src/com/android/settings/ChooseLockGeneric.java +++ b/src/com/android/settings/ChooseLockGeneric.java @@ -18,12 +18,16 @@ package com.android.settings; import android.accessibilityservice.AccessibilityServiceInfo; import android.app.Activity; +import android.app.ActivityManagerNative; import android.app.PendingIntent; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; import android.content.pm.UserInfo; import android.os.Bundle; +import android.os.Process; +import android.os.RemoteException; +import android.os.UserHandle; import android.os.UserManager; import android.preference.Preference; import android.preference.PreferenceScreen; @@ -69,11 +73,14 @@ public class ChooseLockGeneric extends SettingsActivity { private static final String KEY_UNLOCK_SET_PATTERN = "unlock_set_pattern"; private static final int CONFIRM_EXISTING_REQUEST = 100; private static final int FALLBACK_REQUEST = 101; + private static final int ENABLE_ENCRYPTION_REQUEST = 102; private static final String PASSWORD_CONFIRMED = "password_confirmed"; private static final String CONFIRM_CREDENTIALS = "confirm_credentials"; private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation"; private static final String FINISH_PENDING = "finish_pending"; public static final String MINIMUM_QUALITY_KEY = "minimum_quality"; + public static final String ENCRYPT_REQUESTED_QUALITY = "encrypt_requested_quality"; + public static final String ENCRYPT_REQUESTED_DISABLED = "encrypt_requested_disabled"; private static final boolean ALWAY_SHOW_TUTORIAL = true; @@ -83,6 +90,8 @@ public class ChooseLockGeneric extends SettingsActivity { private boolean mPasswordConfirmed = false; private boolean mWaitingForConfirmation = false; private boolean mFinishPending = false; + private int mEncryptionRequestQuality; + private boolean mEncryptionRequestDisabled; @Override public void onCreate(Bundle savedInstanceState) { @@ -103,6 +112,9 @@ public class ChooseLockGeneric extends SettingsActivity { mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION); mFinishPending = savedInstanceState.getBoolean(FINISH_PENDING); + mEncryptionRequestQuality = savedInstanceState.getInt(ENCRYPT_REQUESTED_QUALITY); + mEncryptionRequestDisabled = savedInstanceState.getBoolean( + ENCRYPT_REQUESTED_DISABLED); } if (mPasswordConfirmed) { @@ -143,16 +155,16 @@ public class ChooseLockGeneric extends SettingsActivity { updateUnlockMethodAndFinish( DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, false); } else if (KEY_UNLOCK_SET_BIOMETRIC_WEAK.equals(key)) { - updateUnlockMethodAndFinish( + maybeEnableEncryption( DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK, false); }else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { - updateUnlockMethodAndFinish( + maybeEnableEncryption( DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false); } else if (KEY_UNLOCK_SET_PIN.equals(key)) { - updateUnlockMethodAndFinish( + maybeEnableEncryption( DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, false); } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { - updateUnlockMethodAndFinish( + maybeEnableEncryption( DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, false); } else { handled = false; @@ -160,6 +172,24 @@ public class ChooseLockGeneric extends SettingsActivity { return handled; } + /** + * If the device has encryption already enabled, then ask the user if they + * also want to encrypt the phone with this password. + * + * @param quality + * @param disabled + */ + private void maybeEnableEncryption(int quality, boolean disabled) { + if (Process.myUserHandle().isOwner() && LockPatternUtils.isDeviceEncryptionEnabled()) { + mEncryptionRequestQuality = quality; + mEncryptionRequestDisabled = disabled; + Intent intent = EncryptionInterstitial.createStartIntent(getActivity(), quality); + startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST); + } else { + updateUnlockMethodAndFinish(quality, disabled); + } + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -182,10 +212,13 @@ public class ChooseLockGeneric extends SettingsActivity { if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) { mPasswordConfirmed = true; updatePreferencesOrFinish(); - } else if(requestCode == FALLBACK_REQUEST) { + } else if (requestCode == FALLBACK_REQUEST) { mChooseLockSettingsHelper.utils().deleteTempGallery(); getActivity().setResult(resultCode); finish(); + } else if (requestCode == ENABLE_ENCRYPTION_REQUEST + && resultCode == Activity.RESULT_OK) { + updateUnlockMethodAndFinish(mEncryptionRequestQuality, mEncryptionRequestDisabled); } else { getActivity().setResult(Activity.RESULT_CANCELED); finish(); @@ -199,6 +232,8 @@ public class ChooseLockGeneric extends SettingsActivity { outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation); outState.putBoolean(FINISH_PENDING, mFinishPending); + outState.putInt(ENCRYPT_REQUESTED_QUALITY, mEncryptionRequestQuality); + outState.putBoolean(ENCRYPT_REQUESTED_DISABLED, mEncryptionRequestDisabled); } private void updatePreferencesOrFinish() { |