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 172eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lampackage com.android.settings.password; 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; 212eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam 222eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport static com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment.RESULT_FINISHED; 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; 32abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Intent; 33751de372750336c2dbc6ed656de84b881ede0858Ricky Waiimport android.content.pm.UserInfo; 3439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.Fingerprint; 3539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager; 3639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager.RemovalCallback; 37abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.os.Bundle; 385437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roosimport android.os.UserHandle; 39f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chenimport android.os.UserManager; 4023c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrenceimport android.os.storage.StorageManager; 41d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstromimport android.security.KeyStore; 42edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lamimport android.support.annotation.StringRes; 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 51265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 526465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunneimport com.android.internal.widget.LockPatternUtils; 532eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.EncryptionInterstitial; 542eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.EventLogTags; 552eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.R; 562eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.SettingsActivity; 572eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.SettingsPreferenceFragment; 582eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.Utils; 59ac5e5932233eb4b485bd76087987182009be2c2fFan Zhangimport com.android.settings.core.instrumentation.InstrumentedDialogFragment; 604fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport com.android.settings.fingerprint.FingerprintEnrollBase; 614fdcec71dce130be3363dba93e685789797fee8eSteven Ngimport com.android.settings.fingerprint.FingerprintEnrollFindSensor; 629c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils; 632eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 649c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedPreference; 659c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka 66751de372750336c2dbc6ed656de84b881ede0858Ricky Waiimport java.util.List; 67751de372750336c2dbc6ed656de84b881ede0858Ricky Wai 68263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Megliopublic class ChooseLockGeneric extends SettingsActivity { 690698a216311acd9ab52224602d1a75c08bf89f04Jim Miller public static final String CONFIRM_CREDENTIALS = "confirm_credentials"; 70abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 71abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn @Override 7217e9e1933055b207473b488595b2887bfcaea32eJim Miller public Intent getIntent() { 7317e9e1933055b207473b488595b2887bfcaea32eJim Miller Intent modIntent = new Intent(super.getIntent()); 7452c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam modIntent.putExtra(EXTRA_SHOW_FRAGMENT, getFragmentClass().getName()); 7592779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini 7692779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini String action = modIntent.getAction(); 774fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (ACTION_SET_NEW_PASSWORD.equals(action) 784fdcec71dce130be3363dba93e685789797fee8eSteven Ng || ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals(action)) { 7992779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini modIntent.putExtra(EXTRA_HIDE_DRAWER, true); 8092779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini } 8117e9e1933055b207473b488595b2887bfcaea32eJim Miller return modIntent; 82a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani } 83a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani 84a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani @Override 85a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani protected boolean isValidFragment(String fragmentName) { 86a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani if (ChooseLockGenericFragment.class.getName().equals(fragmentName)) return true; 87a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani return false; 8817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 89bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 9052c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam /* package */ Class<? extends Fragment> getFragmentClass() { 9152c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam return ChooseLockGenericFragment.class; 9252c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam } 9352c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam 9466026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani public static class InternalActivity extends ChooseLockGeneric { 9566026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 9666026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani 9717e9e1933055b207473b488595b2887bfcaea32eJim Miller public static class ChooseLockGenericFragment extends SettingsPreferenceFragment { 98edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam 993fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final String TAG = "ChooseLockGenericFragment"; 10017e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final int MIN_PASSWORD_LENGTH = 4; 1014fdcec71dce130be3363dba93e685789797fee8eSteven Ng private static final String KEY_SKIP_FINGERPRINT = "unlock_skip_fingerprint"; 10217e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String PASSWORD_CONFIRMED = "password_confirmed"; 10347f1cd4325e839dd33273a451fa052e83789e483Jim Miller private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation"; 104d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom public static final String MINIMUM_QUALITY_KEY = "minimum_quality"; 1053fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller public static final String HIDE_DISABLED_PREFS = "hide_disabled_prefs"; 10646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_QUALITY = "encrypt_requested_quality"; 10746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_DISABLED = "encrypt_requested_disabled"; 1083bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public static final String TAG_FRP_WARNING_DIALOG = "frp_warning_dialog"; 10917e9e1933055b207473b488595b2887bfcaea32eJim Miller 110edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam /** 111edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * Boolean extra determining whether a "screen lock options" button should be shown. This 112edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * extra is both sent and received by ChooseLockGeneric. 113edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * 114edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * When this extra is false, nothing will be done. 115edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * When ChooseLockGeneric receives this extra set as true, and if ChooseLockGeneric is 116edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * starting ChooseLockPassword or ChooseLockPattern automatically without user interaction, 117edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * ChooseLockGeneric will set this extra to true when starting ChooseLockPassword/Pattern. 118edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * 119edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * This gives the user the choice to select a different screen lock type, even if 120edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * ChooseLockGeneric selected a default. 121edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam */ 122edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam public static final String EXTRA_SHOW_OPTIONS_BUTTON = "show_options_button"; 123edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam 124edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam /** 125edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * Original intent extras used to start this activity. This is passed to ChooseLockPassword 126edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * when the "screen lock options" button is shown, so that when that button is clicked, 127edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * ChooseLockGeneric can be relaunched with the same extras. 128edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam */ 129edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam public static final String EXTRA_CHOOSE_LOCK_GENERIC_EXTRAS = "choose_lock_generic_extras"; 130edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam 1313fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CONFIRM_EXISTING_REQUEST = 100; 1323fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int ENABLE_ENCRYPTION_REQUEST = 101; 1333fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CHOOSE_LOCK_REQUEST = 102; 1344fdcec71dce130be3363dba93e685789797fee8eSteven Ng private static final int CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST = 103; 1354fdcec71dce130be3363dba93e685789797fee8eSteven Ng private static final int SKIP_FINGERPRINT_REQUEST = 104; 13680412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett 13717e9e1933055b207473b488595b2887bfcaea32eJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 13817e9e1933055b207473b488595b2887bfcaea32eJim Miller private DevicePolicyManager mDPM; 139d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private KeyStore mKeyStore; 1406609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private boolean mHasChallenge = false; 1416609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private long mChallenge; 14217e9e1933055b207473b488595b2887bfcaea32eJim Miller private boolean mPasswordConfirmed = false; 14347f1cd4325e839dd33273a451fa052e83789e483Jim Miller private boolean mWaitingForConfirmation = false; 14446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private int mEncryptionRequestQuality; 14546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private boolean mEncryptionRequestDisabled; 14662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos private boolean mForChangeCredRequiredForBoot = false; 147a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales private String mUserPassword; 1480698a216311acd9ab52224602d1a75c08bf89f04Jim Miller private LockPatternUtils mLockPatternUtils; 1499218687e4baaf0226ef16b58f78123d979711e5dJim Miller private FingerprintManager mFingerprintManager; 150fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri private int mUserId; 15192779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini private boolean mHideDrawer = false; 152e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic private ManagedLockPasswordProvider mManagedPasswordProvider; 1534fdcec71dce130be3363dba93e685789797fee8eSteven Ng private boolean mIsSetNewPassword = false; 154ae16e55dd5d93db547cbcdb848a98242db8ad9f7Kevin Chyn private UserManager mUserManager; 155edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam private ChooseLockGenericController mController; 15617e9e1933055b207473b488595b2887bfcaea32eJim Miller 1578ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected boolean mForFingerprint = false; 1588ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 15917e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 1606507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 1619d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.CHOOSE_LOCK_GENERIC; 1628a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 1638a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 1648a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 16517e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onCreate(Bundle savedInstanceState) { 16617e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onCreate(savedInstanceState); 16717e9e1933055b207473b488595b2887bfcaea32eJim Miller 1684fdcec71dce130be3363dba93e685789797fee8eSteven Ng String chooseLockAction = getActivity().getIntent().getAction(); 169ab50807d1edacb4fca5447525bb5270a853eaafcJeff Sharkey mFingerprintManager = Utils.getFingerprintManagerOrNull(getActivity()); 17017e9e1933055b207473b488595b2887bfcaea32eJim Miller mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 171d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom mKeyStore = KeyStore.getInstance(); 17217e9e1933055b207473b488595b2887bfcaea32eJim Miller mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this.getActivity()); 1730698a216311acd9ab52224602d1a75c08bf89f04Jim Miller mLockPatternUtils = new LockPatternUtils(getActivity()); 1744fdcec71dce130be3363dba93e685789797fee8eSteven Ng mIsSetNewPassword = ACTION_SET_NEW_PARENT_PROFILE_PASSWORD.equals(chooseLockAction) 1754fdcec71dce130be3363dba93e685789797fee8eSteven Ng || ACTION_SET_NEW_PASSWORD.equals(chooseLockAction); 17617e9e1933055b207473b488595b2887bfcaea32eJim Miller 177c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett // Defaults to needing to confirm credentials 178c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett final boolean confirmCredentials = getActivity().getIntent() 179c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett .getBooleanExtra(CONFIRM_CREDENTIALS, true); 18066026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani if (getActivity() instanceof ChooseLockGeneric.InternalActivity) { 18166026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani mPasswordConfirmed = !confirmCredentials; 18240e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov mUserPassword = getActivity().getIntent().getStringExtra( 18340e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 18466026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 18592779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini mHideDrawer = getActivity().getIntent().getBooleanExtra(EXTRA_HIDE_DRAWER, false); 186c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett 1876609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mHasChallenge = getActivity().getIntent().getBooleanExtra( 1886609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false); 1896609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mChallenge = getActivity().getIntent().getLongExtra( 1906609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0); 191c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint = getActivity().getIntent().getBooleanExtra( 192c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false); 19362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mForChangeCredRequiredForBoot = getArguments() != null && getArguments().getBoolean( 19462775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT); 195ae16e55dd5d93db547cbcdb848a98242db8ad9f7Kevin Chyn mUserManager = UserManager.get(getActivity()); 1966609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 19717e9e1933055b207473b488595b2887bfcaea32eJim Miller if (savedInstanceState != null) { 19817e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); 19947f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION); 20046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = savedInstanceState.getInt(ENCRYPT_REQUESTED_QUALITY); 20146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = savedInstanceState.getBoolean( 20246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller ENCRYPT_REQUESTED_DISABLED); 20340e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov if (mUserPassword == null) { 20440e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov mUserPassword = savedInstanceState.getString( 20540e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 20640e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov } 20717e9e1933055b207473b488595b2887bfcaea32eJim Miller } 208bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 2098f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak // a) If this is started from other user, use that user id. 2108f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak // b) If this is started from the same user, read the extra if this is launched 2118f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak // from Settings app itself. 2128f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak // c) Otherwise, use UserHandle.myUserId(). 2138f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak mUserId = Utils.getSecureTargetUser( 214ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz getActivity().getActivityToken(), 215ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz UserManager.get(getActivity()), 2168f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak getArguments(), 217ae07b5080aadd398598f8b5eea6cc2e260dcc8b1Benjamin Franz getActivity().getIntent().getExtras()).getIdentifier(); 218edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam mController = new ChooseLockGenericController(getContext(), mUserId); 2194fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (ACTION_SET_NEW_PASSWORD.equals(chooseLockAction) 220788671647c6d615684d159a94ffb5b4367df6896Robin Lee && UserManager.get(getActivity()).isManagedProfile(mUserId) 221bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra && mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId)) { 222bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra getActivity().setTitle(R.string.lock_settings_picker_title_profile); 223bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra } 224bc18b40623316f308bc21dd78f840ade73b89257Mahaver Chopra 225e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic mManagedPasswordProvider = ManagedLockPasswordProvider.get(getActivity(), mUserId); 226e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 22747f1cd4325e839dd33273a451fa052e83789e483Jim Miller if (mPasswordConfirmed) { 2282bb62380449da124cd36fac80d6072ad6c4d0592Maurice Lam updatePreferencesOrFinish(savedInstanceState != null); 22962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 23062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos maybeEnableEncryption(mLockPatternUtils.getKeyguardStoredPasswordQuality( 23162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mUserId), false); 23262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 23347f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else if (!mWaitingForConfirmation) { 2346370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler ChooseLockSettingsHelper helper = 2356370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler new ChooseLockSettingsHelper(this.getActivity(), this); 236788671647c6d615684d159a94ffb5b4367df6896Robin Lee boolean managedProfileWithUnifiedLock = 237788671647c6d615684d159a94ffb5b4367df6896Robin Lee UserManager.get(getActivity()).isManagedProfile(mUserId) 2384bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai && !mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId); 2394bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai if (managedProfileWithUnifiedLock 2404bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai || !helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, 241fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri getString(R.string.unlock_set_unlock_launch_picker_title), true, mUserId)) { 24217e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; // no password set, so no need to confirm 2432bb62380449da124cd36fac80d6072ad6c4d0592Maurice Lam updatePreferencesOrFinish(savedInstanceState != null); 24447f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else { 24547f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = true; 24617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 247bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 2488ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addHeaderView(); 2498ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini } 2508ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 2518ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected void addHeaderView() { 25287fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam if (mForFingerprint) { 25339b467482d1bf256a111c757e9b7621c6f523271Jason Monk setHeaderView(R.layout.choose_lock_generic_fingerprint_header); 2544fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (mIsSetNewPassword) { 2554fdcec71dce130be3363dba93e685789797fee8eSteven Ng ((TextView) getHeaderView().findViewById(R.id.fingerprint_header_description)) 2564fdcec71dce130be3363dba93e685789797fee8eSteven Ng .setText(R.string.fingerprint_unlock_title); 2574fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 25887fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 25987fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 26087fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam 26187fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam @Override 26239b467482d1bf256a111c757e9b7621c6f523271Jason Monk public boolean onPreferenceTreeClick(Preference preference) { 26317e9e1933055b207473b488595b2887bfcaea32eJim Miller final String key = preference.getKey(); 26427d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich cannings 265fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(mUserId)) { 2663bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Show the disabling FRP warning only when the user is switching from a secure 2673bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // unlock method to an insecure one 2683bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang showFactoryResetProtectionWarningDialog(key); 2693bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return true; 2704fdcec71dce130be3363dba93e685789797fee8eSteven Ng } else if (KEY_SKIP_FINGERPRINT.equals(key)) { 271436256c36d69549c77320d073bef27649c1b1d6eSteven Ng Intent chooseLockGenericIntent = new Intent(getActivity(), 272436256c36d69549c77320d073bef27649c1b1d6eSteven Ng ChooseLockGeneric.InternalActivity.class); 2734fdcec71dce130be3363dba93e685789797fee8eSteven Ng chooseLockGenericIntent.setAction(getIntent().getAction()); 2748f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak // Forward the target user id to ChooseLockGeneric. 2758f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak chooseLockGenericIntent.putExtra(Intent.EXTRA_USER_ID, mUserId); 276436256c36d69549c77320d073bef27649c1b1d6eSteven Ng chooseLockGenericIntent.putExtra(CONFIRM_CREDENTIALS, !mPasswordConfirmed); 27740e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov if (mUserPassword != null) { 27840e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov chooseLockGenericIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, 27940e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov mUserPassword); 28040e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov } 2814fdcec71dce130be3363dba93e685789797fee8eSteven Ng startActivityForResult(chooseLockGenericIntent, SKIP_FINGERPRINT_REQUEST); 2824fdcec71dce130be3363dba93e685789797fee8eSteven Ng return true; 28317e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 2843bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return setUnlockMethod(key); 28517e9e1933055b207473b488595b2887bfcaea32eJim Miller } 286bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 287bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 28846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller /** 28946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * If the device has encryption already enabled, then ask the user if they 29046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * also want to encrypt the phone with this password. 29146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * 29246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param quality 29346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param disabled 29446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller */ 295a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // TODO: why does this take disabled, its always called with a quality higher than 296a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // what makes sense with disabled == true 29746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private void maybeEnableEncryption(int quality, boolean disabled) { 298146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); 299f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen if (UserManager.get(getActivity()).isAdminUser() 30093bcfcb14d42ea0884b922ae1a4d84a6955ed835Clara Bayarri && mUserId == UserHandle.myUserId() 301f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen && LockPatternUtils.isDeviceEncryptionEnabled() 302fb4c583dba1fb8885ff9369bdab916eaa61b42bdPaul Lawrence && !LockPatternUtils.isFileEncryptionEnabled() 303146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov && !dpm.getDoNotAskCredentialsOnBoot()) { 30446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = quality; 30546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = disabled; 306edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // Get the intent that the encryption interstitial should start for creating 307edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // the new unlock method. 3082eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam Intent unlockMethodIntent = getIntentForUnlockMethod(quality); 30962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos unlockMethodIntent.putExtra( 31062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos ChooseLockSettingsHelper.EXTRA_KEY_FOR_CHANGE_CRED_REQUIRED_FOR_BOOT, 31162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mForChangeCredRequiredForBoot); 312ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final Context context = getActivity(); 3130698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // If accessibility is enabled and the user hasn't seen this dialog before, set the 3140698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // default state to agree with that which is compatible with accessibility 3150698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // (password not required). 316ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final boolean accEn = AccessibilityManager.getInstance(context).isEnabled(); 3170698a216311acd9ab52224602d1a75c08bf89f04Jim Miller final boolean required = mLockPatternUtils.isCredentialRequiredToDecrypt(!accEn); 318edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = getEncryptionInterstitialIntent(context, quality, required, 319edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 320c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, 321c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint); 32292779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini intent.putExtra(EXTRA_HIDE_DRAWER, mHideDrawer); 323378dec149569f57a4f8bfcbf5ece3fd458ab6263Steven Ng startActivityForResult( 324378dec149569f57a4f8bfcbf5ece3fd458ab6263Steven Ng intent, 325378dec149569f57a4f8bfcbf5ece3fd458ab6263Steven Ng mIsSetNewPassword && mHasChallenge 326378dec149569f57a4f8bfcbf5ece3fd458ab6263Steven Ng ? CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST 327378dec149569f57a4f8bfcbf5ece3fd458ab6263Steven Ng : ENABLE_ENCRYPTION_REQUEST); 32846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } else { 32962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 33062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos // Welp, couldn't change it. Oh well. 33162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 33262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos return; 33362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 334edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam updateUnlockMethodAndFinish(quality, disabled, false /* chooseLockSkipped */); 33546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 33646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 33746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller 33817e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 33917e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onActivityResult(int requestCode, int resultCode, Intent data) { 34017e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onActivityResult(requestCode, resultCode, data); 34147f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = false; 34217e9e1933055b207473b488595b2887bfcaea32eJim Miller if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) { 34317e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; 344a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales mUserPassword = data.getStringExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 3452bb62380449da124cd36fac80d6072ad6c4d0592Maurice Lam updatePreferencesOrFinish(false /* isRecreatingActivity */); 34662775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (mForChangeCredRequiredForBoot) { 34762775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (!TextUtils.isEmpty(mUserPassword)) { 34862775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos maybeEnableEncryption( 34962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId), false); 35062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } else { 35162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 35262775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 35362775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 354e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } else if (requestCode == CHOOSE_LOCK_REQUEST 355e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam || requestCode == ENABLE_ENCRYPTION_REQUEST) { 35677181e947860056fb77d24ab9fa9e86365b244e6Adrian Roos if (resultCode != RESULT_CANCELED || mForChangeCredRequiredForBoot) { 357e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam getActivity().setResult(resultCode, data); 358e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam finish(); 359edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } else { 360edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam // If PASSWORD_TYPE_KEY is set, this activity is used as a trampoline to start 361edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam // the actual password enrollment. If the result is canceled, which means the 362edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam // user pressed back, finish the activity with result canceled. 363edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam int quality = getIntent().getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); 364edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam if (quality != -1) { 365edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam getActivity().setResult(RESULT_CANCELED, data); 366edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam finish(); 367edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 368e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } 3694fdcec71dce130be3363dba93e685789797fee8eSteven Ng } else if (requestCode == CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST 3704fdcec71dce130be3363dba93e685789797fee8eSteven Ng && resultCode == FingerprintEnrollBase.RESULT_FINISHED) { 371d6b1c666c56e15c6806d891002c6abd8ed81aa2dUdam Saini Intent intent = getFindSensorIntent(getActivity()); 3724fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (data != null) { 3734fdcec71dce130be3363dba93e685789797fee8eSteven Ng intent.putExtras(data.getExtras()); 3744fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 3758f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak // Forward the target user id to fingerprint setup page. 3768f41b9b665369356aae5a2410ebc62e79b9122a2Tony Mak intent.putExtra(Intent.EXTRA_USER_ID, mUserId); 3774fdcec71dce130be3363dba93e685789797fee8eSteven Ng startActivity(intent); 3784fdcec71dce130be3363dba93e685789797fee8eSteven Ng finish(); 3794fdcec71dce130be3363dba93e685789797fee8eSteven Ng } else if (requestCode == SKIP_FINGERPRINT_REQUEST) { 3804fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (resultCode != RESULT_CANCELED) { 3814fdcec71dce130be3363dba93e685789797fee8eSteven Ng getActivity().setResult( 3824fdcec71dce130be3363dba93e685789797fee8eSteven Ng resultCode == RESULT_FINISHED ? RESULT_OK : resultCode, data); 3834fdcec71dce130be3363dba93e685789797fee8eSteven Ng finish(); 3844fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 38517e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 38617e9e1933055b207473b488595b2887bfcaea32eJim Miller getActivity().setResult(Activity.RESULT_CANCELED); 38717e9e1933055b207473b488595b2887bfcaea32eJim Miller finish(); 38817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 38962775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos if (requestCode == Activity.RESULT_CANCELED && mForChangeCredRequiredForBoot) { 39062775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos finish(); 39162775bf756a8eca9423bb4fab3fc7b71ab22d1a7Adrian Roos } 392bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 393bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 394d6b1c666c56e15c6806d891002c6abd8ed81aa2dUdam Saini protected Intent getFindSensorIntent(Context context) { 395d6b1c666c56e15c6806d891002c6abd8ed81aa2dUdam Saini return new Intent(context, FingerprintEnrollFindSensor.class); 396d6b1c666c56e15c6806d891002c6abd8ed81aa2dUdam Saini } 397d6b1c666c56e15c6806d891002c6abd8ed81aa2dUdam Saini 39817e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 39917e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onSaveInstanceState(Bundle outState) { 40017e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onSaveInstanceState(outState); 40117e9e1933055b207473b488595b2887bfcaea32eJim Miller // Saved so we don't force user to re-enter their password if configuration changes 40217e9e1933055b207473b488595b2887bfcaea32eJim Miller outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); 40347f1cd4325e839dd33273a451fa052e83789e483Jim Miller outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation); 40446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putInt(ENCRYPT_REQUESTED_QUALITY, mEncryptionRequestQuality); 40546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putBoolean(ENCRYPT_REQUESTED_DISABLED, mEncryptionRequestDisabled); 40640e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov if (mUserPassword != null) { 40740e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov outState.putString(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, mUserPassword); 40840e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov } 40917e9e1933055b207473b488595b2887bfcaea32eJim Miller } 410bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 4112bb62380449da124cd36fac80d6072ad6c4d0592Maurice Lam private void updatePreferencesOrFinish(boolean isRecreatingActivity) { 4125541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller Intent intent = getActivity().getIntent(); 4135541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller int quality = intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); 41417e9e1933055b207473b488595b2887bfcaea32eJim Miller if (quality == -1) { 4156370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // If caller didn't specify password quality, show UI and allow the user to choose. 4165541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller quality = intent.getIntExtra(MINIMUM_QUALITY_KEY, -1); 417edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam quality = mController.upgradeQuality(quality); 4183fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller final boolean hideDisabledPrefs = intent.getBooleanExtra( 4193fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller HIDE_DISABLED_PREFS, false); 42017e9e1933055b207473b488595b2887bfcaea32eJim Miller final PreferenceScreen prefScreen = getPreferenceScreen(); 42117e9e1933055b207473b488595b2887bfcaea32eJim Miller if (prefScreen != null) { 42217e9e1933055b207473b488595b2887bfcaea32eJim Miller prefScreen.removeAll(); 42317e9e1933055b207473b488595b2887bfcaea32eJim Miller } 4248ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addPreferences(); 4253fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferences(quality, hideDisabledPrefs); 426bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini updatePreferenceText(); 4279a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk updateCurrentPreference(); 428524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav updatePreferenceSummaryIfNeeded(); 4292bb62380449da124cd36fac80d6072ad6c4d0592Maurice Lam } else if (!isRecreatingActivity) { 4302bb62380449da124cd36fac80d6072ad6c4d0592Maurice Lam // Don't start the activity again if we are recreated for configuration change 431edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam updateUnlockMethodAndFinish(quality, false, true /* chooseLockSkipped */); 432bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 433abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 434bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 4358ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini protected void addPreferences() { 4368ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini addPreferencesFromResource(R.xml.security_settings_picker); 437a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey 438a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey // Used for testing purposes 439edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam findPreference(ScreenLockType.NONE.preferenceKey).setViewId(R.id.lock_none); 440159dff63a5e8e1286f0d42d400b64d43fb104649Jeff Sharkey findPreference(KEY_SKIP_FINGERPRINT).setViewId(R.id.lock_none); 441edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam findPreference(ScreenLockType.PIN.preferenceKey).setViewId(R.id.lock_pin); 442edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam findPreference(ScreenLockType.PASSWORD.preferenceKey).setViewId(R.id.lock_password); 4438ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini } 4448ef4c620031973187eefc1f1f1a330e8fd26696dUdam Saini 445bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini private void updatePreferenceText() { 446bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini if (mForFingerprint) { 447edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceTitle(ScreenLockType.PATTERN, 448edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam R.string.fingerprint_unlock_set_unlock_pattern); 449edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceTitle(ScreenLockType.PIN, R.string.fingerprint_unlock_set_unlock_pin); 450edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceTitle(ScreenLockType.PASSWORD, 451edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam R.string.fingerprint_unlock_set_unlock_password); 452bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini } 453e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic 454e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic if (mManagedPasswordProvider.isSettingManagedPasswordSupported()) { 455edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceTitle(ScreenLockType.MANAGED, 456edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam mManagedPasswordProvider.getPickerOptionTitle(mForFingerprint)); 457e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else { 458edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam removePreference(ScreenLockType.MANAGED.preferenceKey); 459e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } 4604fdcec71dce130be3363dba93e685789797fee8eSteven Ng 4614fdcec71dce130be3363dba93e685789797fee8eSteven Ng if (!(mForFingerprint && mIsSetNewPassword)) { 4624fdcec71dce130be3363dba93e685789797fee8eSteven Ng removePreference(KEY_SKIP_FINGERPRINT); 4634fdcec71dce130be3363dba93e685789797fee8eSteven Ng } 464bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini } 465bf1483c383bfb42aaf78a7f9b0d2f5a41317ca86Udam Saini 466edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam private void setPreferenceTitle(ScreenLockType lock, @StringRes int title) { 467edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam Preference preference = findPreference(lock.preferenceKey); 468edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam if (preference != null) { 469edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam preference.setTitle(title); 470edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 471edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 472edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam 473edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam private void setPreferenceTitle(ScreenLockType lock, CharSequence title) { 474edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam Preference preference = findPreference(lock.preferenceKey); 475edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam if (preference != null) { 476edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam preference.setTitle(title); 477edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 478edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 479edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam 480edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam private void setPreferenceSummary(ScreenLockType lock, @StringRes int summary) { 481edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam Preference preference = findPreference(lock.preferenceKey); 482edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam if (preference != null) { 483edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam preference.setSummary(summary); 484edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 485edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 486edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam 4879a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private void updateCurrentPreference() { 4889a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk String currentKey = getKeyForCurrent(); 4899a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk Preference preference = findPreference(currentKey); 4909a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk if (preference != null) { 4919a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk preference.setSummary(R.string.current_screen_lock); 4929a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4939a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 4949a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk 4959a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private String getKeyForCurrent() { 496e07c947ea35b07eb354dd43068a5670dd6cce2efJason Monk final int credentialOwner = UserManager.get(getContext()) 497e07c947ea35b07eb354dd43068a5670dd6cce2efJason Monk .getCredentialOwnerProfile(mUserId); 4987402b2514358e02a0e0adde982b6deb8552dc28aClara Bayarri if (mLockPatternUtils.isLockScreenDisabled(credentialOwner)) { 499edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam return ScreenLockType.NONE.preferenceKey; 5009a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 501edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam ScreenLockType lock = 502edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam ScreenLockType.fromQuality( 503edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam mLockPatternUtils.getKeyguardStoredPasswordQuality(credentialOwner)); 504edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam return lock != null ? lock.preferenceKey : null; 505d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 506d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 50717e9e1933055b207473b488595b2887bfcaea32eJim Miller /*** 508df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * Disables preferences that are less secure than required quality. The actual 509df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * implementation is in disableUnusablePreferenceImpl. 510df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * 511df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param quality the requested quality. 5123fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * @param hideDisabledPrefs if false preferences show why they were disabled; otherwise 5133fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * they're not shown at all. 514df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang */ 5153fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller protected void disableUnusablePreferences(final int quality, boolean hideDisabledPrefs) { 5163fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferencesImpl(quality, hideDisabledPrefs); 517df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 518df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang 519df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang /*** 52017e9e1933055b207473b488595b2887bfcaea32eJim Miller * Disables preferences that are less secure than required quality. 52117e9e1933055b207473b488595b2887bfcaea32eJim Miller * 52217e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param quality the requested quality. 523df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param hideDisabled whether to hide disable screen lock options. 52417e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 525df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang protected void disableUnusablePreferencesImpl(final int quality, 526f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos boolean hideDisabled) { 527cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani final PreferenceScreen entries = getPreferenceScreen(); 528783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller 52925c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int adminEnforcedQuality = mDPM.getPasswordQuality(null, mUserId); 5309c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka EnforcedAdmin enforcedAdmin = RestrictedLockUtils.checkIfPasswordQualityIsSet( 531f755baf1c3b8fcbcee68720c8367e03381fffb4bSudheer Shanka getActivity(), mUserId); 532edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam 533edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam for (ScreenLockType lock : ScreenLockType.values()) { 534edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam String key = lock.preferenceKey; 535edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam Preference pref = findPreference(key); 5369c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka if (pref instanceof RestrictedPreference) { 537edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam boolean visible = mController.isScreenLockVisible(lock); 538edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam boolean enabled = mController.isScreenLockEnabled(lock, quality); 539edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam boolean disabledByAdmin = 540edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam mController.isScreenLockDisabledByAdmin(lock, adminEnforcedQuality); 541df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang if (hideDisabled) { 542edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam visible = visible && enabled; 543df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 544f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos if (!visible) { 545cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani entries.removePreference(pref); 5469c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else if (disabledByAdmin && enforcedAdmin != null) { 5479c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(enforcedAdmin); 5485541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (!enabled) { 5499c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // we need to setDisabledByAdmin to null first to disable the padlock 5509c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // in case it was set earlier. 5519c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 55217e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setSummary(R.string.unlock_set_unlock_disabled_summary); 55317e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setEnabled(false); 5549c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else { 5559c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 55617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 557bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 558bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 559bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 560bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 561524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav private void updatePreferenceSummaryIfNeeded() { 56223c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence // On a default block encrypted device with accessibility, add a warning 56323c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence // that your data is not credential encrypted 56423c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence if (!StorageManager.isBlockEncrypted()) { 56523c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence return; 56623c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence } 56723c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence 56823c2acfd4c01b270c998a4a497c658cc3d842473Paul Lawrence if (StorageManager.isNonDefaultBlockEncrypted()) { 56940ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav return; 57040ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav } 57140ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav 572524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav if (AccessibilityManager.getInstance(getActivity()).getEnabledAccessibilityServiceList( 573524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav AccessibilityServiceInfo.FEEDBACK_ALL_MASK).isEmpty()) { 574524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav return; 575524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 576524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 577edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceSummary(ScreenLockType.PATTERN, R.string.secure_lock_encryption_warning); 578edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceSummary(ScreenLockType.PIN, R.string.secure_lock_encryption_warning); 579edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceSummary(ScreenLockType.PASSWORD, R.string.secure_lock_encryption_warning); 580edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam setPreferenceSummary(ScreenLockType.MANAGED, R.string.secure_lock_encryption_warning); 581524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 582524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 5832eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam protected Intent getLockManagedPasswordIntent(String password) { 5842eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam return mManagedPasswordProvider.createIntent(false, password); 5856b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 5866b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 5872eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam protected Intent getLockPasswordIntent(int quality, int minLength, int maxLength) { 5882eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam ChooseLockPassword.IntentBuilder builder = 5892eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam new ChooseLockPassword.IntentBuilder(getContext()) 5902eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam .setPasswordQuality(quality) 5912eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam .setPasswordLengthRange(minLength, maxLength) 592b49526ee282f13a83ee38358473fcb628b5727a5Maurice Lam .setForFingerprint(mForFingerprint) 5932eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam .setUserId(mUserId); 5942eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam if (mHasChallenge) { 5952eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam builder.setChallenge(mChallenge); 59640e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov } 59740e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov if (mUserPassword != null) { 5982eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam builder.setPassword(mUserPassword); 5992eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam } 6002eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam return builder.build(); 6016609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 6026609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 6032eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam protected Intent getLockPatternIntent() { 6042eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam ChooseLockPattern.IntentBuilder builder = 6052eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam new ChooseLockPattern.IntentBuilder(getContext()) 606b49526ee282f13a83ee38358473fcb628b5727a5Maurice Lam .setForFingerprint(mForFingerprint) 6072eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam .setUserId(mUserId); 6082eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam if (mHasChallenge) { 6092eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam builder.setChallenge(mChallenge); 61040e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov } 61140e187b3641ac3084c706b10d2213b91a53da5d1Pavel Grafov if (mUserPassword != null) { 6122eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam builder.setPattern(mUserPassword); 6132eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam } 6142eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam return builder.build(); 615a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales } 616a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales 617ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam protected Intent getEncryptionInterstitialIntent(Context context, int quality, 618edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini boolean required, Intent unlockMethodIntent) { 619edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return EncryptionInterstitial.createStartIntent(context, quality, required, 620edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 621ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam } 622ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam 6235541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller /** 62417e9e1933055b207473b488595b2887bfcaea32eJim Miller * Invokes an activity to change the user's pattern, password or PIN based on given quality 62517e9e1933055b207473b488595b2887bfcaea32eJim Miller * and minimum quality specified by DevicePolicyManager. If quality is 62617e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED}, password is cleared. 62717e9e1933055b207473b488595b2887bfcaea32eJim Miller * 6286370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler * @param quality the desired quality. Ignored if DevicePolicyManager requires more security 62917e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param disabled whether or not to show LockScreen at all. Only meaningful when quality is 630edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * @param chooseLockSkipped whether or not this activity is skipped. This is true when this 631edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * activity was not shown to the user at all, instead automatically proceeding based on 632edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam * the given intent extras, typically {@link LockPatternUtils#PASSWORD_TYPE_KEY}. 63317e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED} 63417e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 635edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam void updateUnlockMethodAndFinish(int quality, boolean disabled, boolean chooseLockSkipped) { 6366370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // Sanity check. We should never get here without confirming user's existing password. 63717e9e1933055b207473b488595b2887bfcaea32eJim Miller if (!mPasswordConfirmed) { 6386370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler throw new IllegalStateException("Tried to update password without confirming it"); 63917e9e1933055b207473b488595b2887bfcaea32eJim Miller } 640bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 641edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam quality = mController.upgradeQuality(quality); 6422eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam Intent intent = getIntentForUnlockMethod(quality); 643edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (intent != null) { 644edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam if (getIntent().getBooleanExtra(EXTRA_SHOW_OPTIONS_BUTTON, false)) { 645edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam intent.putExtra(EXTRA_SHOW_OPTIONS_BUTTON, chooseLockSkipped); 646edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 647edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam intent.putExtra(EXTRA_CHOOSE_LOCK_GENERIC_EXTRAS, getIntent().getExtras()); 6484fdcec71dce130be3363dba93e685789797fee8eSteven Ng startActivityForResult(intent, 6494fdcec71dce130be3363dba93e685789797fee8eSteven Ng mIsSetNewPassword && mHasChallenge 6504fdcec71dce130be3363dba93e685789797fee8eSteven Ng ? CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST 6514fdcec71dce130be3363dba93e685789797fee8eSteven Ng : CHOOSE_LOCK_REQUEST); 652edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return; 653edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 654edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini 655edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { 6564bbf0653c0197aca3baa587df80e76ba1159a4fbRicky Wai mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword); 65779b4ebffebb48449d5d2126795f6c729eea25ec4Rubin Xu mChooseLockSettingsHelper.utils().clearLock(mUserPassword, mUserId); 658edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId); 659edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini getActivity().setResult(Activity.RESULT_OK); 6604fdcec71dce130be3363dba93e685789797fee8eSteven Ng removeAllFingerprintForUserAndFinish(mUserId); 661edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } else { 662751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeAllFingerprintForUserAndFinish(mUserId); 663edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 664edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 665c620ba41ce20e683aad3d124b3866cadaddcc87dSteven Ross 6662eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam private Intent getIntentForUnlockMethod(int quality) { 667edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = null; 668e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic if (quality >= DevicePolicyManager.PASSWORD_QUALITY_MANAGED) { 6692eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam intent = getLockManagedPasswordIntent(mUserPassword); 670e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic } else if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { 67125c3c54c03dab4bd14dbe92ac48e85df9c15bd68Tony Mak int minLength = mDPM.getPasswordMinimumLength(null, mUserId); 67217e9e1933055b207473b488595b2887bfcaea32eJim Miller if (minLength < MIN_PASSWORD_LENGTH) { 67317e9e1933055b207473b488595b2887bfcaea32eJim Miller minLength = MIN_PASSWORD_LENGTH; 67417e9e1933055b207473b488595b2887bfcaea32eJim Miller } 67517e9e1933055b207473b488595b2887bfcaea32eJim Miller final int maxLength = mDPM.getPasswordMaximumLength(quality); 6762eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam intent = getLockPasswordIntent(quality, minLength, maxLength); 67717e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { 6782eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam intent = getLockPatternIntent(); 67917e9e1933055b207473b488595b2887bfcaea32eJim Miller } 68092779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini if (intent != null) { 68192779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini intent.putExtra(EXTRA_HIDE_DRAWER, mHideDrawer); 68292779ce70156031f4fa3b8c2d84305f5b3b44105Udam Saini } 683edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return intent; 684abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 685b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 686751de372750336c2dbc6ed656de84b881ede0858Ricky Wai private void removeAllFingerprintForUserAndFinish(final int userId) { 687dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { 688dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai if (mFingerprintManager.hasEnrolledFingerprints(userId)) { 689dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai mFingerprintManager.setActiveUser(userId); 690dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai // For the purposes of M and N, groupId is the same as userId. 691dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai final int groupId = userId; 692dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai Fingerprint finger = new Fingerprint(null, groupId, 0, 0); 693dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai mFingerprintManager.remove(finger, userId, 694dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai new RemovalCallback() { 695dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai @Override 696dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai public void onRemovalError(Fingerprint fp, int errMsgId, 697dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai CharSequence errString) { 6987569bb18815437a2f656fc7ff4d57274c5055477Charles He Log.e(TAG, String.format( 6997569bb18815437a2f656fc7ff4d57274c5055477Charles He "Can't remove fingerprint %d in group %d. Reason: %s", 7007569bb18815437a2f656fc7ff4d57274c5055477Charles He fp.getFingerId(), fp.getGroupId(), errString)); 7017569bb18815437a2f656fc7ff4d57274c5055477Charles He // TODO: need to proceed with the removal of managed profile 7027569bb18815437a2f656fc7ff4d57274c5055477Charles He // fingerprints and finish() gracefully. 703751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 704eb8962d2734984d6e16f87261c01d8080ff16757Clara Bayarri 705dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai @Override 7067569bb18815437a2f656fc7ff4d57274c5055477Charles He public void onRemovalSucceeded(Fingerprint fp, int remaining) { 7077569bb18815437a2f656fc7ff4d57274c5055477Charles He if (remaining == 0) { 708dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai removeManagedProfileFingerprintsAndFinishIfNecessary(userId); 709dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai } 710751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 711dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai }); 712dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai } else { 713dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai // No fingerprints in this user, we may also want to delete managed profile 714dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai // fingerprints 715dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai removeManagedProfileFingerprintsAndFinishIfNecessary(userId); 716dae1ac5cb081a8f4de283711e6e1763051cf4dd6Ricky Wai } 7175a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini } else { 7185a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // The removal callback will call finish, once all fingerprints are removed. 7195a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // We need to wait for that to occur, otherwise, the UI will still show that 7205a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // fingerprints exist even though they are (about to) be removed depending on 7215a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini // the race condition. 7225a1dbf815222ef0bf9d89fb124b759353238d065Udam Saini finish(); 7239218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 7249218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 7259218687e4baaf0226ef16b58f78123d979711e5dJim Miller 726751de372750336c2dbc6ed656de84b881ede0858Ricky Wai private void removeManagedProfileFingerprintsAndFinishIfNecessary(final int parentUserId) { 7278d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { 7288d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey mFingerprintManager.setActiveUser(UserHandle.myUserId()); 7298d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey } 730751de372750336c2dbc6ed656de84b881ede0858Ricky Wai boolean hasChildProfile = false; 731ae16e55dd5d93db547cbcdb848a98242db8ad9f7Kevin Chyn if (!mUserManager.getUserInfo(parentUserId).isManagedProfile()) { 732751de372750336c2dbc6ed656de84b881ede0858Ricky Wai // Current user is primary profile, remove work profile fingerprints if necessary 733ae16e55dd5d93db547cbcdb848a98242db8ad9f7Kevin Chyn final List<UserInfo> profiles = mUserManager.getProfiles(parentUserId); 734751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final int profilesSize = profiles.size(); 735751de372750336c2dbc6ed656de84b881ede0858Ricky Wai for (int i = 0; i < profilesSize; i++) { 736751de372750336c2dbc6ed656de84b881ede0858Ricky Wai final UserInfo userInfo = profiles.get(i); 737751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (userInfo.isManagedProfile() && !mLockPatternUtils 738751de372750336c2dbc6ed656de84b881ede0858Ricky Wai .isSeparateProfileChallengeEnabled(userInfo.id)) { 739751de372750336c2dbc6ed656de84b881ede0858Ricky Wai removeAllFingerprintForUserAndFinish(userInfo.id); 740751de372750336c2dbc6ed656de84b881ede0858Ricky Wai hasChildProfile = true; 741751de372750336c2dbc6ed656de84b881ede0858Ricky Wai break; 742751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 743751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 744751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 745751de372750336c2dbc6ed656de84b881ede0858Ricky Wai if (!hasChildProfile) { 746751de372750336c2dbc6ed656de84b881ede0858Ricky Wai finish(); 747751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 748751de372750336c2dbc6ed656de84b881ede0858Ricky Wai } 749751de372750336c2dbc6ed656de84b881ede0858Ricky Wai 7509218687e4baaf0226ef16b58f78123d979711e5dJim Miller @Override 7519218687e4baaf0226ef16b58f78123d979711e5dJim Miller public void onDestroy() { 7529218687e4baaf0226ef16b58f78123d979711e5dJim Miller super.onDestroy(); 7539218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 7549218687e4baaf0226ef16b58f78123d979711e5dJim Miller 755b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani @Override 756b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani protected int getHelpResource() { 757b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani return R.string.help_url_choose_lockscreen; 758b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani } 759b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 76034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri private int getResIdForFactoryResetProtectionWarningTitle() { 761788671647c6d615684d159a94ffb5b4367df6896Robin Lee boolean isProfile = UserManager.get(getActivity()).isManagedProfile(mUserId); 76234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return isProfile ? R.string.unlock_disable_frp_warning_title_profile 76334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri : R.string.unlock_disable_frp_warning_title; 76434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 76534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri 76638c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private int getResIdForFactoryResetProtectionWarningMessage() { 7678d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey final boolean hasFingerprints; 7688d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) { 7698d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey hasFingerprints = mFingerprintManager.hasEnrolledFingerprints(mUserId); 7708d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey } else { 7718d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey hasFingerprints = false; 7728d8bb6ee1dd070f612133da4573df02d9ef267aaJeff Sharkey } 773788671647c6d615684d159a94ffb5b4367df6896Robin Lee boolean isProfile = UserManager.get(getActivity()).isManagedProfile(mUserId); 774fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) { 7753bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 77634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 77734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 77834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_pattern_fingerprint_profile; 77934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 78034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern_fingerprint; 78134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 78234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern_profile; 78334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 78434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pattern; 78534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 7863bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 7873bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 78834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 78934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_fingerprint_profile; 79034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 79134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_fingerprint; 79234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 79334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin_profile; 79434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 79534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_pin; 79634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 7973bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 7983bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 7993bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 800e7d6e4ddb2371dc49015e17e2d6b9dc604fbbf58Toni Barzic case DevicePolicyManager.PASSWORD_QUALITY_MANAGED: 80134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 80234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 80334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_password_fingerprint_profile; 80434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 80534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password_fingerprint; 80634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 80734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password_profile; 80834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 80934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_password; 81034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 8113bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang default: 81234ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri if (hasFingerprints && isProfile) { 81334ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string 81434ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .unlock_disable_frp_warning_content_unknown_fingerprint_profile; 81534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (hasFingerprints && !isProfile) { 81634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown_fingerprint; 81734ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else if (isProfile) { 81834ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown_profile; 81934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } else { 82034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri return R.string.unlock_disable_frp_warning_content_unknown; 82134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri } 8223bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8233bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8243bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8253bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean isUnlockMethodSecure(String unlockMethod) { 826edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam return !(ScreenLockType.SWIPE.preferenceKey.equals(unlockMethod) || 827edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam ScreenLockType.NONE.preferenceKey.equals(unlockMethod)); 8283bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8293bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8303bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean setUnlockMethod(String unlockMethod) { 8313bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang EventLog.writeEvent(EventLogTags.LOCK_SCREEN_TYPE, unlockMethod); 8323bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 833edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam ScreenLockType lock = ScreenLockType.fromKey(unlockMethod); 834edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam if (lock != null) { 835edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam switch (lock) { 836edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam case NONE: 837edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam case SWIPE: 838edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam updateUnlockMethodAndFinish( 839edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam lock.defaultQuality, 840edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam lock == ScreenLockType.NONE, 841edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam false /* chooseLockSkipped */); 842edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam return true; 843edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam case PATTERN: 844edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam case PIN: 845edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam case PASSWORD: 846edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam case MANAGED: 847edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam maybeEnableEncryption(lock.defaultQuality, false); 848edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam return true; 849edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam } 8503bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 851edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam Log.e(TAG, "Encountered unknown unlock method to set: " + unlockMethod); 852edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam return false; 8533bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8543bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8553bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private void showFactoryResetProtectionWarningDialog(String unlockMethodToSet) { 85634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri int title = getResIdForFactoryResetProtectionWarningTitle(); 85738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos int message = getResIdForFactoryResetProtectionWarningMessage(); 8583bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog dialog = 85934ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri FactoryResetProtectionWarningDialog.newInstance( 86034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri title, message, unlockMethodToSet); 8613bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang dialog.show(getChildFragmentManager(), TAG_FRP_WARNING_DIALOG); 8623bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8633bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 864ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang public static class FactoryResetProtectionWarningDialog extends InstrumentedDialogFragment { 8653bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 86634ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri private static final String ARG_TITLE_RES = "titleRes"; 86738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private static final String ARG_MESSAGE_RES = "messageRes"; 8683bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private static final String ARG_UNLOCK_METHOD_TO_SET = "unlockMethodToSet"; 8693bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 87034ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri public static FactoryResetProtectionWarningDialog newInstance( 87134ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri int titleRes, int messageRes, String unlockMethodToSet) { 8723bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog frag = 8733bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new FactoryResetProtectionWarningDialog(); 8743bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang Bundle args = new Bundle(); 87534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri args.putInt(ARG_TITLE_RES, titleRes); 87638c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos args.putInt(ARG_MESSAGE_RES, messageRes); 8773bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang args.putString(ARG_UNLOCK_METHOD_TO_SET, unlockMethodToSet); 8783bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang frag.setArguments(args); 8793bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return frag; 8803bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8813bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8823bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 8833bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void show(FragmentManager manager, String tag) { 8843bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang if (manager.findFragmentByTag(tag) == null) { 8853bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Prevent opening multiple dialogs if tapped on button quickly 8863bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang super.show(manager, tag); 8873bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8883bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 8893bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8903bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 8913bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public Dialog onCreateDialog(Bundle savedInstanceState) { 8923bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang final Bundle args = getArguments(); 8933bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 8943bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return new AlertDialog.Builder(getActivity()) 89534ec5f97feaf8d73d533f104cfc2c2e68e995ae3Clara Bayarri .setTitle(args.getInt(ARG_TITLE_RES)) 89638c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setMessage(args.getInt(ARG_MESSAGE_RES)) 89738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setPositiveButton(R.string.unlock_disable_frp_warning_ok, 898edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam (dialog, whichButton) -> { 899edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam String unlockMethod = args.getString(ARG_UNLOCK_METHOD_TO_SET); 900edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam ((ChooseLockGenericFragment) getParentFragment()) 901edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam .setUnlockMethod(unlockMethod); 902edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam }) 903edb39449842dd1360fa5f92c990785bf7c8dcdcdMaurice Lam .setNegativeButton(R.string.cancel, (dialog, whichButton) -> dismiss()) 9043bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .create(); 9053bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 906ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang 907ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang @Override 908ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang public int getMetricsCategory() { 909ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang return MetricsEvent.DIALOG_FRP; 910ac5e5932233eb4b485bd76087987182009be2c2fFan Zhang } 9113bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 912abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 913abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn} 914