ChooseLockGeneric.java revision 8d8bb6ee1dd070f612133da4573df02d9ef267aa
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 194fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport static android.app.admin.DevicePolicyManager.ACTION_SET_NEW_PARENT_PROFILE_PASSWORD; 204fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport static android.app.admin.DevicePolicyManager.ACTION_SET_NEW_PASSWORD; 214fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport static com.android.settings.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED; 224fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 234fdcec71dce130be3363dba93e685789797fee8eSteven Ng 24524484426855f814ff1f3189fd5221dd630dbf8cSvetoslavimport android.accessibilityservice.AccessibilityServiceInfo; 2517e9e1933055b207473b488595b2887bfcaea32eJim Millerimport android.app.Activity; 263bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.AlertDialog; 273bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.Dialog; 2852c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lamimport android.app.Fragment; 293bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.FragmentManager; 304037c7f27c849a1ada0980ad881636fc940a0b85Dianne Hackbornimport android.app.admin.DevicePolicyManager; 31abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Context; 323bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.content.DialogInterface; 33abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Intent; 34751de372750336c2dbc6ed656de84b881ede0858Ricky Waiimport android.content.pm.UserInfo; 3539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.Fingerprint; 3639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager; 3739b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager.RemovalCallback; 38abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.os.Bundle; 395437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roosimport android.os.UserHandle; 40f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chenimport android.os.UserManager; 4123c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrenceimport android.os.storage.StorageManager; 42d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstromimport android.security.KeyStore; 4339b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 4439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 4562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roosimport android.text.TextUtils; 4627d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich canningsimport android.util.EventLog; 473bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.util.Log; 48524484426855f814ff1f3189fd5221dd630dbf8cSvetoslavimport android.view.accessibility.AccessibilityManager; 494fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport android.widget.TextView; 50d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller 519d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 526465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunneimport com.android.internal.widget.LockPatternUtils; 53ac5e5932233eb4b485bd76087987182009be2c2fFan Zhangimport com.android.settings.core.instrumentation.InstrumentedDialogFragment; 544fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport com.android.settings.fingerprint.FingerprintEnrollBase; 554fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport com.android.settings.fingerprint.FingerprintEnrollFindSensor; 569c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils; 579c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedPreference; 589c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka 59751de372750336c2dbc6ed656de84b881ede0858Ricky Waiimport java.util.List; 60751de372750336c2dbc6ed656de84b881ede0858Ricky Wai 61263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Megliopublic class ChooseLockGeneric extends SettingsActivity { 620698a216311acd9ab52224602d1a75c08bf89f04Jim Miller public static final String CONFIRM_CREDENTIALS = "confirm_credentials"; 63abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 64abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn @Override 6517e9e1933055b207473b488595b2887bfcaea32eJim Miller public Intent getIntent() { 6617e9e1933055b207473b488595b2887bfcaea32eJim Miller Intent modIntent = new Intent(super.getIntent()); 6752c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam modIntent.putExtra(EXTRA_SHOW_FRAGMENT, getFragmentClass().getName()); 6892779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini 6992779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini String action = modIntent.getAction(); 704fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (ACTION_SET_NEW_PASSWORD.equals(action) 714fdcec71dce130be3363dba93e685789797fee8eSteven Ng || ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals(action)) { 7292779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini modIntent.putExtra(EXTRA_HIDE_DRAWER, true); 7392779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini } 7417e9e1933055b207473b488595b2887bfcaea32eJim Miller return modIntent; 75a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani } 76a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani 77a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani @Override 78a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani protected boolean isValidFragment(String fragmentName) { 79a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani if (ChooseLockGenericFragment.class.getName().equals(fragmentName)) return true; 80a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani return false; 8117e9e1933055b207473b488595b2887bfcaea32eJim Miller } 82bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 8352c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam /* package */ Class<? extends Fragment> getFragmentClass() { 8452c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam return ChooseLockGenericFragment.class; 8552c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam } 8652c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam 8766026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani public static class InternalActivity extends ChooseLockGeneric { 8866026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 8966026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani 9017e9e1933055b207473b488595b2887bfcaea32eJim Miller public static class ChooseLockGenericFragment extends SettingsPreferenceFragment { 913fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final String TAG = "ChooseLockGenericFragment"; 9217e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final int MIN_PASSWORD_LENGTH = 4; 9317e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_OFF = "unlock_set_off"; 9417e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_NONE = "unlock_set_none"; 9517e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PIN = "unlock_set_pin"; 9617e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PASSWORD = "unlock_set_password"; 9717e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PATTERN = "unlock_set_pattern"; 98e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic private static final String KEY_UNLOCK_SET_MANAGED = "unlock_set_managed"; 994fdcec71dce130be3363dba93e685789797fee8eSteven Ng private static final String KEY_SKIP_FINGERPRINT = "unlock_skip_fingerprint"; 10017e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String PASSWORD_CONFIRMED = "password_confirmed"; 10147f1cd4325e839dd33273a451fa052e83789e483Jim Miller private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation"; 102d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom public static final String MINIMUM_QUALITY_KEY = "minimum_quality"; 1033fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller public static final String HIDE_DISABLED_PREFS = "hide_disabled_prefs"; 10446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_QUALITY = "encrypt_requested_quality"; 10546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_DISABLED = "encrypt_requested_disabled"; 1063bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public static final String TAG_FRP_WARNING_DIALOG = "frp_warning_dialog"; 10717e9e1933055b207473b488595b2887bfcaea32eJim Miller 1083fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CONFIRM_EXISTING_REQUEST = 100; 1093fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int ENABLE_ENCRYPTION_REQUEST = 101; 1103fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CHOOSE_LOCK_REQUEST = 102; 1114fdcec71dce130be3363dba93e685789797fee8eSteven Ng private static final int CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST = 103; 1124fdcec71dce130be3363dba93e685789797fee8eSteven Ng private static final int SKIP_FINGERPRINT_REQUEST = 104; 11380412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett 11417e9e1933055b207473b488595b2887bfcaea32eJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 11517e9e1933055b207473b488595b2887bfcaea32eJim Miller private DevicePolicyManager mDPM; 116d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private KeyStore mKeyStore; 1176609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private boolean mHasChallenge = false; 1186609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private long mChallenge; 11917e9e1933055b207473b488595b2887bfcaea32eJim Miller private boolean mPasswordConfirmed = false; 12047f1cd4325e839dd33273a451fa052e83789e483Jim Miller private boolean mWaitingForConfirmation = false; 12146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private int mEncryptionRequestQuality; 12246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private boolean mEncryptionRequestDisabled; 1230698a216311acd9ab52224602d1a75c08bf89f04Jim Miller private boolean mRequirePassword; 12462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private boolean mForChangeCredRequiredForBoot = false; 125a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales private String mUserPassword; 1260698a216311acd9ab52224602d1a75c08bf89f04Jim Miller private LockPatternUtils mLockPatternUtils; 1279218687e4baaf0226ef16b58f78123d979711e5dJim Miller private FingerprintManager mFingerprintManager; 128fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri private int mUserId; 12992779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini private boolean mHideDrawer = false; 130e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic private ManagedLockPasswordProvider mManagedPasswordProvider; 1314fdcec71dce130be3363dba93e685789797fee8eSteven Ng private boolean mIsSetNewPassword = false; 13217e9e1933055b207473b488595b2887bfcaea32eJim Miller 1338ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected boolean mForFingerprint = false; 1348ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 13517e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 1366507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 1379d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.CHOOSE_LOCK_GENERIC; 1388a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 1398a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 1408a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 14117e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onCreate(Bundle savedInstanceState) { 14217e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onCreate(savedInstanceState); 14317e9e1933055b207473b488595b2887bfcaea32eJim Miller 1444fdcec71dce130be3363dba93e685789797fee8eSteven Ng String chooseLockAction = getActivity().getIntent().getAction(); 145ab50807d1edacb4fca5447525bb5270a853eaafcJeff Sharkey mFingerprintManager = Utils.getFingerprintManagerOrNull(getActivity()); 14617e9e1933055b207473b488595b2887bfcaea32eJim Miller mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 147d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom mKeyStore = KeyStore.getInstance(); 14817e9e1933055b207473b488595b2887bfcaea32eJim Miller mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this.getActivity()); 1490698a216311acd9ab52224602d1a75c08bf89f04Jim Miller mLockPatternUtils = new LockPatternUtils(getActivity()); 1504fdcec71dce130be3363dba93e685789797fee8eSteven Ng mIsSetNewPassword = ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals(chooseLockAction) 1514fdcec71dce130be3363dba93e685789797fee8eSteven Ng || ACTION_SET_NEW_PASSWORD.equals(chooseLockAction); 15217e9e1933055b207473b488595b2887bfcaea32eJim Miller 153c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett // Defaults to needing to confirm credentials 154c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett final boolean confirmCredentials = getActivity().getIntent() 155c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett .getBooleanExtra(CONFIRM_CREDENTIALS, true); 15666026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani if (getActivity() instanceof ChooseLockGeneric.InternalActivity) { 15766026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani mPasswordConfirmed = !confirmCredentials; 15866026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 15992779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini mHideDrawer = getActivity().getIntent().getBooleanExtra(EXTRA_HIDE_DRAWER, false); 160c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett 1616609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mHasChallenge = getActivity().getIntent().getBooleanExtra( 1626609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false); 1636609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mChallenge = getActivity().getIntent().getLongExtra( 1646609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0); 165c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint = getActivity().getIntent().getBooleanExtra( 166c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false); 16762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mForChangeCredRequiredForBoot = getArguments() != null && getArguments().getBoolean( 16862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT); 1694fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (mIsSetNewPassword) { 1704fdcec71dce130be3363dba93e685789797fee8eSteven Ng // In ACTION_SET_NEW_PARENT_PROFILE_PASSWORD or ACTION_SET_NEW_PASSWORD, the user 1714fdcec71dce130be3363dba93e685789797fee8eSteven Ng // will be asked to confirm the password if one has been set. 1724fdcec71dce130be3363dba93e685789797fee8eSteven Ng // On fingerprint supported device, fingerprint options are represented in the 1734fdcec71dce130be3363dba93e685789797fee8eSteven Ng // options. If the user chooses to skip fingerprint setup, ChooseLockGeneric is 1744fdcec71dce130be3363dba93e685789797fee8eSteven Ng // relaunched to only show options without fingerprint. In this case, we shouldn't 1754fdcec71dce130be3363dba93e685789797fee8eSteven Ng // ask the user to confirm the password again. 1764fdcec71dce130be3363dba93e685789797fee8eSteven Ng mPasswordConfirmed = getActivity().getIntent().getBooleanExtra( 1774fdcec71dce130be3363dba93e685789797fee8eSteven Ng PASSWORD_CONFIRMED, false); 1784fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 1796609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 18017e9e1933055b207473b488595b2887bfcaea32eJim Miller if (savedInstanceState != null) { 18117e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); 18247f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION); 18346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = savedInstanceState.getInt(ENCRYPT_REQUESTED_QUALITY); 18446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = savedInstanceState.getBoolean( 18546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller ENCRYPT_REQUESTED_DISABLED); 18617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 187bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 188ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz int targetUser = Utils.getSecureTargetUser( 189ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz getActivity().getActivityToken(), 190ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz UserManager.get(getActivity()), 191ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz null, 192ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz getActivity().getIntent().getExtras()).getIdentifier(); 1934fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals(chooseLockAction) 1944fdcec71dce130be3363dba93e685789797fee8eSteven Ng || !mLockPatternUtils.isSeparateProfileChallengeAllowed(targetUser)) { 195ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz // Always use parent if explicitely requested or if profile challenge is not 196ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz // supported 1977f2a013619fee267c1d4d6b0cc352444eef2de07Clara Bayarri Bundle arguments = getArguments(); 1987f2a013619fee267c1d4d6b0cc352444eef2de07Clara Bayarri mUserId = Utils.getUserIdFromBundle(getContext(), arguments != null ? arguments 1997f2a013619fee267c1d4d6b0cc352444eef2de07Clara Bayarri : getActivity().getIntent().getExtras()); 200ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz } else { 201ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz mUserId = targetUser; 202ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz } 203fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri 2044fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (ACTION_SET_NEW_PASSWORD.equals(chooseLockAction) 205788671647c6d615684d159a94ffb5b4367df6896Robin Lee && UserManager.get(getActivity()).isManagedProfile(mUserId) 206bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra && mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId)) { 207bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra getActivity().setTitle(R.string.lock_settings_picker_title_profile); 208bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra } 209bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra 210e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic mManagedPasswordProvider = ManagedLockPasswordProvider.get(getActivity(), mUserId); 211e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 21247f1cd4325e839dd33273a451fa052e83789e483Jim Miller if (mPasswordConfirmed) { 21347f1cd4325e839dd33273a451fa052e83789e483Jim Miller updatePreferencesOrFinish(); 21462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 21562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos maybeEnableEncryption(mLockPatternUtils.getKeyguardStoredPasswordQuality( 21662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mUserId), false); 21762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 21847f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else if (!mWaitingForConfirmation) { 2196370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler ChooseLockSettingsHelper helper = 2206370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler new ChooseLockSettingsHelper(this.getActivity(), this); 221788671647c6d615684d159a94ffb5b4367df6896Robin Lee boolean managedProfileWithUnifiedLock = 222788671647c6d615684d159a94ffb5b4367df6896Robin Lee UserManager.get(getActivity()).isManagedProfile(mUserId) 2234bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai && !mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId); 2244bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai if (managedProfileWithUnifiedLock 2254bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai || !helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, 226fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri getString(R.string.unlock_set_unlock_launch_picker_title), true, mUserId)) { 22717e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; // no password set, so no need to confirm 22817e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 22947f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else { 23047f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = true; 23117e9e1933055b207473b488595b2887bfcaea32eJim Miller } 232bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 2338ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addHeaderView(); 2348ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini } 2358ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 2368ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected void addHeaderView() { 23787fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam if (mForFingerprint) { 23839b467482d1bf256a111c757e9b7621c6f523271Jason Monk setHeaderView(R.layout.choose_lock_generic_fingerprint_header); 2394fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (mIsSetNewPassword) { 2404fdcec71dce130be3363dba93e685789797fee8eSteven Ng ((TextView) getHeaderView().findViewById(R.id.fingerprint_header_description)) 2414fdcec71dce130be3363dba93e685789797fee8eSteven Ng .setText(R.string.fingerprint_unlock_title); 2424fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 24387fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 24487fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 24587fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam 24687fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam @Override 24739b467482d1bf256a111c757e9b7621c6f523271Jason Monk public boolean onPreferenceTreeClick(Preference preference) { 24817e9e1933055b207473b488595b2887bfcaea32eJim Miller final String key = preference.getKey(); 24927d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich cannings 250fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(mUserId)) { 2513bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Show the disabling FRP warning only when the user is switching from a secure 2523bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // unlock method to an insecure one 2533bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang showFactoryResetProtectionWarningDialog(key); 2543bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return true; 2554fdcec71dce130be3363dba93e685789797fee8eSteven Ng } else if (KEY_SKIP_FINGERPRINT.equals(key)) { 2564fdcec71dce130be3363dba93e685789797fee8eSteven Ng Intent chooseLockGenericIntent = new Intent(getActivity(), ChooseLockGeneric.class); 2574fdcec71dce130be3363dba93e685789797fee8eSteven Ng chooseLockGenericIntent.setAction(getIntent().getAction()); 2584fdcec71dce130be3363dba93e685789797fee8eSteven Ng chooseLockGenericIntent.putExtra(PASSWORD_CONFIRMED, mPasswordConfirmed); 2594fdcec71dce130be3363dba93e685789797fee8eSteven Ng startActivityForResult(chooseLockGenericIntent, SKIP_FINGERPRINT_REQUEST); 2604fdcec71dce130be3363dba93e685789797fee8eSteven Ng return true; 26117e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 2623bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return setUnlockMethod(key); 26317e9e1933055b207473b488595b2887bfcaea32eJim Miller } 264bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 265bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 26646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller /** 26746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * If the device has encryption already enabled, then ask the user if they 26846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * also want to encrypt the phone with this password. 26946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * 27046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param quality 27146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param disabled 27246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller */ 273a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // TODO: why does this take disabled, its always called with a quality higher than 274a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // what makes sense with disabled == true 27546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private void maybeEnableEncryption(int quality, boolean disabled) { 276146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); 277f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen if (UserManager.get(getActivity()).isAdminUser() 27893bcfcb14d42ea0884b922ae1a4d84a6955ed835Clara Bayarri && mUserId == UserHandle.myUserId() 279f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen && LockPatternUtils.isDeviceEncryptionEnabled() 280fb4c583dba1fb8885ff9369bdab916eaa61b42bdPaul Lawrence && !LockPatternUtils.isFileEncryptionEnabled() 281146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov && !dpm.getDoNotAskCredentialsOnBoot()) { 28246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = quality; 28346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = disabled; 284edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // Get the intent that the encryption interstitial should start for creating 285edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // the new unlock method. 286edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent unlockMethodIntent = getIntentForUnlockMethod(quality, disabled); 28762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos unlockMethodIntent.putExtra( 28862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT, 28962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mForChangeCredRequiredForBoot); 290ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final Context context = getActivity(); 2910698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // If accessibility is enabled and the user hasn't seen this dialog before, set the 2920698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // default state to agree with that which is compatible with accessibility 2930698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // (password not required). 294ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final boolean accEn = AccessibilityManager.getInstance(context).isEnabled(); 2950698a216311acd9ab52224602d1a75c08bf89f04Jim Miller final boolean required = mLockPatternUtils.isCredentialRequiredToDecrypt(!accEn); 296edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = getEncryptionInterstitialIntent(context, quality, required, 297edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 298c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, 299c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint); 30092779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini intent.putExtra(EXTRA_HIDE_DRAWER, mHideDrawer); 30146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST); 30246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } else { 30362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 30462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // Welp, couldn't change it. Oh well. 30562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 30662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return; 30762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 3080698a216311acd9ab52224602d1a75c08bf89f04Jim Miller mRequirePassword = false; // device encryption not enabled or not device owner. 30946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller updateUnlockMethodAndFinish(quality, disabled); 31046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 31146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 31246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller 31317e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 31417e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onActivityResult(int requestCode, int resultCode, Intent data) { 31517e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onActivityResult(requestCode, resultCode, data); 31647f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = false; 31717e9e1933055b207473b488595b2887bfcaea32eJim Miller if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) { 31817e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; 319a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales mUserPassword = data.getStringExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 32017e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 32162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 32262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (!TextUtils.isEmpty(mUserPassword)) { 32362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos maybeEnableEncryption( 32462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId), false); 32562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else { 32662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 32762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 32862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 329e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } else if (requestCode == CHOOSE_LOCK_REQUEST 330e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam || requestCode == ENABLE_ENCRYPTION_REQUEST) { 33177181e947860056fb77d24ab9fa9e86365b244e6Adrian Roos if (resultCode != RESULT_CANCELED || mForChangeCredRequiredForBoot) { 332e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam getActivity().setResult(resultCode, data); 333e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam finish(); 334e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } 3354fdcec71dce130be3363dba93e685789797fee8eSteven Ng } else if (requestCode == CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST 3364fdcec71dce130be3363dba93e685789797fee8eSteven Ng && resultCode == FingerprintEnrollBase.RESULT_FINISHED) { 3374fdcec71dce130be3363dba93e685789797fee8eSteven Ng Intent intent = new Intent(getActivity(), FingerprintEnrollFindSensor.class); 3384fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (data != null) { 3394fdcec71dce130be3363dba93e685789797fee8eSteven Ng intent.putExtras(data.getExtras()); 3404fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 3414fdcec71dce130be3363dba93e685789797fee8eSteven Ng startActivity(intent); 3424fdcec71dce130be3363dba93e685789797fee8eSteven Ng finish(); 3434fdcec71dce130be3363dba93e685789797fee8eSteven Ng } else if (requestCode == SKIP_FINGERPRINT_REQUEST) { 3444fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (resultCode != RESULT_CANCELED) { 3454fdcec71dce130be3363dba93e685789797fee8eSteven Ng getActivity().setResult( 3464fdcec71dce130be3363dba93e685789797fee8eSteven Ng resultCode == RESULT_FINISHED ? RESULT_OK : resultCode, data); 3474fdcec71dce130be3363dba93e685789797fee8eSteven Ng finish(); 3484fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 34917e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 35017e9e1933055b207473b488595b2887bfcaea32eJim Miller getActivity().setResult(Activity.RESULT_CANCELED); 35117e9e1933055b207473b488595b2887bfcaea32eJim Miller finish(); 35217e9e1933055b207473b488595b2887bfcaea32eJim Miller } 35362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (requestCode == Activity.RESULT_CANCELED && mForChangeCredRequiredForBoot) { 35462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 35562775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 356bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 357bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 35817e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 35917e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onSaveInstanceState(Bundle outState) { 36017e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onSaveInstanceState(outState); 36117e9e1933055b207473b488595b2887bfcaea32eJim Miller // Saved so we don't force user to re-enter their password if configuration changes 36217e9e1933055b207473b488595b2887bfcaea32eJim Miller outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); 36347f1cd4325e839dd33273a451fa052e83789e483Jim Miller outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation); 36446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putInt(ENCRYPT_REQUESTED_QUALITY, mEncryptionRequestQuality); 36546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putBoolean(ENCRYPT_REQUESTED_DISABLED, mEncryptionRequestDisabled); 36617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 367bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 36817e9e1933055b207473b488595b2887bfcaea32eJim Miller private void updatePreferencesOrFinish() { 3695541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller Intent intent = getActivity().getIntent(); 3705541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller int quality = intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); 37117e9e1933055b207473b488595b2887bfcaea32eJim Miller if (quality == -1) { 3726370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // If caller didn't specify password quality, show UI and allow the user to choose. 3735541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller quality = intent.getIntExtra(MINIMUM_QUALITY_KEY, -1); 374f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos quality = upgradeQuality(quality); 3753fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller final boolean hideDisabledPrefs = intent.getBooleanExtra( 3763fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller HIDE_DISABLED_PREFS, false); 37717e9e1933055b207473b488595b2887bfcaea32eJim Miller final PreferenceScreen prefScreen = getPreferenceScreen(); 37817e9e1933055b207473b488595b2887bfcaea32eJim Miller if (prefScreen != null) { 37917e9e1933055b207473b488595b2887bfcaea32eJim Miller prefScreen.removeAll(); 38017e9e1933055b207473b488595b2887bfcaea32eJim Miller } 3818ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addPreferences(); 3823fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferences(quality, hideDisabledPrefs); 383bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini updatePreferenceText(); 3849a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk updateCurrentPreference(); 385524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav updatePreferenceSummaryIfNeeded(); 38617e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 38717e9e1933055b207473b488595b2887bfcaea32eJim Miller updateUnlockMethodAndFinish(quality, false); 388bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 389abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 390bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 3918ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected void addPreferences() { 3928ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addPreferencesFromResource(R.xml.security_settings_picker); 393a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey 394a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey // Used for testing purposes 395a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey findPreference(KEY_UNLOCK_SET_NONE).setViewId(R.id.lock_none); 396159dff63a5e8e1286f0d42d400b64d43fb104649Jeff Sharkey findPreference(KEY_SKIP_FINGERPRINT).setViewId(R.id.lock_none); 397a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey findPreference(KEY_UNLOCK_SET_PIN).setViewId(R.id.lock_pin); 398a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey findPreference(KEY_UNLOCK_SET_PASSWORD).setViewId(R.id.lock_password); 3998ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini } 4008ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 401bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini private void updatePreferenceText() { 402bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini if (mForFingerprint) { 40306458be226f2e2862d70ea29f85a93bb767b46bcJim Miller final String key[] = { KEY_UNLOCK_SET_PATTERN, 40406458be226f2e2862d70ea29f85a93bb767b46bcJim Miller KEY_UNLOCK_SET_PIN, 40506458be226f2e2862d70ea29f85a93bb767b46bcJim Miller KEY_UNLOCK_SET_PASSWORD }; 40606458be226f2e2862d70ea29f85a93bb767b46bcJim Miller final int res[] = { R.string.fingerprint_unlock_set_unlock_pattern, 40706458be226f2e2862d70ea29f85a93bb767b46bcJim Miller R.string.fingerprint_unlock_set_unlock_pin, 40806458be226f2e2862d70ea29f85a93bb767b46bcJim Miller R.string.fingerprint_unlock_set_unlock_password }; 40906458be226f2e2862d70ea29f85a93bb767b46bcJim Miller for (int i = 0; i < key.length; i++) { 41006458be226f2e2862d70ea29f85a93bb767b46bcJim Miller Preference pref = findPreference(key[i]); 41106458be226f2e2862d70ea29f85a93bb767b46bcJim Miller if (pref != null) { // can be removed by device admin 41206458be226f2e2862d70ea29f85a93bb767b46bcJim Miller pref.setTitle(res[i]); 41306458be226f2e2862d70ea29f85a93bb767b46bcJim Miller } 41406458be226f2e2862d70ea29f85a93bb767b46bcJim Miller } 415bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini } 416e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 417e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic if (mManagedPasswordProvider.isSettingManagedPasswordSupported()) { 418e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic Preference managed = findPreference(KEY_UNLOCK_SET_MANAGED); 419e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic managed.setTitle(mManagedPasswordProvider.getPickerOptionTitle(mForFingerprint)); 420e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else { 421e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic removePreference(KEY_UNLOCK_SET_MANAGED); 422e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } 4234fdcec71dce130be3363dba93e685789797fee8eSteven Ng 4244fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (!(mForFingerprint && mIsSetNewPassword)) { 4254fdcec71dce130be3363dba93e685789797fee8eSteven Ng removePreference(KEY_SKIP_FINGERPRINT); 4264fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 427bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini } 428bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini 4299a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private void updateCurrentPreference() { 4309a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk String currentKey = getKeyForCurrent(); 4319a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk Preference preference = findPreference(currentKey); 4329a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk if (preference != null) { 4339a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk preference.setSummary(R.string.current_screen_lock); 4349a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4359a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4369a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk 4379a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private String getKeyForCurrent() { 438e07c947ea35b07eb354dd43068a5670dd6cce2efJason Monk final int credentialOwner = UserManager.get(getContext()) 439e07c947ea35b07eb354dd43068a5670dd6cce2efJason Monk .getCredentialOwnerProfile(mUserId); 4407402b2514358e02a0e0adde982b6deb8552dc28aClara Bayarri if (mLockPatternUtils.isLockScreenDisabled(credentialOwner)) { 4419a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_OFF; 4429a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4437402b2514358e02a0e0adde982b6deb8552dc28aClara Bayarri switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(credentialOwner)) { 4449a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 4459a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PATTERN; 4469a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 4479a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 4489a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PIN; 4499a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 4509a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 451e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 4529a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PASSWORD; 453e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 454e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic return KEY_UNLOCK_SET_MANAGED; 4559a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED: 4569a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_NONE; 4579a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4589a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return null; 4599a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4609a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk 461f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos /** increases the quality if necessary */ 462f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos private int upgradeQuality(int quality) { 463d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = upgradeQualityForDPM(quality); 464b05f39d186d8ce1b53bb4da3cb4c2cd22986f513Paul Lawrence return quality; 465d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 466d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 467d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private int upgradeQualityForDPM(int quality) { 468d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom // Compare min allowed password quality 46925c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int minQuality = mDPM.getPasswordQuality(null, mUserId); 470d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom if (quality < minQuality) { 471d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = minQuality; 472d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 473d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom return quality; 474d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 475d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 47617e9e1933055b207473b488595b2887bfcaea32eJim Miller /*** 477df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * Disables preferences that are less secure than required quality. The actual 478df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * implementation is in disableUnusablePreferenceImpl. 479df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * 480df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param quality the requested quality. 4813fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * @param hideDisabledPrefs if false preferences show why they were disabled; otherwise 4823fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * they're not shown at all. 483df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang */ 4843fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller protected void disableUnusablePreferences(final int quality, boolean hideDisabledPrefs) { 4853fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferencesImpl(quality, hideDisabledPrefs); 486df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 487df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang 488df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang /*** 48917e9e1933055b207473b488595b2887bfcaea32eJim Miller * Disables preferences that are less secure than required quality. 49017e9e1933055b207473b488595b2887bfcaea32eJim Miller * 49117e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param quality the requested quality. 492df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param hideDisabled whether to hide disable screen lock options. 49317e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 494df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang protected void disableUnusablePreferencesImpl(final int quality, 495f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos boolean hideDisabled) { 496cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani final PreferenceScreen entries = getPreferenceScreen(); 497783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller 49825c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int adminEnforcedQuality = mDPM.getPasswordQuality(null, mUserId); 4999c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka EnforcedAdmin enforcedAdmin = RestrictedLockUtils.checkIfPasswordQualityIsSet( 500f755baf1c3b8fcbcee68720c8367e03381fffb4bSudheer Shanka getActivity(), mUserId); 501cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani for (int i = entries.getPreferenceCount() - 1; i >= 0; --i) { 502cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani Preference pref = entries.getPreference(i); 5039c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka if (pref instanceof RestrictedPreference) { 504591dc85017ea19e56c416ae6d1a55b82e29743f4Adrian Roos final String key = pref.getKey(); 50517e9e1933055b207473b488595b2887bfcaea32eJim Miller boolean enabled = true; 5065541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller boolean visible = true; 5079c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka boolean disabledByAdmin = false; 508cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani if (KEY_UNLOCK_SET_OFF.equals(key)) { 50917e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 51005c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi if (getResources().getBoolean(R.bool.config_hide_none_security_option)) { 51105c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi enabled = false; 51205c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi visible = false; 51305c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi } 5149c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 5159c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 51617e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_NONE.equals(key)) { 517bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky if (getResources().getBoolean(R.bool.config_hide_swipe_security_option)) { 518bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky enabled = false; 5196934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri visible = false; 520bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky } else { 521bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky if (mUserId != UserHandle.myUserId()) { 522bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky // Swipe doesn't make sense for profiles. 523bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky visible = false; 524bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky } 525bb70e4f69658b70e0f45154ec52c7ff8882b70bbEvan Rosky enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 5266934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri } 5279c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 5289c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 52917e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { 53017e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 5319c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 5329c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 53317e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PIN.equals(key)) { 5348fd852e7c2f488650095024aca9c51f8c7ddc3b3Nicolas Prevot enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; 5359c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 5369c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; 53717e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { 53817e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; 5399c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 5409c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; 541e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else if (KEY_UNLOCK_SET_MANAGED.equals(key)) { 542e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_MANAGED 543e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic && mManagedPasswordProvider.isManagedPasswordChoosable(); 544e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic disabledByAdmin = adminEnforcedQuality 545e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic > DevicePolicyManager.PASSWORD_QUALITY_MANAGED; 54617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 547df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang if (hideDisabled) { 548591dc85017ea19e56c416ae6d1a55b82e29743f4Adrian Roos visible = enabled; 549df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 550f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos if (!visible) { 551cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani entries.removePreference(pref); 5529c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else if (disabledByAdmin && enforcedAdmin != null) { 5539c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(enforcedAdmin); 5545541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (!enabled) { 5559c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // we need to setDisabledByAdmin to null first to disable the padlock 5569c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // in case it was set earlier. 5579c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 55817e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setSummary(R.string.unlock_set_unlock_disabled_summary); 55917e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setEnabled(false); 5609c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else { 5619c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 56217e9e1933055b207473b488595b2887bfcaea32eJim Miller } 563bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 564bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 565bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 566bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 567524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav private void updatePreferenceSummaryIfNeeded() { 56823c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence // On a default block encrypted device with accessibility, add a warning 56923c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence // that your data is not credential encrypted 57023c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence if (!StorageManager.isBlockEncrypted()) { 57123c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence return; 57223c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence } 57323c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence 57423c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence if (StorageManager.isNonDefaultBlockEncrypted()) { 57540ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav return; 57640ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav } 57740ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav 578524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav if (AccessibilityManager.getInstance(getActivity()).getEnabledAccessibilityServiceList( 579524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav AccessibilityServiceInfo.FEEDBACK_ALL_MASK).isEmpty()) { 580524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav return; 581524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 582524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 583524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav CharSequence summary = getString(R.string.secure_lock_encryption_warning); 584524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 585524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav PreferenceScreen screen = getPreferenceScreen(); 586524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav final int preferenceCount = screen.getPreferenceCount(); 587524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav for (int i = 0; i < preferenceCount; i++) { 588524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav Preference preference = screen.getPreference(i); 589524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav switch (preference.getKey()) { 590524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PATTERN: 591524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PIN: 592e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case KEY_UNLOCK_SET_PASSWORD: 593e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case KEY_UNLOCK_SET_MANAGED: { 594524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav preference.setSummary(summary); 595524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } break; 596524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 597524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 598524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 599524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 600e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic protected Intent getLockManagedPasswordIntent(boolean requirePassword, String password) { 601e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic return mManagedPasswordProvider.createIntent(requirePassword, password); 602e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } 603e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 6046b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam protected Intent getLockPasswordIntent(Context context, int quality, 605f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos int minLength, final int maxLength, 606fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri boolean requirePasswordToDecrypt, boolean confirmCredentials, int userId) { 607f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos return ChooseLockPassword.createIntent(context, quality, minLength, 608fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, requirePasswordToDecrypt, confirmCredentials, userId); 6096b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 6106b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 6116609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales protected Intent getLockPasswordIntent(Context context, int quality, 6126609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales int minLength, final int maxLength, 613fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri boolean requirePasswordToDecrypt, long challenge, int userId) { 6146609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales return ChooseLockPassword.createIntent(context, quality, minLength, 615fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, requirePasswordToDecrypt, challenge, userId); 6166609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 6176609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 6183859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam protected Intent getLockPasswordIntent(Context context, int quality, int minLength, 619fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri int maxLength, boolean requirePasswordToDecrypt, String password, int userId) { 620a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales return ChooseLockPassword.createIntent(context, quality, minLength, maxLength, 621fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri requirePasswordToDecrypt, password, userId); 622a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales } 623a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales 624f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 625fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri final boolean confirmCredentials, int userId) { 626f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos return ChooseLockPattern.createIntent(context, requirePassword, 627fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri confirmCredentials, userId); 6286b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 6296b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 6306609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 631fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri long challenge, int userId) { 632fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri return ChooseLockPattern.createIntent(context, requirePassword, challenge, userId); 6336609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 6346609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 6353859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 636fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri final String pattern, int userId) { 637fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri return ChooseLockPattern.createIntent(context, requirePassword, pattern, userId); 638a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales } 639a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales 640ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam protected Intent getEncryptionInterstitialIntent(Context context, int quality, 641edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini boolean required, Intent unlockMethodIntent) { 642edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return EncryptionInterstitial.createStartIntent(context, quality, required, 643edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 644ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam } 645ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam 6465541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller /** 64717e9e1933055b207473b488595b2887bfcaea32eJim Miller * Invokes an activity to change the user's pattern, password or PIN based on given quality 64817e9e1933055b207473b488595b2887bfcaea32eJim Miller * and minimum quality specified by DevicePolicyManager. If quality is 64917e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED}, password is cleared. 65017e9e1933055b207473b488595b2887bfcaea32eJim Miller * 6516370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler * @param quality the desired quality. Ignored if DevicePolicyManager requires more security 65217e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param disabled whether or not to show LockScreen at all. Only meaningful when quality is 65317e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED} 65417e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 65517e9e1933055b207473b488595b2887bfcaea32eJim Miller void updateUnlockMethodAndFinish(int quality, boolean disabled) { 6566370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // Sanity check. We should never get here without confirming user's existing password. 65717e9e1933055b207473b488595b2887bfcaea32eJim Miller if (!mPasswordConfirmed) { 6586370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler throw new IllegalStateException("Tried to update password without confirming it"); 65917e9e1933055b207473b488595b2887bfcaea32eJim Miller } 660bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 661f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos quality = upgradeQuality(quality); 662edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = getIntentForUnlockMethod(quality, disabled); 663edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (intent != null) { 6644fdcec71dce130be3363dba93e685789797fee8eSteven Ng startActivityForResult(intent, 6654fdcec71dce130be3363dba93e685789797fee8eSteven Ng mIsSetNewPassword && mHasChallenge 6664fdcec71dce130be3363dba93e685789797fee8eSteven Ng ? CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST 6674fdcec71dce130be3363dba93e685789797fee8eSteven Ng : CHOOSE_LOCK_REQUEST); 668edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return; 669edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 670edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini 671edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { 6724bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword); 673edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChooseLockSettingsHelper.utils().clearLock(mUserId); 674edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId); 675edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini getActivity().setResult(Activity.RESULT_OK); 6764fdcec71dce130be3363dba93e685789797fee8eSteven Ng removeAllFingerprintForUserAndFinish(mUserId); 677edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } else { 678751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeAllFingerprintForUserAndFinish(mUserId); 679edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 680edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 681c620ba41ce20e683aad3d124b3866cadaddcc87dSteven Ross 682edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini private Intent getIntentForUnlockMethod(int quality, boolean disabled) { 683edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = null; 6846b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam final Context context = getActivity(); 685e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic if (quality >= DevicePolicyManager.PASSWORD_QUALITY_MANAGED) { 686e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic intent = getLockManagedPasswordIntent(mRequirePassword, mUserPassword); 687e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { 68825c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int minLength = mDPM.getPasswordMinimumLength(null, mUserId); 68917e9e1933055b207473b488595b2887bfcaea32eJim Miller if (minLength < MIN_PASSWORD_LENGTH) { 69017e9e1933055b207473b488595b2887bfcaea32eJim Miller minLength = MIN_PASSWORD_LENGTH; 69117e9e1933055b207473b488595b2887bfcaea32eJim Miller } 69217e9e1933055b207473b488595b2887bfcaea32eJim Miller final int maxLength = mDPM.getPasswordMaximumLength(quality); 6936609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales if (mHasChallenge) { 6946609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPasswordIntent(context, quality, minLength, 695fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, mRequirePassword, mChallenge, mUserId); 6966609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } else { 6976609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPasswordIntent(context, quality, minLength, 698edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini maxLength, mRequirePassword, mUserPassword, mUserId); 6996609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 70017e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { 7016609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales if (mHasChallenge) { 7026609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPatternIntent(context, mRequirePassword, 703edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChallenge, mUserId); 7046609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } else { 7056609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPatternIntent(context, mRequirePassword, 706edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mUserPassword, mUserId); 7076609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 70817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 70992779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini if (intent != null) { 71092779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini intent.putExtra(EXTRA_HIDE_DRAWER, mHideDrawer); 71192779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini } 712edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return intent; 713abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 714b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 715751de372750336c2dbc6ed656de84b881ede0858Ricky Wai private void removeAllFingerprintForUserAndFinish(final int userId) { 716dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { 717dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai if (mFingerprintManager.hasEnrolledFingerprints(userId)) { 718dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai mFingerprintManager.setActiveUser(userId); 719dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai // For the purposes of M and N, groupId is the same as userId. 720dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai final int groupId = userId; 721dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai Fingerprint finger = new Fingerprint(null, groupId, 0, 0); 722dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai mFingerprintManager.remove(finger, userId, 723dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai new RemovalCallback() { 724dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai @Override 725dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai public void onRemovalError(Fingerprint fp, int errMsgId, 726dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai CharSequence errString) { 727dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai Log.v(TAG, "Fingerprint removed: " + fp.getFingerId()); 728dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai if (fp.getFingerId() == 0) { 729dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai removeManagedProfileFingerprintsAndFinishIfNecessary(userId); 730dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai } 731751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 732eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri 733dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai @Override 734dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai public void onRemovalSucceeded(Fingerprint fingerprint) { 735dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai if (fingerprint.getFingerId() == 0) { 736dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai removeManagedProfileFingerprintsAndFinishIfNecessary(userId); 737dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai } 738751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 739dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai }); 740dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai } else { 741dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai // No fingerprints in this user, we may also want to delete managed profile 742dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai // fingerprints 743dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai removeManagedProfileFingerprintsAndFinishIfNecessary(userId); 744dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai } 7455a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini } else { 7465a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // The removal callback will call finish, once all fingerprints are removed. 7475a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // We need to wait for that to occur, otherwise, the UI will still show that 7485a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // fingerprints exist even though they are (about to) be removed depending on 7495a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // the race condition. 7505a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini finish(); 7519218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 7529218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 7539218687e4baaf0226ef16b58f78123d979711e5dJim Miller 754751de372750336c2dbc6ed656de84b881ede0858Ricky Wai private void removeManagedProfileFingerprintsAndFinishIfNecessary(final int parentUserId) { 7558d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { 7568d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey mFingerprintManager.setActiveUser(UserHandle.myUserId()); 7578d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey } 758751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final UserManager um = UserManager.get(getActivity()); 759751de372750336c2dbc6ed656de84b881ede0858Ricky Wai boolean hasChildProfile = false; 760751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (!um.getUserInfo(parentUserId).isManagedProfile()) { 761751de372750336c2dbc6ed656de84b881ede0858Ricky Wai // Current user is primary profile, remove work profile fingerprints if necessary 762751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final List<UserInfo> profiles = um.getProfiles(parentUserId); 763751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final int profilesSize = profiles.size(); 764751de372750336c2dbc6ed656de84b881ede0858Ricky Wai for (int i = 0; i < profilesSize; i++) { 765751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final UserInfo userInfo = profiles.get(i); 766751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (userInfo.isManagedProfile() && !mLockPatternUtils 767751de372750336c2dbc6ed656de84b881ede0858Ricky Wai .isSeparateProfileChallengeEnabled(userInfo.id)) { 768751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeAllFingerprintForUserAndFinish(userInfo.id); 769751de372750336c2dbc6ed656de84b881ede0858Ricky Wai hasChildProfile = true; 770751de372750336c2dbc6ed656de84b881ede0858Ricky Wai break; 771751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 772751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 773751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 774751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (!hasChildProfile) { 775751de372750336c2dbc6ed656de84b881ede0858Ricky Wai finish(); 776751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 777751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 778751de372750336c2dbc6ed656de84b881ede0858Ricky Wai 7799218687e4baaf0226ef16b58f78123d979711e5dJim Miller @Override 7809218687e4baaf0226ef16b58f78123d979711e5dJim Miller public void onDestroy() { 7819218687e4baaf0226ef16b58f78123d979711e5dJim Miller super.onDestroy(); 7829218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 7839218687e4baaf0226ef16b58f78123d979711e5dJim Miller 784b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani @Override 785b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani protected int getHelpResource() { 786b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani return R.string.help_url_choose_lockscreen; 787b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani } 788b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 78934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri private int getResIdForFactoryResetProtectionWarningTitle() { 790788671647c6d615684d159a94ffb5b4367df6896Robin Lee boolean isProfile = UserManager.get(getActivity()).isManagedProfile(mUserId); 79134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return isProfile ? R.string.unlock_disable_frp_warning_title_profile 79234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri : R.string.unlock_disable_frp_warning_title; 79334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 79434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri 79538c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private int getResIdForFactoryResetProtectionWarningMessage() { 7968d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey final boolean hasFingerprints; 7978d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { 7988d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey hasFingerprints = mFingerprintManager.hasEnrolledFingerprints(mUserId); 7998d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey } else { 8008d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey hasFingerprints = false; 8018d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey } 802788671647c6d615684d159a94ffb5b4367df6896Robin Lee boolean isProfile = UserManager.get(getActivity()).isManagedProfile(mUserId); 803fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) { 8043bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 80534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 80634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 80734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_pattern_fingerprint_profile; 80834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 80934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern_fingerprint; 81034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 81134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern_profile; 81234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 81334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern; 81434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 8153bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 8163bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 81734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 81834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_fingerprint_profile; 81934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 82034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_fingerprint; 82134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 82234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_profile; 82334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 82434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin; 82534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 8263bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 8273bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 8283bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 829e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 83034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 83134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 83234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_password_fingerprint_profile; 83334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 83434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password_fingerprint; 83534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 83634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password_profile; 83734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 83834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password; 83934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 8403bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang default: 84134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 84234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 84334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_unknown_fingerprint_profile; 84434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 84534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown_fingerprint; 84634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 84734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown_profile; 84834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 84934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown; 85034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 8513bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8523bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8533bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8543bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean isUnlockMethodSecure(String unlockMethod) { 8553bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return !(KEY_UNLOCK_SET_OFF.equals(unlockMethod) || 8563bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang KEY_UNLOCK_SET_NONE.equals(unlockMethod)); 8573bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8583bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8593bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean setUnlockMethod(String unlockMethod) { 8603bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang EventLog.writeEvent(EventLogTags.LOCK_SCREEN_TYPE, unlockMethod); 8613bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8623bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang if (KEY_UNLOCK_SET_OFF.equals(unlockMethod)) { 8633bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang updateUnlockMethodAndFinish( 8643bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true /* disabled */ ); 8653bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_NONE.equals(unlockMethod)) { 8663bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang updateUnlockMethodAndFinish( 8673bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, false /* disabled */ ); 868e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else if (KEY_UNLOCK_SET_MANAGED.equals(unlockMethod)) { 869e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic maybeEnableEncryption(DevicePolicyManager.PASSWORD_QUALITY_MANAGED, false); 8703bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PATTERN.equals(unlockMethod)) { 8713bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 8723bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false); 8733bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PIN.equals(unlockMethod)) { 8743bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 8753bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, false); 8763bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PASSWORD.equals(unlockMethod)) { 8773bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 8783bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, false); 8793bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else { 8803bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang Log.e(TAG, "Encountered unknown unlock method to set: " + unlockMethod); 8813bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return false; 8823bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8833bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return true; 8843bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8853bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8863bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private void showFactoryResetProtectionWarningDialog(String unlockMethodToSet) { 88734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri int title = getResIdForFactoryResetProtectionWarningTitle(); 88838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos int message = getResIdForFactoryResetProtectionWarningMessage(); 8893bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog dialog = 89034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri FactoryResetProtectionWarningDialog.newInstance( 89134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri title, message, unlockMethodToSet); 8923bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang dialog.show(getChildFragmentManager(), TAG_FRP_WARNING_DIALOG); 8933bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8943bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 895ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang public static class FactoryResetProtectionWarningDialog extends InstrumentedDialogFragment { 8963bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 89734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri private static final String ARG_TITLE_RES = "titleRes"; 89838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private static final String ARG_MESSAGE_RES = "messageRes"; 8993bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private static final String ARG_UNLOCK_METHOD_TO_SET = "unlockMethodToSet"; 9003bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 90134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri public static FactoryResetProtectionWarningDialog newInstance( 90234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri int titleRes, int messageRes, String unlockMethodToSet) { 9033bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog frag = 9043bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new FactoryResetProtectionWarningDialog(); 9053bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang Bundle args = new Bundle(); 90634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri args.putInt(ARG_TITLE_RES, titleRes); 90738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos args.putInt(ARG_MESSAGE_RES, messageRes); 9083bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang args.putString(ARG_UNLOCK_METHOD_TO_SET, unlockMethodToSet); 9093bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang frag.setArguments(args); 9103bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return frag; 9113bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 9123bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 9133bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 9143bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void show(FragmentManager manager, String tag) { 9153bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang if (manager.findFragmentByTag(tag) == null) { 9163bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Prevent opening multiple dialogs if tapped on button quickly 9173bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang super.show(manager, tag); 9183bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 9193bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 9203bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 9213bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 9223bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public Dialog onCreateDialog(Bundle savedInstanceState) { 9233bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang final Bundle args = getArguments(); 9243bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 9253bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return new AlertDialog.Builder(getActivity()) 92634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .setTitle(args.getInt(ARG_TITLE_RES)) 92738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setMessage(args.getInt(ARG_MESSAGE_RES)) 92838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setPositiveButton(R.string.unlock_disable_frp_warning_ok, 9293bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new DialogInterface.OnClickListener() { 9303bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 9313bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void onClick(DialogInterface dialog, int whichButton) { 9323bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ((ChooseLockGenericFragment) getParentFragment()) 9333bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .setUnlockMethod( 9343bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang args.getString(ARG_UNLOCK_METHOD_TO_SET)); 9353bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 9363bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 9373bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ) 9383bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .setNegativeButton(R.string.cancel, 9393bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new DialogInterface.OnClickListener() { 9403bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 9413bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void onClick(DialogInterface dialog, int whichButton) { 9423bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang dismiss(); 9433bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 9443bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 9453bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ) 9463bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .create(); 9473bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 948ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang 949ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang @Override 950ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang public int getMetricsCategory() { 951ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang return MetricsEvent.DIALOG_FRP; 952ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang } 9533bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 954abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 955abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn} 956