ChooseLockGeneric.java revision bc18b40623316f308bc21dd78f840ade73b89257
1abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn/* 2abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * Copyright (C) 2010 The Android Open Source Project 3abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * 4abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * you may not use this file except in compliance with the License. 6abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * You may obtain a copy of the License at 7abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * 8abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * 10abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * See the License for the specific language governing permissions and 14abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * limitations under the License. 15abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn */ 16abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 17abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornpackage com.android.settings; 18abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 19524484426855f814ff1f3189fd5221dd630dbf8cSvetoslavimport android.accessibilityservice.AccessibilityServiceInfo; 2017e9e1933055b207473b488595b2887bfcaea32eJim Millerimport android.app.Activity; 213bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.AlertDialog; 223bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.Dialog; 233bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.DialogFragment; 2452c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lamimport android.app.Fragment; 253bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.FragmentManager; 264037c7f27c849a1ada0980ad881636fc940a0b85Dianne Hackbornimport android.app.admin.DevicePolicyManager; 27abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Context; 283bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.content.DialogInterface; 29abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Intent; 30751de372750336c2dbc6ed656de84b881ede0858Ricky Waiimport android.content.pm.UserInfo; 3139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.Fingerprint; 3239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager; 3339b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager.RemovalCallback; 34abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.os.Bundle; 3546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.os.Process; 365437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roosimport android.os.UserHandle; 37f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chenimport android.os.UserManager; 3823c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrenceimport android.os.storage.StorageManager; 39d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstromimport android.security.KeyStore; 4039b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 4139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 4262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roosimport android.text.TextUtils; 4327d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich canningsimport android.util.EventLog; 443bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.util.Log; 4587fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lamimport android.view.View; 46524484426855f814ff1f3189fd5221dd630dbf8cSvetoslavimport android.view.accessibility.AccessibilityManager; 47d16c9b7c3100b7ba653dcd58db036500dd220896Jim Millerimport android.widget.Toast; 48d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller 499d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 506465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunneimport com.android.internal.widget.LockPatternUtils; 519c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils; 529c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedPreference; 539c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka 54751de372750336c2dbc6ed656de84b881ede0858Ricky Waiimport java.util.List; 55751de372750336c2dbc6ed656de84b881ede0858Ricky Wai 569c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 576465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunne 58263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Megliopublic class ChooseLockGeneric extends SettingsActivity { 590698a216311acd9ab52224602d1a75c08bf89f04Jim Miller public static final String CONFIRM_CREDENTIALS = "confirm_credentials"; 60abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 61abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn @Override 6217e9e1933055b207473b488595b2887bfcaea32eJim Miller public Intent getIntent() { 6317e9e1933055b207473b488595b2887bfcaea32eJim Miller Intent modIntent = new Intent(super.getIntent()); 6452c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam modIntent.putExtra(EXTRA_SHOW_FRAGMENT, getFragmentClass().getName()); 6592779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini 6692779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini String action = modIntent.getAction(); 6792779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini if (DevicePolicyManager.ACTION_SET_NEW_PASSWORD.equals(action) 6892779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini || DevicePolicyManager.ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals(action)) { 6992779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini modIntent.putExtra(EXTRA_HIDE_DRAWER, true); 7092779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini } 7117e9e1933055b207473b488595b2887bfcaea32eJim Miller return modIntent; 72a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani } 73a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani 74a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani @Override 75a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani protected boolean isValidFragment(String fragmentName) { 76a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani if (ChooseLockGenericFragment.class.getName().equals(fragmentName)) return true; 77a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani return false; 7817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 79bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 8052c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam /* package */ Class<? extends Fragment> getFragmentClass() { 8152c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam return ChooseLockGenericFragment.class; 8252c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam } 8352c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam 8466026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani public static class InternalActivity extends ChooseLockGeneric { 8566026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 8666026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani 8717e9e1933055b207473b488595b2887bfcaea32eJim Miller public static class ChooseLockGenericFragment extends SettingsPreferenceFragment { 883fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final String TAG = "ChooseLockGenericFragment"; 8917e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final int MIN_PASSWORD_LENGTH = 4; 9017e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_OFF = "unlock_set_off"; 9117e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_NONE = "unlock_set_none"; 9217e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PIN = "unlock_set_pin"; 9317e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PASSWORD = "unlock_set_password"; 9417e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PATTERN = "unlock_set_pattern"; 95e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic private static final String KEY_UNLOCK_SET_MANAGED = "unlock_set_managed"; 9617e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String PASSWORD_CONFIRMED = "password_confirmed"; 9747f1cd4325e839dd33273a451fa052e83789e483Jim Miller private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation"; 98d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom public static final String MINIMUM_QUALITY_KEY = "minimum_quality"; 993fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller public static final String HIDE_DISABLED_PREFS = "hide_disabled_prefs"; 10046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_QUALITY = "encrypt_requested_quality"; 10146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_DISABLED = "encrypt_requested_disabled"; 1023bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public static final String TAG_FRP_WARNING_DIALOG = "frp_warning_dialog"; 10317e9e1933055b207473b488595b2887bfcaea32eJim Miller 1043fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CONFIRM_EXISTING_REQUEST = 100; 1053fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int ENABLE_ENCRYPTION_REQUEST = 101; 1063fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CHOOSE_LOCK_REQUEST = 102; 10780412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett 10817e9e1933055b207473b488595b2887bfcaea32eJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 10917e9e1933055b207473b488595b2887bfcaea32eJim Miller private DevicePolicyManager mDPM; 110d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private KeyStore mKeyStore; 1116609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private boolean mHasChallenge = false; 1126609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private long mChallenge; 11317e9e1933055b207473b488595b2887bfcaea32eJim Miller private boolean mPasswordConfirmed = false; 11447f1cd4325e839dd33273a451fa052e83789e483Jim Miller private boolean mWaitingForConfirmation = false; 11546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private int mEncryptionRequestQuality; 11646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private boolean mEncryptionRequestDisabled; 1170698a216311acd9ab52224602d1a75c08bf89f04Jim Miller private boolean mRequirePassword; 11862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private boolean mForChangeCredRequiredForBoot = false; 119a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales private String mUserPassword; 1200698a216311acd9ab52224602d1a75c08bf89f04Jim Miller private LockPatternUtils mLockPatternUtils; 1219218687e4baaf0226ef16b58f78123d979711e5dJim Miller private FingerprintManager mFingerprintManager; 122fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri private int mUserId; 12392779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini private boolean mHideDrawer = false; 124e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic private ManagedLockPasswordProvider mManagedPasswordProvider; 12517e9e1933055b207473b488595b2887bfcaea32eJim Miller 1268ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected boolean mForFingerprint = false; 1278ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 12817e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 1298a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 1309d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.CHOOSE_LOCK_GENERIC; 1318a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 1328a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 1338a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 13417e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onCreate(Bundle savedInstanceState) { 13517e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onCreate(savedInstanceState); 13617e9e1933055b207473b488595b2887bfcaea32eJim Miller 1379218687e4baaf0226ef16b58f78123d979711e5dJim Miller mFingerprintManager = 1389218687e4baaf0226ef16b58f78123d979711e5dJim Miller (FingerprintManager) getActivity().getSystemService(Context.FINGERPRINT_SERVICE); 13917e9e1933055b207473b488595b2887bfcaea32eJim Miller mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 140d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom mKeyStore = KeyStore.getInstance(); 14117e9e1933055b207473b488595b2887bfcaea32eJim Miller mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this.getActivity()); 1420698a216311acd9ab52224602d1a75c08bf89f04Jim Miller mLockPatternUtils = new LockPatternUtils(getActivity()); 14317e9e1933055b207473b488595b2887bfcaea32eJim Miller 144c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett // Defaults to needing to confirm credentials 145c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett final boolean confirmCredentials = getActivity().getIntent() 146c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett .getBooleanExtra(CONFIRM_CREDENTIALS, true); 14766026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani if (getActivity() instanceof ChooseLockGeneric.InternalActivity) { 14866026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani mPasswordConfirmed = !confirmCredentials; 14966026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 15092779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini mHideDrawer = getActivity().getIntent().getBooleanExtra(EXTRA_HIDE_DRAWER, false); 151c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett 1526609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mHasChallenge = getActivity().getIntent().getBooleanExtra( 1536609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false); 1546609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mChallenge = getActivity().getIntent().getLongExtra( 1556609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0); 156c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint = getActivity().getIntent().getBooleanExtra( 157c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false); 15862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mForChangeCredRequiredForBoot = getArguments() != null && getArguments().getBoolean( 15962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT); 1606609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 16117e9e1933055b207473b488595b2887bfcaea32eJim Miller if (savedInstanceState != null) { 16217e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); 16347f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION); 16446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = savedInstanceState.getInt(ENCRYPT_REQUESTED_QUALITY); 16546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = savedInstanceState.getBoolean( 16646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller ENCRYPT_REQUESTED_DISABLED); 16717e9e1933055b207473b488595b2887bfcaea32eJim Miller } 168bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 169ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz int targetUser = Utils.getSecureTargetUser( 170ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz getActivity().getActivityToken(), 171ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz UserManager.get(getActivity()), 172ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz null, 173ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz getActivity().getIntent().getExtras()).getIdentifier(); 174ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz if (DevicePolicyManager.ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals( 175ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz getActivity().getIntent().getAction()) || 176ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz !mLockPatternUtils.isSeparateProfileChallengeAllowed(targetUser)) { 177ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz // Always use parent if explicitely requested or if profile challenge is not 178ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz // supported 1797f2a013619fee267c1d4d6b0cc352444eef2de07Clara Bayarri Bundle arguments = getArguments(); 1807f2a013619fee267c1d4d6b0cc352444eef2de07Clara Bayarri mUserId = Utils.getUserIdFromBundle(getContext(), arguments != null ? arguments 1817f2a013619fee267c1d4d6b0cc352444eef2de07Clara Bayarri : getActivity().getIntent().getExtras()); 182ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz } else { 183ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz mUserId = targetUser; 184ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz } 185fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri 186bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra if (DevicePolicyManager.ACTION_SET_NEW_PASSWORD 187bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra .equals(getActivity().getIntent().getAction()) 188bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra && Utils.isManagedProfile(UserManager.get(getActivity()), mUserId) 189bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra && mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId)) { 190bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra getActivity().setTitle(R.string.lock_settings_picker_title_profile); 191bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra } 192bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra 193e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic mManagedPasswordProvider = ManagedLockPasswordProvider.get(getActivity(), mUserId); 194e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 19547f1cd4325e839dd33273a451fa052e83789e483Jim Miller if (mPasswordConfirmed) { 19647f1cd4325e839dd33273a451fa052e83789e483Jim Miller updatePreferencesOrFinish(); 19762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 19862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos maybeEnableEncryption(mLockPatternUtils.getKeyguardStoredPasswordQuality( 19962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mUserId), false); 20062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 20147f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else if (!mWaitingForConfirmation) { 2026370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler ChooseLockSettingsHelper helper = 2036370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler new ChooseLockSettingsHelper(this.getActivity(), this); 2044bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai boolean managedProfileWithUnifiedLock = Utils 2054bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai .isManagedProfile(UserManager.get(getActivity()), mUserId) 2064bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai && !mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId); 2074bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai if (managedProfileWithUnifiedLock 2084bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai || !helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, 209fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri getString(R.string.unlock_set_unlock_launch_picker_title), true, mUserId)) { 21017e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; // no password set, so no need to confirm 21117e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 21247f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else { 21347f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = true; 21417e9e1933055b207473b488595b2887bfcaea32eJim Miller } 215bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 2168ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addHeaderView(); 2178ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini } 2188ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 2198ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected void addHeaderView() { 22087fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam if (mForFingerprint) { 22139b467482d1bf256a111c757e9b7621c6f523271Jason Monk setHeaderView(R.layout.choose_lock_generic_fingerprint_header); 22287fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 22387fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 22487fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam 22587fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam @Override 22639b467482d1bf256a111c757e9b7621c6f523271Jason Monk public boolean onPreferenceTreeClick(Preference preference) { 22717e9e1933055b207473b488595b2887bfcaea32eJim Miller final String key = preference.getKey(); 22827d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich cannings 229fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(mUserId)) { 2303bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Show the disabling FRP warning only when the user is switching from a secure 2313bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // unlock method to an insecure one 2323bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang showFactoryResetProtectionWarningDialog(key); 2333bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return true; 23417e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 2353bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return setUnlockMethod(key); 23617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 237bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 238bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 23946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller /** 24046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * If the device has encryption already enabled, then ask the user if they 24146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * also want to encrypt the phone with this password. 24246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * 24346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param quality 24446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param disabled 24546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller */ 246a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // TODO: why does this take disabled, its always called with a quality higher than 247a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // what makes sense with disabled == true 24846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private void maybeEnableEncryption(int quality, boolean disabled) { 249146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); 250f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen if (UserManager.get(getActivity()).isAdminUser() 25193bcfcb14d42ea0884b922ae1a4d84a6955ed835Clara Bayarri && mUserId == UserHandle.myUserId() 252f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen && LockPatternUtils.isDeviceEncryptionEnabled() 253fb4c583dba1fb8885ff9369bdab916eaa61b42bdPaul Lawrence && !LockPatternUtils.isFileEncryptionEnabled() 254146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov && !dpm.getDoNotAskCredentialsOnBoot()) { 25546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = quality; 25646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = disabled; 257edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // Get the intent that the encryption interstitial should start for creating 258edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // the new unlock method. 259edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent unlockMethodIntent = getIntentForUnlockMethod(quality, disabled); 26062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos unlockMethodIntent.putExtra( 26162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT, 26262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mForChangeCredRequiredForBoot); 263ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final Context context = getActivity(); 2640698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // If accessibility is enabled and the user hasn't seen this dialog before, set the 2650698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // default state to agree with that which is compatible with accessibility 2660698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // (password not required). 267ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final boolean accEn = AccessibilityManager.getInstance(context).isEnabled(); 2680698a216311acd9ab52224602d1a75c08bf89f04Jim Miller final boolean required = mLockPatternUtils.isCredentialRequiredToDecrypt(!accEn); 269edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = getEncryptionInterstitialIntent(context, quality, required, 270edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 271c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, 272c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint); 27392779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini intent.putExtra(EXTRA_HIDE_DRAWER, mHideDrawer); 27446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST); 27546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } else { 27662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 27762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // Welp, couldn't change it. Oh well. 27862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 27962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return; 28062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 2810698a216311acd9ab52224602d1a75c08bf89f04Jim Miller mRequirePassword = false; // device encryption not enabled or not device owner. 28246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller updateUnlockMethodAndFinish(quality, disabled); 28346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 28446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 28546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller 28617e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 28717e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onActivityResult(int requestCode, int resultCode, Intent data) { 28817e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onActivityResult(requestCode, resultCode, data); 28947f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = false; 29017e9e1933055b207473b488595b2887bfcaea32eJim Miller if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) { 29117e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; 292a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales mUserPassword = data.getStringExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 29317e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 29462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 29562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (!TextUtils.isEmpty(mUserPassword)) { 29662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos maybeEnableEncryption( 29762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId), false); 29862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else { 29962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 30062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 30162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 302e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } else if (requestCode == CHOOSE_LOCK_REQUEST 303e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam || requestCode == ENABLE_ENCRYPTION_REQUEST) { 30477181e947860056fb77d24ab9fa9e86365b244e6Adrian Roos if (resultCode != RESULT_CANCELED || mForChangeCredRequiredForBoot) { 305e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam getActivity().setResult(resultCode, data); 306e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam finish(); 307e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } 30817e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 30917e9e1933055b207473b488595b2887bfcaea32eJim Miller getActivity().setResult(Activity.RESULT_CANCELED); 31017e9e1933055b207473b488595b2887bfcaea32eJim Miller finish(); 31117e9e1933055b207473b488595b2887bfcaea32eJim Miller } 31262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (requestCode == Activity.RESULT_CANCELED && mForChangeCredRequiredForBoot) { 31362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 31462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 315bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 316bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 31717e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 31817e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onSaveInstanceState(Bundle outState) { 31917e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onSaveInstanceState(outState); 32017e9e1933055b207473b488595b2887bfcaea32eJim Miller // Saved so we don't force user to re-enter their password if configuration changes 32117e9e1933055b207473b488595b2887bfcaea32eJim Miller outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); 32247f1cd4325e839dd33273a451fa052e83789e483Jim Miller outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation); 32346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putInt(ENCRYPT_REQUESTED_QUALITY, mEncryptionRequestQuality); 32446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putBoolean(ENCRYPT_REQUESTED_DISABLED, mEncryptionRequestDisabled); 32517e9e1933055b207473b488595b2887bfcaea32eJim Miller } 326bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 32717e9e1933055b207473b488595b2887bfcaea32eJim Miller private void updatePreferencesOrFinish() { 3285541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller Intent intent = getActivity().getIntent(); 3295541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller int quality = intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); 33017e9e1933055b207473b488595b2887bfcaea32eJim Miller if (quality == -1) { 3316370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // If caller didn't specify password quality, show UI and allow the user to choose. 3325541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller quality = intent.getIntExtra(MINIMUM_QUALITY_KEY, -1); 333f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos quality = upgradeQuality(quality); 3343fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller final boolean hideDisabledPrefs = intent.getBooleanExtra( 3353fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller HIDE_DISABLED_PREFS, false); 33617e9e1933055b207473b488595b2887bfcaea32eJim Miller final PreferenceScreen prefScreen = getPreferenceScreen(); 33717e9e1933055b207473b488595b2887bfcaea32eJim Miller if (prefScreen != null) { 33817e9e1933055b207473b488595b2887bfcaea32eJim Miller prefScreen.removeAll(); 33917e9e1933055b207473b488595b2887bfcaea32eJim Miller } 3408ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addPreferences(); 3413fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferences(quality, hideDisabledPrefs); 342bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini updatePreferenceText(); 3439a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk updateCurrentPreference(); 344524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav updatePreferenceSummaryIfNeeded(); 34517e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 34617e9e1933055b207473b488595b2887bfcaea32eJim Miller updateUnlockMethodAndFinish(quality, false); 347bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 348abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 349bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 3508ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected void addPreferences() { 3518ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addPreferencesFromResource(R.xml.security_settings_picker); 352a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey 353a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey // Used for testing purposes 354a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey findPreference(KEY_UNLOCK_SET_NONE).setViewId(R.id.lock_none); 355a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey findPreference(KEY_UNLOCK_SET_PIN).setViewId(R.id.lock_pin); 356a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey findPreference(KEY_UNLOCK_SET_PASSWORD).setViewId(R.id.lock_password); 3578ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini } 3588ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 359bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini private void updatePreferenceText() { 360bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini if (mForFingerprint) { 361bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini Preference pattern = findPreference(KEY_UNLOCK_SET_PATTERN); 362bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini pattern.setTitle(R.string.fingerprint_unlock_set_unlock_pattern); 363bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini 364bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini Preference pin = findPreference(KEY_UNLOCK_SET_PIN); 365bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini pin.setTitle(R.string.fingerprint_unlock_set_unlock_pin); 366bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini 367bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini Preference password = findPreference(KEY_UNLOCK_SET_PASSWORD); 368bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini password.setTitle(R.string.fingerprint_unlock_set_unlock_password); 369bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini } 370e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 371e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic if (mManagedPasswordProvider.isSettingManagedPasswordSupported()) { 372e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic Preference managed = findPreference(KEY_UNLOCK_SET_MANAGED); 373e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic managed.setTitle(mManagedPasswordProvider.getPickerOptionTitle(mForFingerprint)); 374e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else { 375e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic removePreference(KEY_UNLOCK_SET_MANAGED); 376e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } 377bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini } 378bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini 3799a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private void updateCurrentPreference() { 3809a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk String currentKey = getKeyForCurrent(); 3819a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk Preference preference = findPreference(currentKey); 3829a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk if (preference != null) { 3839a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk preference.setSummary(R.string.current_screen_lock); 3849a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 3859a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 3869a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk 3879a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private String getKeyForCurrent() { 388e07c947ea35b07eb354dd43068a5670dd6cce2efJason Monk final int credentialOwner = UserManager.get(getContext()) 389e07c947ea35b07eb354dd43068a5670dd6cce2efJason Monk .getCredentialOwnerProfile(mUserId); 3907402b2514358e02a0e0adde982b6deb8552dc28aClara Bayarri if (mLockPatternUtils.isLockScreenDisabled(credentialOwner)) { 3919a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_OFF; 3929a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 3937402b2514358e02a0e0adde982b6deb8552dc28aClara Bayarri switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(credentialOwner)) { 3949a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 3959a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PATTERN; 3969a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 3979a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 3989a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PIN; 3999a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 4009a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 401e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 4029a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PASSWORD; 403e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 404e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic return KEY_UNLOCK_SET_MANAGED; 4059a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED: 4069a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_NONE; 4079a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4089a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return null; 4099a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4109a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk 411f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos /** increases the quality if necessary */ 412f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos private int upgradeQuality(int quality) { 413d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = upgradeQualityForDPM(quality); 414b05f39d186d8ce1b53bb4da3cb4c2cd22986f513Paul Lawrence return quality; 415d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 416d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 417d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private int upgradeQualityForDPM(int quality) { 418d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom // Compare min allowed password quality 41925c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int minQuality = mDPM.getPasswordQuality(null, mUserId); 420d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom if (quality < minQuality) { 421d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = minQuality; 422d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 423d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom return quality; 424d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 425d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 42617e9e1933055b207473b488595b2887bfcaea32eJim Miller /*** 427df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * Disables preferences that are less secure than required quality. The actual 428df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * implementation is in disableUnusablePreferenceImpl. 429df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * 430df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param quality the requested quality. 4313fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * @param hideDisabledPrefs if false preferences show why they were disabled; otherwise 4323fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * they're not shown at all. 433df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang */ 4343fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller protected void disableUnusablePreferences(final int quality, boolean hideDisabledPrefs) { 4353fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferencesImpl(quality, hideDisabledPrefs); 436df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 437df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang 438df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang /*** 43917e9e1933055b207473b488595b2887bfcaea32eJim Miller * Disables preferences that are less secure than required quality. 44017e9e1933055b207473b488595b2887bfcaea32eJim Miller * 44117e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param quality the requested quality. 442df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param hideDisabled whether to hide disable screen lock options. 44317e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 444df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang protected void disableUnusablePreferencesImpl(final int quality, 445f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos boolean hideDisabled) { 446cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani final PreferenceScreen entries = getPreferenceScreen(); 447783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller 44825c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int adminEnforcedQuality = mDPM.getPasswordQuality(null, mUserId); 4499c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka EnforcedAdmin enforcedAdmin = RestrictedLockUtils.checkIfPasswordQualityIsSet( 450f755baf1c3b8fcbcee68720c8367e03381fffb4bSudheer Shanka getActivity(), mUserId); 451cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani for (int i = entries.getPreferenceCount() - 1; i >= 0; --i) { 452cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani Preference pref = entries.getPreference(i); 4539c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka if (pref instanceof RestrictedPreference) { 454591dc85017ea19e56c416ae6d1a55b82e29743f4Adrian Roos final String key = pref.getKey(); 45517e9e1933055b207473b488595b2887bfcaea32eJim Miller boolean enabled = true; 4565541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller boolean visible = true; 4579c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka boolean disabledByAdmin = false; 458cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani if (KEY_UNLOCK_SET_OFF.equals(key)) { 45917e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 46005c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi if (getResources().getBoolean(R.bool.config_hide_none_security_option)) { 46105c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi enabled = false; 46205c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi visible = false; 46305c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi } 4649c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 4659c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 46617e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_NONE.equals(key)) { 4676934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri if (mUserId != UserHandle.myUserId()) { 4686934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri // Swipe doesn't make sense for profiles. 4696934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri visible = false; 4706934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri } 47117e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 4729c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 4739c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 47417e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { 47517e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 4769c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 4779c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 47817e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PIN.equals(key)) { 4798fd852e7c2f488650095024aca9c51f8c7ddc3b3Nicolas Prevot enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; 4809c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 4819c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; 48217e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { 48317e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; 4849c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 4859c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; 486e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else if (KEY_UNLOCK_SET_MANAGED.equals(key)) { 487e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_MANAGED 488e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic && mManagedPasswordProvider.isManagedPasswordChoosable(); 489e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic disabledByAdmin = adminEnforcedQuality 490e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic > DevicePolicyManager.PASSWORD_QUALITY_MANAGED; 49117e9e1933055b207473b488595b2887bfcaea32eJim Miller } 492df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang if (hideDisabled) { 493591dc85017ea19e56c416ae6d1a55b82e29743f4Adrian Roos visible = enabled; 494df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 495f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos if (!visible) { 496cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani entries.removePreference(pref); 4979c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else if (disabledByAdmin && enforcedAdmin != null) { 4989c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(enforcedAdmin); 4995541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (!enabled) { 5009c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // we need to setDisabledByAdmin to null first to disable the padlock 5019c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // in case it was set earlier. 5029c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 50317e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setSummary(R.string.unlock_set_unlock_disabled_summary); 50417e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setEnabled(false); 5059c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else { 5069c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 50717e9e1933055b207473b488595b2887bfcaea32eJim Miller } 508bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 509bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 510bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 511bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 512524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav private void updatePreferenceSummaryIfNeeded() { 51323c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence // On a default block encrypted device with accessibility, add a warning 51423c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence // that your data is not credential encrypted 51523c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence if (!StorageManager.isBlockEncrypted()) { 51623c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence return; 51723c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence } 51823c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence 51923c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence if (StorageManager.isNonDefaultBlockEncrypted()) { 52040ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav return; 52140ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav } 52240ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav 523524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav if (AccessibilityManager.getInstance(getActivity()).getEnabledAccessibilityServiceList( 524524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav AccessibilityServiceInfo.FEEDBACK_ALL_MASK).isEmpty()) { 525524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav return; 526524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 527524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 528524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav CharSequence summary = getString(R.string.secure_lock_encryption_warning); 529524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 530524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav PreferenceScreen screen = getPreferenceScreen(); 531524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav final int preferenceCount = screen.getPreferenceCount(); 532524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav for (int i = 0; i < preferenceCount; i++) { 533524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav Preference preference = screen.getPreference(i); 534524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav switch (preference.getKey()) { 535524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PATTERN: 536524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PIN: 537e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case KEY_UNLOCK_SET_PASSWORD: 538e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case KEY_UNLOCK_SET_MANAGED: { 539524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav preference.setSummary(summary); 540524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } break; 541524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 542524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 543524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 544524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 545e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic protected Intent getLockManagedPasswordIntent(boolean requirePassword, String password) { 546e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic return mManagedPasswordProvider.createIntent(requirePassword, password); 547e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } 548e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 5496b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam protected Intent getLockPasswordIntent(Context context, int quality, 550f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos int minLength, final int maxLength, 551fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri boolean requirePasswordToDecrypt, boolean confirmCredentials, int userId) { 552f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos return ChooseLockPassword.createIntent(context, quality, minLength, 553fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, requirePasswordToDecrypt, confirmCredentials, userId); 5546b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 5556b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 5566609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales protected Intent getLockPasswordIntent(Context context, int quality, 5576609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales int minLength, final int maxLength, 558fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri boolean requirePasswordToDecrypt, long challenge, int userId) { 5596609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales return ChooseLockPassword.createIntent(context, quality, minLength, 560fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, requirePasswordToDecrypt, challenge, userId); 5616609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 5626609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 5633859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam protected Intent getLockPasswordIntent(Context context, int quality, int minLength, 564fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri int maxLength, boolean requirePasswordToDecrypt, String password, int userId) { 565a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales return ChooseLockPassword.createIntent(context, quality, minLength, maxLength, 566fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri requirePasswordToDecrypt, password, userId); 567a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales } 568a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales 569f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 570fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri final boolean confirmCredentials, int userId) { 571f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos return ChooseLockPattern.createIntent(context, requirePassword, 572fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri confirmCredentials, userId); 5736b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 5746b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 5756609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 576fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri long challenge, int userId) { 577fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri return ChooseLockPattern.createIntent(context, requirePassword, challenge, userId); 5786609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 5796609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 5803859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 581fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri final String pattern, int userId) { 582fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri return ChooseLockPattern.createIntent(context, requirePassword, pattern, userId); 583a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales } 584a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales 585ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam protected Intent getEncryptionInterstitialIntent(Context context, int quality, 586edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini boolean required, Intent unlockMethodIntent) { 587edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return EncryptionInterstitial.createStartIntent(context, quality, required, 588edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 589ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam } 590ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam 5915541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller /** 59217e9e1933055b207473b488595b2887bfcaea32eJim Miller * Invokes an activity to change the user's pattern, password or PIN based on given quality 59317e9e1933055b207473b488595b2887bfcaea32eJim Miller * and minimum quality specified by DevicePolicyManager. If quality is 59417e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED}, password is cleared. 59517e9e1933055b207473b488595b2887bfcaea32eJim Miller * 5966370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler * @param quality the desired quality. Ignored if DevicePolicyManager requires more security 59717e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param disabled whether or not to show LockScreen at all. Only meaningful when quality is 59817e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED} 59917e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 60017e9e1933055b207473b488595b2887bfcaea32eJim Miller void updateUnlockMethodAndFinish(int quality, boolean disabled) { 6016370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // Sanity check. We should never get here without confirming user's existing password. 60217e9e1933055b207473b488595b2887bfcaea32eJim Miller if (!mPasswordConfirmed) { 6036370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler throw new IllegalStateException("Tried to update password without confirming it"); 60417e9e1933055b207473b488595b2887bfcaea32eJim Miller } 605bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 606f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos quality = upgradeQuality(quality); 607edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = getIntentForUnlockMethod(quality, disabled); 608edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (intent != null) { 609edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini startActivityForResult(intent, CHOOSE_LOCK_REQUEST); 610edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return; 611edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 612edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini 613edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { 6144bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword); 615edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChooseLockSettingsHelper.utils().clearLock(mUserId); 616edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId); 617751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeAllFingerprintForUserAndFinish(mUserId); 618edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini getActivity().setResult(Activity.RESULT_OK); 619edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } else { 620751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeAllFingerprintForUserAndFinish(mUserId); 621edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 622edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 623c620ba41ce20e683aad3d124b3866cadaddcc87dSteven Ross 624edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini private Intent getIntentForUnlockMethod(int quality, boolean disabled) { 625edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = null; 6266b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam final Context context = getActivity(); 627e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic if (quality >= DevicePolicyManager.PASSWORD_QUALITY_MANAGED) { 628e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic intent = getLockManagedPasswordIntent(mRequirePassword, mUserPassword); 629e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { 63025c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int minLength = mDPM.getPasswordMinimumLength(null, mUserId); 63117e9e1933055b207473b488595b2887bfcaea32eJim Miller if (minLength < MIN_PASSWORD_LENGTH) { 63217e9e1933055b207473b488595b2887bfcaea32eJim Miller minLength = MIN_PASSWORD_LENGTH; 63317e9e1933055b207473b488595b2887bfcaea32eJim Miller } 63417e9e1933055b207473b488595b2887bfcaea32eJim Miller final int maxLength = mDPM.getPasswordMaximumLength(quality); 6356609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales if (mHasChallenge) { 6366609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPasswordIntent(context, quality, minLength, 637fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, mRequirePassword, mChallenge, mUserId); 6386609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } else { 6396609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPasswordIntent(context, quality, minLength, 640edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini maxLength, mRequirePassword, mUserPassword, mUserId); 6416609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 64217e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { 6436609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales if (mHasChallenge) { 6446609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPatternIntent(context, mRequirePassword, 645edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChallenge, mUserId); 6466609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } else { 6476609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPatternIntent(context, mRequirePassword, 648edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mUserPassword, mUserId); 6496609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 65017e9e1933055b207473b488595b2887bfcaea32eJim Miller } 65192779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini if (intent != null) { 65292779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini intent.putExtra(EXTRA_HIDE_DRAWER, mHideDrawer); 65392779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini } 654edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return intent; 655abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 656b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 657751de372750336c2dbc6ed656de84b881ede0858Ricky Wai private void removeAllFingerprintForUserAndFinish(final int userId) { 658c2f6813a836014a5b38bcfaa24fe9e91671f4646Jim Miller if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected() 659751de372750336c2dbc6ed656de84b881ede0858Ricky Wai && mFingerprintManager.hasEnrolledFingerprints(userId)) { 660751de372750336c2dbc6ed656de84b881ede0858Ricky Wai mFingerprintManager.setActiveUser(userId); 6615a8e522c6c3d71164f9d84ef98461de5dff4ccefJim Miller // For the purposes of M and N, groupId is the same as userId. 6625a8e522c6c3d71164f9d84ef98461de5dff4ccefJim Miller final int groupId = userId; 6635a8e522c6c3d71164f9d84ef98461de5dff4ccefJim Miller Fingerprint finger = new Fingerprint(null, groupId, 0, 0); 6645a8e522c6c3d71164f9d84ef98461de5dff4ccefJim Miller mFingerprintManager.remove(finger, userId, 665eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri new RemovalCallback() { 666eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri @Override 667eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri public void onRemovalError(Fingerprint fp, int errMsgId, 668eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri CharSequence errString) { 669751de372750336c2dbc6ed656de84b881ede0858Ricky Wai Log.v(TAG, "Fingerprint removed: " + fp.getFingerId()); 670751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (fp.getFingerId() == 0) { 671751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeManagedProfileFingerprintsAndFinishIfNecessary(userId); 672751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 673eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri } 674eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri 675eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri @Override 676eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri public void onRemovalSucceeded(Fingerprint fingerprint) { 677751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (fingerprint.getFingerId() == 0) { 678751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeManagedProfileFingerprintsAndFinishIfNecessary(userId); 679751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 680eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri } 681eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri }); 6825a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini } else { 6835a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // The removal callback will call finish, once all fingerprints are removed. 6845a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // We need to wait for that to occur, otherwise, the UI will still show that 6855a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // fingerprints exist even though they are (about to) be removed depending on 6865a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // the race condition. 6875a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini finish(); 6889218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 6899218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 6909218687e4baaf0226ef16b58f78123d979711e5dJim Miller 691751de372750336c2dbc6ed656de84b881ede0858Ricky Wai private void removeManagedProfileFingerprintsAndFinishIfNecessary(final int parentUserId) { 692751de372750336c2dbc6ed656de84b881ede0858Ricky Wai mFingerprintManager.setActiveUser(UserHandle.myUserId()); 693751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final UserManager um = UserManager.get(getActivity()); 694751de372750336c2dbc6ed656de84b881ede0858Ricky Wai boolean hasChildProfile = false; 695751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (!um.getUserInfo(parentUserId).isManagedProfile()) { 696751de372750336c2dbc6ed656de84b881ede0858Ricky Wai // Current user is primary profile, remove work profile fingerprints if necessary 697751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final List<UserInfo> profiles = um.getProfiles(parentUserId); 698751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final int profilesSize = profiles.size(); 699751de372750336c2dbc6ed656de84b881ede0858Ricky Wai for (int i = 0; i < profilesSize; i++) { 700751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final UserInfo userInfo = profiles.get(i); 701751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (userInfo.isManagedProfile() && !mLockPatternUtils 702751de372750336c2dbc6ed656de84b881ede0858Ricky Wai .isSeparateProfileChallengeEnabled(userInfo.id)) { 703751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeAllFingerprintForUserAndFinish(userInfo.id); 704751de372750336c2dbc6ed656de84b881ede0858Ricky Wai hasChildProfile = true; 705751de372750336c2dbc6ed656de84b881ede0858Ricky Wai break; 706751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 707751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 708751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 709751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (!hasChildProfile) { 710751de372750336c2dbc6ed656de84b881ede0858Ricky Wai finish(); 711751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 712751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 713751de372750336c2dbc6ed656de84b881ede0858Ricky Wai 7149218687e4baaf0226ef16b58f78123d979711e5dJim Miller @Override 7159218687e4baaf0226ef16b58f78123d979711e5dJim Miller public void onDestroy() { 7169218687e4baaf0226ef16b58f78123d979711e5dJim Miller super.onDestroy(); 7179218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 7189218687e4baaf0226ef16b58f78123d979711e5dJim Miller 719b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani @Override 720b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani protected int getHelpResource() { 721b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani return R.string.help_url_choose_lockscreen; 722b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani } 723b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 72434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri private int getResIdForFactoryResetProtectionWarningTitle() { 72534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri boolean isProfile = Utils.isManagedProfile(UserManager.get(getActivity()), mUserId); 72634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return isProfile ? R.string.unlock_disable_frp_warning_title_profile 72734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri : R.string.unlock_disable_frp_warning_title; 72834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 72934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri 73038c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private int getResIdForFactoryResetProtectionWarningMessage() { 731eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri boolean hasFingerprints = mFingerprintManager.hasEnrolledFingerprints(mUserId); 73234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri boolean isProfile = Utils.isManagedProfile(UserManager.get(getActivity()), mUserId); 733fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) { 7343bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 73534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 73634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 73734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_pattern_fingerprint_profile; 73834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 73934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern_fingerprint; 74034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 74134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern_profile; 74234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 74334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern; 74434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 7453bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 7463bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 74734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 74834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_fingerprint_profile; 74934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 75034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_fingerprint; 75134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 75234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_profile; 75334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 75434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin; 75534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 7563bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 7573bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 7583bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 759e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 76034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 76134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 76234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_password_fingerprint_profile; 76334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 76434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password_fingerprint; 76534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 76634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password_profile; 76734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 76834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password; 76934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 7703bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang default: 77134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 77234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 77334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_unknown_fingerprint_profile; 77434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 77534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown_fingerprint; 77634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 77734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown_profile; 77834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 77934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown; 78034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 7813bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 7823bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 7833bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 7843bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean isUnlockMethodSecure(String unlockMethod) { 7853bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return !(KEY_UNLOCK_SET_OFF.equals(unlockMethod) || 7863bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang KEY_UNLOCK_SET_NONE.equals(unlockMethod)); 7873bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 7883bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 7893bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean setUnlockMethod(String unlockMethod) { 7903bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang EventLog.writeEvent(EventLogTags.LOCK_SCREEN_TYPE, unlockMethod); 7913bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 7923bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang if (KEY_UNLOCK_SET_OFF.equals(unlockMethod)) { 7933bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang updateUnlockMethodAndFinish( 7943bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true /* disabled */ ); 7953bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_NONE.equals(unlockMethod)) { 7963bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang updateUnlockMethodAndFinish( 7973bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, false /* disabled */ ); 798e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else if (KEY_UNLOCK_SET_MANAGED.equals(unlockMethod)) { 799e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic maybeEnableEncryption(DevicePolicyManager.PASSWORD_QUALITY_MANAGED, false); 8003bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PATTERN.equals(unlockMethod)) { 8013bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 8023bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false); 8033bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PIN.equals(unlockMethod)) { 8043bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 8053bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, false); 8063bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PASSWORD.equals(unlockMethod)) { 8073bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 8083bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, false); 8093bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else { 8103bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang Log.e(TAG, "Encountered unknown unlock method to set: " + unlockMethod); 8113bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return false; 8123bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8133bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return true; 8143bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8153bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8163bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private void showFactoryResetProtectionWarningDialog(String unlockMethodToSet) { 81734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri int title = getResIdForFactoryResetProtectionWarningTitle(); 81838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos int message = getResIdForFactoryResetProtectionWarningMessage(); 8193bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog dialog = 82034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri FactoryResetProtectionWarningDialog.newInstance( 82134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri title, message, unlockMethodToSet); 8223bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang dialog.show(getChildFragmentManager(), TAG_FRP_WARNING_DIALOG); 8233bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8243bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8253bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public static class FactoryResetProtectionWarningDialog extends DialogFragment { 8263bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 82734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri private static final String ARG_TITLE_RES = "titleRes"; 82838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private static final String ARG_MESSAGE_RES = "messageRes"; 8293bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private static final String ARG_UNLOCK_METHOD_TO_SET = "unlockMethodToSet"; 8303bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 83134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri public static FactoryResetProtectionWarningDialog newInstance( 83234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri int titleRes, int messageRes, String unlockMethodToSet) { 8333bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog frag = 8343bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new FactoryResetProtectionWarningDialog(); 8353bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang Bundle args = new Bundle(); 83634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri args.putInt(ARG_TITLE_RES, titleRes); 83738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos args.putInt(ARG_MESSAGE_RES, messageRes); 8383bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang args.putString(ARG_UNLOCK_METHOD_TO_SET, unlockMethodToSet); 8393bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang frag.setArguments(args); 8403bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return frag; 8413bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8423bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8433bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 8443bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void show(FragmentManager manager, String tag) { 8453bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang if (manager.findFragmentByTag(tag) == null) { 8463bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Prevent opening multiple dialogs if tapped on button quickly 8473bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang super.show(manager, tag); 8483bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8493bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8503bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8513bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 8523bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public Dialog onCreateDialog(Bundle savedInstanceState) { 8533bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang final Bundle args = getArguments(); 8543bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8553bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return new AlertDialog.Builder(getActivity()) 85634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .setTitle(args.getInt(ARG_TITLE_RES)) 85738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setMessage(args.getInt(ARG_MESSAGE_RES)) 85838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setPositiveButton(R.string.unlock_disable_frp_warning_ok, 8593bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new DialogInterface.OnClickListener() { 8603bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 8613bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void onClick(DialogInterface dialog, int whichButton) { 8623bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ((ChooseLockGenericFragment) getParentFragment()) 8633bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .setUnlockMethod( 8643bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang args.getString(ARG_UNLOCK_METHOD_TO_SET)); 8653bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8663bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8673bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ) 8683bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .setNegativeButton(R.string.cancel, 8693bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new DialogInterface.OnClickListener() { 8703bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 8713bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void onClick(DialogInterface dialog, int whichButton) { 8723bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang dismiss(); 8733bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8743bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8753bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ) 8763bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .create(); 8773bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8783bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 879abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 880abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn} 881