ChooseLockGeneric.java revision 9c32468cd59cbe5b8e7692235a67034c936b4788
1abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn/* 2abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * Copyright (C) 2010 The Android Open Source Project 3abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * 4abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * you may not use this file except in compliance with the License. 6abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * You may obtain a copy of the License at 7abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * 8abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * 10abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * See the License for the specific language governing permissions and 14abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn * limitations under the License. 15abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn */ 16abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 17abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornpackage com.android.settings; 18abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 19524484426855f814ff1f3189fd5221dd630dbf8cSvetoslavimport android.accessibilityservice.AccessibilityServiceInfo; 2017e9e1933055b207473b488595b2887bfcaea32eJim Millerimport android.app.Activity; 213bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.AlertDialog; 223bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.Dialog; 233bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.DialogFragment; 2452c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lamimport android.app.Fragment; 253bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.app.FragmentManager; 264037c7f27c849a1ada0980ad881636fc940a0b85Dianne Hackbornimport android.app.admin.DevicePolicyManager; 27abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Context; 283bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.content.DialogInterface; 29abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Intent; 3039b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.Fingerprint; 3139b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager; 3239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.hardware.fingerprint.FingerprintManager.RemovalCallback; 33abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.os.Bundle; 3446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.os.Process; 355437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roosimport android.os.UserHandle; 36f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chenimport android.os.UserManager; 37d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstromimport android.security.KeyStore; 3839b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 3939b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 4027d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich canningsimport android.util.EventLog; 413bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhangimport android.util.Log; 4287fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lamimport android.view.View; 43524484426855f814ff1f3189fd5221dd630dbf8cSvetoslavimport android.view.accessibility.AccessibilityManager; 44d16c9b7c3100b7ba653dcd58db036500dd220896Jim Millerimport android.widget.Toast; 45d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller 468a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger; 476465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunneimport com.android.internal.widget.LockPatternUtils; 489c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils; 499c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedPreference; 509c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka 519c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 526465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunne 53263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Megliopublic class ChooseLockGeneric extends SettingsActivity { 540698a216311acd9ab52224602d1a75c08bf89f04Jim Miller public static final String CONFIRM_CREDENTIALS = "confirm_credentials"; 55abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 56abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn @Override 5717e9e1933055b207473b488595b2887bfcaea32eJim Miller public Intent getIntent() { 5817e9e1933055b207473b488595b2887bfcaea32eJim Miller Intent modIntent = new Intent(super.getIntent()); 5952c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam modIntent.putExtra(EXTRA_SHOW_FRAGMENT, getFragmentClass().getName()); 6017e9e1933055b207473b488595b2887bfcaea32eJim Miller return modIntent; 61a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani } 62a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani 63a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani @Override 64a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani protected boolean isValidFragment(String fragmentName) { 65a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani if (ChooseLockGenericFragment.class.getName().equals(fragmentName)) return true; 66a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani return false; 6717e9e1933055b207473b488595b2887bfcaea32eJim Miller } 68bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 6952c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam /* package */ Class<? extends Fragment> getFragmentClass() { 7052c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam return ChooseLockGenericFragment.class; 7152c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam } 7252c75baa122e9a8a1c27f54c3884253d2360e257Maurice Lam 7366026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani public static class InternalActivity extends ChooseLockGeneric { 7466026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 7566026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani 7617e9e1933055b207473b488595b2887bfcaea32eJim Miller public static class ChooseLockGenericFragment extends SettingsPreferenceFragment { 773fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final String TAG = "ChooseLockGenericFragment"; 7817e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final int MIN_PASSWORD_LENGTH = 4; 7917e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_OFF = "unlock_set_off"; 8017e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_NONE = "unlock_set_none"; 8117e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PIN = "unlock_set_pin"; 8217e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PASSWORD = "unlock_set_password"; 8317e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PATTERN = "unlock_set_pattern"; 8417e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String PASSWORD_CONFIRMED = "password_confirmed"; 8547f1cd4325e839dd33273a451fa052e83789e483Jim Miller private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation"; 86d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom public static final String MINIMUM_QUALITY_KEY = "minimum_quality"; 873fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller public static final String HIDE_DISABLED_PREFS = "hide_disabled_prefs"; 8846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_QUALITY = "encrypt_requested_quality"; 8946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_DISABLED = "encrypt_requested_disabled"; 903bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public static final String TAG_FRP_WARNING_DIALOG = "frp_warning_dialog"; 9117e9e1933055b207473b488595b2887bfcaea32eJim Miller 923fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CONFIRM_EXISTING_REQUEST = 100; 933fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int ENABLE_ENCRYPTION_REQUEST = 101; 943fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller private static final int CHOOSE_LOCK_REQUEST = 102; 9580412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett 9617e9e1933055b207473b488595b2887bfcaea32eJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 9717e9e1933055b207473b488595b2887bfcaea32eJim Miller private DevicePolicyManager mDPM; 98d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private KeyStore mKeyStore; 996609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private boolean mHasChallenge = false; 1006609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales private long mChallenge; 10117e9e1933055b207473b488595b2887bfcaea32eJim Miller private boolean mPasswordConfirmed = false; 10247f1cd4325e839dd33273a451fa052e83789e483Jim Miller private boolean mWaitingForConfirmation = false; 10346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private int mEncryptionRequestQuality; 10446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private boolean mEncryptionRequestDisabled; 1050698a216311acd9ab52224602d1a75c08bf89f04Jim Miller private boolean mRequirePassword; 106c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam private boolean mForFingerprint = false; 107a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales private String mUserPassword; 1080698a216311acd9ab52224602d1a75c08bf89f04Jim Miller private LockPatternUtils mLockPatternUtils; 1099218687e4baaf0226ef16b58f78123d979711e5dJim Miller private FingerprintManager mFingerprintManager; 110fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri private int mUserId; 111d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller private RemovalCallback mRemovalCallback = new RemovalCallback() { 112d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller 113d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller @Override 114d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller public void onRemovalSucceeded(Fingerprint fingerprint) { 115d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller Log.v(TAG, "Fingerprint removed: " + fingerprint.getFingerId()); 116f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi if (mFingerprintManager.getEnrolledFingerprints().size() == 0) { 117f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi finish(); 118f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi } 119d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller } 120d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller 121d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller @Override 122d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller public void onRemovalError(Fingerprint fp, int errMsgId, CharSequence errString) { 123f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi Activity activity = getActivity(); 124f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi if (activity != null) { 125f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi Toast.makeText(getActivity(), errString, Toast.LENGTH_SHORT); 126f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi } 127f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi finish(); 128d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller } 129d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller }; 13017e9e1933055b207473b488595b2887bfcaea32eJim Miller 13117e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 1328a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 1338a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren return MetricsLogger.CHOOSE_LOCK_GENERIC; 1348a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 1358a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 1368a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 13717e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onCreate(Bundle savedInstanceState) { 13817e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onCreate(savedInstanceState); 13917e9e1933055b207473b488595b2887bfcaea32eJim Miller 1409218687e4baaf0226ef16b58f78123d979711e5dJim Miller mFingerprintManager = 1419218687e4baaf0226ef16b58f78123d979711e5dJim Miller (FingerprintManager) getActivity().getSystemService(Context.FINGERPRINT_SERVICE); 14217e9e1933055b207473b488595b2887bfcaea32eJim Miller mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 143d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom mKeyStore = KeyStore.getInstance(); 14417e9e1933055b207473b488595b2887bfcaea32eJim Miller mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this.getActivity()); 1450698a216311acd9ab52224602d1a75c08bf89f04Jim Miller mLockPatternUtils = new LockPatternUtils(getActivity()); 14617e9e1933055b207473b488595b2887bfcaea32eJim Miller 147c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett // Defaults to needing to confirm credentials 148c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett final boolean confirmCredentials = getActivity().getIntent() 149c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett .getBooleanExtra(CONFIRM_CREDENTIALS, true); 15066026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani if (getActivity() instanceof ChooseLockGeneric.InternalActivity) { 15166026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani mPasswordConfirmed = !confirmCredentials; 15266026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 153c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett 1546609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mHasChallenge = getActivity().getIntent().getBooleanExtra( 1556609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false); 1566609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales mChallenge = getActivity().getIntent().getLongExtra( 1576609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0); 158c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint = getActivity().getIntent().getBooleanExtra( 159c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false); 1606609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 16117e9e1933055b207473b488595b2887bfcaea32eJim Miller if (savedInstanceState != null) { 16217e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); 16347f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION); 16446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = savedInstanceState.getInt(ENCRYPT_REQUESTED_QUALITY); 16546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = savedInstanceState.getBoolean( 16646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller ENCRYPT_REQUESTED_DISABLED); 16717e9e1933055b207473b488595b2887bfcaea32eJim Miller } 168bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 169fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri // Only take this argument into account if it belongs to the current profile. 170fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri mUserId = Utils.getSameOwnerUserId(getContext(), getArguments()); 171fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri 17247f1cd4325e839dd33273a451fa052e83789e483Jim Miller if (mPasswordConfirmed) { 17347f1cd4325e839dd33273a451fa052e83789e483Jim Miller updatePreferencesOrFinish(); 17447f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else if (!mWaitingForConfirmation) { 1756370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler ChooseLockSettingsHelper helper = 1766370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler new ChooseLockSettingsHelper(this.getActivity(), this); 1778a09b619aeb233e2aab1919301f162d8acf1f0f0Jorim Jaggi if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, 178fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri getString(R.string.unlock_set_unlock_launch_picker_title), true, mUserId)) { 17917e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; // no password set, so no need to confirm 18017e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 18147f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else { 18247f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = true; 18317e9e1933055b207473b488595b2887bfcaea32eJim Miller } 184bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 185bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 186bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 187c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani @Override 18887fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam public void onViewCreated(View view, Bundle savedInstanceState) { 18987fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam super.onViewCreated(view, savedInstanceState); 19087fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam if (mForFingerprint) { 19139b467482d1bf256a111c757e9b7621c6f523271Jason Monk setHeaderView(R.layout.choose_lock_generic_fingerprint_header); 19287fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 19387fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam } 19487fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam 19587fadbe6d96e482fa8fc94f502afa10a522285a4Maurice Lam @Override 19639b467482d1bf256a111c757e9b7621c6f523271Jason Monk public boolean onPreferenceTreeClick(Preference preference) { 19717e9e1933055b207473b488595b2887bfcaea32eJim Miller final String key = preference.getKey(); 19827d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich cannings 199fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(mUserId)) { 2003bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Show the disabling FRP warning only when the user is switching from a secure 2013bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // unlock method to an insecure one 2023bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang showFactoryResetProtectionWarningDialog(key); 2033bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return true; 20417e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 2053bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return setUnlockMethod(key); 20617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 207bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 208bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 20946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller /** 21046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * If the device has encryption already enabled, then ask the user if they 21146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * also want to encrypt the phone with this password. 21246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * 21346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param quality 21446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param disabled 21546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller */ 216a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // TODO: why does this take disabled, its always called with a quality higher than 217a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales // what makes sense with disabled == true 21846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private void maybeEnableEncryption(int quality, boolean disabled) { 219146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); 220f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen if (UserManager.get(getActivity()).isAdminUser() 22193bcfcb14d42ea0884b922ae1a4d84a6955ed835Clara Bayarri && mUserId == UserHandle.myUserId() 222f9ee84dba4299962742befdd4d390436d82b3c49Xiaohui Chen && LockPatternUtils.isDeviceEncryptionEnabled() 223146fc11958ae93d4c97ce83839188ece762f3275Andrei Kapishnikov && !dpm.getDoNotAskCredentialsOnBoot()) { 22446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = quality; 22546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = disabled; 226edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // Get the intent that the encryption interstitial should start for creating 227edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini // the new unlock method. 228edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent unlockMethodIntent = getIntentForUnlockMethod(quality, disabled); 229ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final Context context = getActivity(); 2300698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // If accessibility is enabled and the user hasn't seen this dialog before, set the 2310698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // default state to agree with that which is compatible with accessibility 2320698a216311acd9ab52224602d1a75c08bf89f04Jim Miller // (password not required). 233ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam final boolean accEn = AccessibilityManager.getInstance(context).isEnabled(); 2340698a216311acd9ab52224602d1a75c08bf89f04Jim Miller final boolean required = mLockPatternUtils.isCredentialRequiredToDecrypt(!accEn); 235edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = getEncryptionInterstitialIntent(context, quality, required, 236edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 237c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, 238c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam mForFingerprint); 23946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST); 24046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } else { 2410698a216311acd9ab52224602d1a75c08bf89f04Jim Miller mRequirePassword = false; // device encryption not enabled or not device owner. 24246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller updateUnlockMethodAndFinish(quality, disabled); 24346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 24446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 24546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller 24617e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 24717e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onActivityResult(int requestCode, int resultCode, Intent data) { 24817e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onActivityResult(requestCode, resultCode, data); 24947f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = false; 25017e9e1933055b207473b488595b2887bfcaea32eJim Miller if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) { 25117e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; 252a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales mUserPassword = data.getStringExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD); 25317e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 254e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } else if (requestCode == CHOOSE_LOCK_REQUEST 255e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam || requestCode == ENABLE_ENCRYPTION_REQUEST) { 256e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam if (resultCode != RESULT_CANCELED) { 257e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam getActivity().setResult(resultCode, data); 258e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam finish(); 259e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam } 26017e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 26117e9e1933055b207473b488595b2887bfcaea32eJim Miller getActivity().setResult(Activity.RESULT_CANCELED); 26217e9e1933055b207473b488595b2887bfcaea32eJim Miller finish(); 26317e9e1933055b207473b488595b2887bfcaea32eJim Miller } 264bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 265bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 26617e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 26717e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onSaveInstanceState(Bundle outState) { 26817e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onSaveInstanceState(outState); 26917e9e1933055b207473b488595b2887bfcaea32eJim Miller // Saved so we don't force user to re-enter their password if configuration changes 27017e9e1933055b207473b488595b2887bfcaea32eJim Miller outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); 27147f1cd4325e839dd33273a451fa052e83789e483Jim Miller outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation); 27246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putInt(ENCRYPT_REQUESTED_QUALITY, mEncryptionRequestQuality); 27346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putBoolean(ENCRYPT_REQUESTED_DISABLED, mEncryptionRequestDisabled); 27417e9e1933055b207473b488595b2887bfcaea32eJim Miller } 275bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 27617e9e1933055b207473b488595b2887bfcaea32eJim Miller private void updatePreferencesOrFinish() { 2775541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller Intent intent = getActivity().getIntent(); 2785541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller int quality = intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); 27917e9e1933055b207473b488595b2887bfcaea32eJim Miller if (quality == -1) { 2806370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // If caller didn't specify password quality, show UI and allow the user to choose. 2815541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller quality = intent.getIntExtra(MINIMUM_QUALITY_KEY, -1); 282f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos quality = upgradeQuality(quality); 2833fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller final boolean hideDisabledPrefs = intent.getBooleanExtra( 2843fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller HIDE_DISABLED_PREFS, false); 28517e9e1933055b207473b488595b2887bfcaea32eJim Miller final PreferenceScreen prefScreen = getPreferenceScreen(); 28617e9e1933055b207473b488595b2887bfcaea32eJim Miller if (prefScreen != null) { 28717e9e1933055b207473b488595b2887bfcaea32eJim Miller prefScreen.removeAll(); 28817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 28917e9e1933055b207473b488595b2887bfcaea32eJim Miller addPreferencesFromResource(R.xml.security_settings_picker); 2903fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferences(quality, hideDisabledPrefs); 2919a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk updateCurrentPreference(); 292524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav updatePreferenceSummaryIfNeeded(); 29317e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 29417e9e1933055b207473b488595b2887bfcaea32eJim Miller updateUnlockMethodAndFinish(quality, false); 295bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 296abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 297bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 2989a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private void updateCurrentPreference() { 2999a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk String currentKey = getKeyForCurrent(); 3009a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk Preference preference = findPreference(currentKey); 3019a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk if (preference != null) { 3029a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk preference.setSummary(R.string.current_screen_lock); 3039a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 3049a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 3059a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk 3069a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk private String getKeyForCurrent() { 307fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri if (mLockPatternUtils.isLockScreenDisabled(mUserId)) { 3089a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_OFF; 3099a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 310fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) { 3119a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 3129a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PATTERN; 3139a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 3149a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 3159a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PIN; 3169a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 3179a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 3189a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_PASSWORD; 3199a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED: 3209a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return KEY_UNLOCK_SET_NONE; 3219a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 3229a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk return null; 3239a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk } 3249a64a4215e9a8ac6d3af72479aa162d0701deb48Jason Monk 325f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos /** increases the quality if necessary */ 326f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos private int upgradeQuality(int quality) { 327d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = upgradeQualityForDPM(quality); 328b05f39d186d8ce1b53bb4da3cb4c2cd22986f513Paul Lawrence return quality; 329d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 330d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 331d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private int upgradeQualityForDPM(int quality) { 332d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom // Compare min allowed password quality 333d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom int minQuality = mDPM.getPasswordQuality(null); 334d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom if (quality < minQuality) { 335d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = minQuality; 336d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 337d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom return quality; 338d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 339d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 34017e9e1933055b207473b488595b2887bfcaea32eJim Miller /*** 341df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * Disables preferences that are less secure than required quality. The actual 342df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * implementation is in disableUnusablePreferenceImpl. 343df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * 344df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param quality the requested quality. 3453fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * @param hideDisabledPrefs if false preferences show why they were disabled; otherwise 3463fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller * they're not shown at all. 347df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang */ 3483fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller protected void disableUnusablePreferences(final int quality, boolean hideDisabledPrefs) { 3493fb2fb8ac3717b32577c9d65b2e84f1839f4b349Jim Miller disableUnusablePreferencesImpl(quality, hideDisabledPrefs); 350df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 351df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang 352df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang /*** 35317e9e1933055b207473b488595b2887bfcaea32eJim Miller * Disables preferences that are less secure than required quality. 35417e9e1933055b207473b488595b2887bfcaea32eJim Miller * 35517e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param quality the requested quality. 356df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang * @param hideDisabled whether to hide disable screen lock options. 35717e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 358df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang protected void disableUnusablePreferencesImpl(final int quality, 359f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos boolean hideDisabled) { 360cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani final PreferenceScreen entries = getPreferenceScreen(); 361783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller 3629c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka int adminEnforcedQuality = mDPM.getPasswordQuality(null); 3639c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka EnforcedAdmin enforcedAdmin = RestrictedLockUtils.checkIfPasswordQualityIsSet( 3649c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka getActivity()); 365cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani for (int i = entries.getPreferenceCount() - 1; i >= 0; --i) { 366cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani Preference pref = entries.getPreference(i); 3679c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka if (pref instanceof RestrictedPreference) { 368591dc85017ea19e56c416ae6d1a55b82e29743f4Adrian Roos final String key = pref.getKey(); 36917e9e1933055b207473b488595b2887bfcaea32eJim Miller boolean enabled = true; 3705541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller boolean visible = true; 3719c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka boolean disabledByAdmin = false; 372cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani if (KEY_UNLOCK_SET_OFF.equals(key)) { 37317e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 37405c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi if (getResources().getBoolean(R.bool.config_hide_none_security_option)) { 37505c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi enabled = false; 37605c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi visible = false; 37705c7dde1f3a6044db7b687dfcbacbde50f3befb1Sungmin Choi } 3789c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 3799c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 38017e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_NONE.equals(key)) { 3816934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri if (mUserId != UserHandle.myUserId()) { 3826934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri // Swipe doesn't make sense for profiles. 3836934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri visible = false; 3846934a044b8ebf4dac28d1c1142b6eee4ecc64f66Clara Bayarri } 38517e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 3869c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 3879c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 38817e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { 38917e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 3909c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 3919c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 39217e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PIN.equals(key)) { 3938fd852e7c2f488650095024aca9c51f8c7ddc3b3Nicolas Prevot enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; 3949c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 3959c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; 39617e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { 39717e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; 3989c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka disabledByAdmin = adminEnforcedQuality 3999c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka > DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; 40017e9e1933055b207473b488595b2887bfcaea32eJim Miller } 401df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang if (hideDisabled) { 402591dc85017ea19e56c416ae6d1a55b82e29743f4Adrian Roos visible = enabled; 403df8566a9a1eb69ee19376457fe0ee8ad39774790Lucky Zhang } 404f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos if (!visible) { 405cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani entries.removePreference(pref); 4069c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else if (disabledByAdmin && enforcedAdmin != null) { 4079c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(enforcedAdmin); 4085541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (!enabled) { 4099c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // we need to setDisabledByAdmin to null first to disable the padlock 4109c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka // in case it was set earlier. 4119c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 41217e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setSummary(R.string.unlock_set_unlock_disabled_summary); 41317e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setEnabled(false); 4149c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka } else { 4159c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka ((RestrictedPreference) pref).setDisabledByAdmin(null); 41617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 417bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 418bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 419bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 420bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 421524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav private void updatePreferenceSummaryIfNeeded() { 42240ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav if (LockPatternUtils.isDeviceEncrypted()) { 42340ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav return; 42440ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav } 42540ca78f6f3d75897a1a5fd3ec999f487430d4b40Svetoslav 426524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav if (AccessibilityManager.getInstance(getActivity()).getEnabledAccessibilityServiceList( 427524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav AccessibilityServiceInfo.FEEDBACK_ALL_MASK).isEmpty()) { 428524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav return; 429524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 430524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 431524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav CharSequence summary = getString(R.string.secure_lock_encryption_warning); 432524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 433524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav PreferenceScreen screen = getPreferenceScreen(); 434524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav final int preferenceCount = screen.getPreferenceCount(); 435524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav for (int i = 0; i < preferenceCount; i++) { 436524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav Preference preference = screen.getPreference(i); 437524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav switch (preference.getKey()) { 438524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PATTERN: 439524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PIN: 440524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PASSWORD: { 441524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav preference.setSummary(summary); 442524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } break; 443524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 444524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 445524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 446524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 4476b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam protected Intent getLockPasswordIntent(Context context, int quality, 448f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos int minLength, final int maxLength, 449fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri boolean requirePasswordToDecrypt, boolean confirmCredentials, int userId) { 450f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos return ChooseLockPassword.createIntent(context, quality, minLength, 451fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, requirePasswordToDecrypt, confirmCredentials, userId); 4526b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 4536b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 4546609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales protected Intent getLockPasswordIntent(Context context, int quality, 4556609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales int minLength, final int maxLength, 456fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri boolean requirePasswordToDecrypt, long challenge, int userId) { 4576609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales return ChooseLockPassword.createIntent(context, quality, minLength, 458fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, requirePasswordToDecrypt, challenge, userId); 4596609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 4606609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 4613859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam protected Intent getLockPasswordIntent(Context context, int quality, int minLength, 462fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri int maxLength, boolean requirePasswordToDecrypt, String password, int userId) { 463a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales return ChooseLockPassword.createIntent(context, quality, minLength, maxLength, 464fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri requirePasswordToDecrypt, password, userId); 465a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales } 466a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales 467f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 468fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri final boolean confirmCredentials, int userId) { 469f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos return ChooseLockPattern.createIntent(context, requirePassword, 470fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri confirmCredentials, userId); 4716b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 4726b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 4736609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 474fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri long challenge, int userId) { 475fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri return ChooseLockPattern.createIntent(context, requirePassword, challenge, userId); 4766609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 4776609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales 4783859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam protected Intent getLockPatternIntent(Context context, final boolean requirePassword, 479fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri final String pattern, int userId) { 480fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri return ChooseLockPattern.createIntent(context, requirePassword, pattern, userId); 481a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales } 482a0e1236fa970ea953bfbcc84fcae1f3fb7f189d1Andres Morales 483ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam protected Intent getEncryptionInterstitialIntent(Context context, int quality, 484edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini boolean required, Intent unlockMethodIntent) { 485edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return EncryptionInterstitial.createStartIntent(context, quality, required, 486edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini unlockMethodIntent); 487ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam } 488ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam 4895541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller /** 49017e9e1933055b207473b488595b2887bfcaea32eJim Miller * Invokes an activity to change the user's pattern, password or PIN based on given quality 49117e9e1933055b207473b488595b2887bfcaea32eJim Miller * and minimum quality specified by DevicePolicyManager. If quality is 49217e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED}, password is cleared. 49317e9e1933055b207473b488595b2887bfcaea32eJim Miller * 4946370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler * @param quality the desired quality. Ignored if DevicePolicyManager requires more security 49517e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param disabled whether or not to show LockScreen at all. Only meaningful when quality is 49617e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED} 49717e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 49817e9e1933055b207473b488595b2887bfcaea32eJim Miller void updateUnlockMethodAndFinish(int quality, boolean disabled) { 4996370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // Sanity check. We should never get here without confirming user's existing password. 50017e9e1933055b207473b488595b2887bfcaea32eJim Miller if (!mPasswordConfirmed) { 5016370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler throw new IllegalStateException("Tried to update password without confirming it"); 50217e9e1933055b207473b488595b2887bfcaea32eJim Miller } 503bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 504f788718f2142e5546bbf1b6847793d59ffea898bAdrian Roos quality = upgradeQuality(quality); 505edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = getIntentForUnlockMethod(quality, disabled); 506edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (intent != null) { 507edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini startActivityForResult(intent, CHOOSE_LOCK_REQUEST); 508edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return; 509edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 510edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini 511edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { 512edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChooseLockSettingsHelper.utils().clearLock(mUserId); 513edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId); 514b8a22e42d42e6de8fce1a2026c112c12fd0f0f7aClara Bayarri mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, false); 515edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini removeAllFingerprintTemplatesAndFinish(); 516edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini getActivity().setResult(Activity.RESULT_OK); 517edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } else { 518edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini removeAllFingerprintTemplatesAndFinish(); 519edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 520edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini } 521c620ba41ce20e683aad3d124b3866cadaddcc87dSteven Ross 522edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini private Intent getIntentForUnlockMethod(int quality, boolean disabled) { 523edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini Intent intent = null; 5246b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam final Context context = getActivity(); 52517e9e1933055b207473b488595b2887bfcaea32eJim Miller if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { 52617e9e1933055b207473b488595b2887bfcaea32eJim Miller int minLength = mDPM.getPasswordMinimumLength(null); 52717e9e1933055b207473b488595b2887bfcaea32eJim Miller if (minLength < MIN_PASSWORD_LENGTH) { 52817e9e1933055b207473b488595b2887bfcaea32eJim Miller minLength = MIN_PASSWORD_LENGTH; 52917e9e1933055b207473b488595b2887bfcaea32eJim Miller } 53017e9e1933055b207473b488595b2887bfcaea32eJim Miller final int maxLength = mDPM.getPasswordMaximumLength(quality); 5316609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales if (mHasChallenge) { 5326609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPasswordIntent(context, quality, minLength, 533fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri maxLength, mRequirePassword, mChallenge, mUserId); 5346609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } else { 5356609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPasswordIntent(context, quality, minLength, 536edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini maxLength, mRequirePassword, mUserPassword, mUserId); 5376609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 53817e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { 5396609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales if (mHasChallenge) { 5406609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPatternIntent(context, mRequirePassword, 541edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mChallenge, mUserId); 5426609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } else { 5436609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales intent = getLockPatternIntent(context, mRequirePassword, 544edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini mUserPassword, mUserId); 5456609b0c22ae89a24d1b07dc3c4143452616d4450Andres Morales } 54617e9e1933055b207473b488595b2887bfcaea32eJim Miller } 547edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini return intent; 548abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 549b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 550f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi private void removeAllFingerprintTemplatesAndFinish() { 551c2f6813a836014a5b38bcfaa24fe9e91671f4646Jim Miller if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected() 552c2f6813a836014a5b38bcfaa24fe9e91671f4646Jim Miller && mFingerprintManager.getEnrolledFingerprints().size() > 0) { 553d16c9b7c3100b7ba653dcd58db036500dd220896Jim Miller mFingerprintManager.remove(new Fingerprint(null, 0, 0, 0), mRemovalCallback); 554f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi } else { 555f92fbc1c49ec09762a2ed81297002865638f37aeJorim Jaggi finish(); 5569218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 5579218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 5589218687e4baaf0226ef16b58f78123d979711e5dJim Miller 5599218687e4baaf0226ef16b58f78123d979711e5dJim Miller @Override 5609218687e4baaf0226ef16b58f78123d979711e5dJim Miller public void onDestroy() { 5619218687e4baaf0226ef16b58f78123d979711e5dJim Miller super.onDestroy(); 5629218687e4baaf0226ef16b58f78123d979711e5dJim Miller } 5639218687e4baaf0226ef16b58f78123d979711e5dJim Miller 564b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani @Override 565b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani protected int getHelpResource() { 566b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani return R.string.help_url_choose_lockscreen; 567b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani } 568b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 56938c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private int getResIdForFactoryResetProtectionWarningMessage() { 57038c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos boolean hasFingerprints = mFingerprintManager.hasEnrolledFingerprints(); 571fe432e838e5588cd4ac664d7e74f3d70a99d7df1Clara Bayarri switch (mLockPatternUtils.getKeyguardStoredPasswordQuality(mUserId)) { 5723bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 57338c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos return hasFingerprints 57438c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos ? R.string.unlock_disable_frp_warning_content_pattern_fingerprint 57538c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos : R.string.unlock_disable_frp_warning_content_pattern; 5763bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 5773bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: 57838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos return hasFingerprints 57938c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos ? R.string.unlock_disable_frp_warning_content_pin_fingerprint 58038c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos : R.string.unlock_disable_frp_warning_content_pin; 5813bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 5823bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 5833bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 58438c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos return hasFingerprints 58538c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos ? R.string.unlock_disable_frp_warning_content_password_fingerprint 58638c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos : R.string.unlock_disable_frp_warning_content_password; 5873bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang default: 58838c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos return hasFingerprints 58938c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos ? R.string.unlock_disable_frp_warning_content_unknown_fingerprint 59038c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos : R.string.unlock_disable_frp_warning_content_unknown; 5913bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 5923bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 5933bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 5943bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean isUnlockMethodSecure(String unlockMethod) { 5953bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return !(KEY_UNLOCK_SET_OFF.equals(unlockMethod) || 5963bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang KEY_UNLOCK_SET_NONE.equals(unlockMethod)); 5973bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 5983bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 5993bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private boolean setUnlockMethod(String unlockMethod) { 6003bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang EventLog.writeEvent(EventLogTags.LOCK_SCREEN_TYPE, unlockMethod); 6013bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 6023bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang if (KEY_UNLOCK_SET_OFF.equals(unlockMethod)) { 6033bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang updateUnlockMethodAndFinish( 6043bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true /* disabled */ ); 6053bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_NONE.equals(unlockMethod)) { 6063bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang updateUnlockMethodAndFinish( 6073bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, false /* disabled */ ); 6083bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PATTERN.equals(unlockMethod)) { 6093bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 6103bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false); 6113bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PIN.equals(unlockMethod)) { 6123bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 6133bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, false); 6143bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else if (KEY_UNLOCK_SET_PASSWORD.equals(unlockMethod)) { 6153bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang maybeEnableEncryption( 6163bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, false); 6173bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } else { 6183bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang Log.e(TAG, "Encountered unknown unlock method to set: " + unlockMethod); 6193bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return false; 6203bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6213bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return true; 6223bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6233bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 6243bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private void showFactoryResetProtectionWarningDialog(String unlockMethodToSet) { 62538c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos int message = getResIdForFactoryResetProtectionWarningMessage(); 6263bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog dialog = 62738c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos FactoryResetProtectionWarningDialog.newInstance(message, unlockMethodToSet); 6283bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang dialog.show(getChildFragmentManager(), TAG_FRP_WARNING_DIALOG); 6293bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6303bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 6313bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public static class FactoryResetProtectionWarningDialog extends DialogFragment { 6323bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 63338c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos private static final String ARG_MESSAGE_RES = "messageRes"; 6343bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang private static final String ARG_UNLOCK_METHOD_TO_SET = "unlockMethodToSet"; 6353bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 63638c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos public static FactoryResetProtectionWarningDialog newInstance(int messageRes, 6373bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang String unlockMethodToSet) { 6383bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang FactoryResetProtectionWarningDialog frag = 6393bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new FactoryResetProtectionWarningDialog(); 6403bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang Bundle args = new Bundle(); 64138c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos args.putInt(ARG_MESSAGE_RES, messageRes); 6423bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang args.putString(ARG_UNLOCK_METHOD_TO_SET, unlockMethodToSet); 6433bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang frag.setArguments(args); 6443bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return frag; 6453bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6463bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 6473bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 6483bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void show(FragmentManager manager, String tag) { 6493bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang if (manager.findFragmentByTag(tag) == null) { 6503bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang // Prevent opening multiple dialogs if tapped on button quickly 6513bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang super.show(manager, tag); 6523bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6533bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6543bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 6553bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 6563bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public Dialog onCreateDialog(Bundle savedInstanceState) { 6573bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang final Bundle args = getArguments(); 6583bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang 6593bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang return new AlertDialog.Builder(getActivity()) 66038c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setTitle(R.string.unlock_disable_frp_warning_title) 66138c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setMessage(args.getInt(ARG_MESSAGE_RES)) 66238c9b9eb5ee2734c4f6f78854951e79bd9e9d3cfAdrian Roos .setPositiveButton(R.string.unlock_disable_frp_warning_ok, 6633bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new DialogInterface.OnClickListener() { 6643bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 6653bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void onClick(DialogInterface dialog, int whichButton) { 6663bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ((ChooseLockGenericFragment) getParentFragment()) 6673bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .setUnlockMethod( 6683bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang args.getString(ARG_UNLOCK_METHOD_TO_SET)); 6693bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6703bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6713bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ) 6723bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .setNegativeButton(R.string.cancel, 6733bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang new DialogInterface.OnClickListener() { 6743bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang @Override 6753bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang public void onClick(DialogInterface dialog, int whichButton) { 6763bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang dismiss(); 6773bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6783bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6793bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang ) 6803bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang .create(); 6813bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 6823bcea0289b90dd543a2e7f4ea35a5b6ccdb95e14Lucky Zhang } 683abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 684abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn} 685