ChooseLockGeneric.java revision 46c7f6d6f32efec26bc9343f591ad1ddbe8f3b4a
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; 2146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.app.ActivityManagerNative; 225541a86efe5f26956e54de49c4a59bf1dab79a78Jim Millerimport android.app.PendingIntent; 234037c7f27c849a1ada0980ad881636fc940a0b85Dianne Hackbornimport android.app.admin.DevicePolicyManager; 24abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Context; 25abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Intent; 26783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Millerimport android.content.pm.UserInfo; 27abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.os.Bundle; 2846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.os.Process; 2946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.os.RemoteException; 3046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.os.UserHandle; 31783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Millerimport android.os.UserManager; 32bbb4afa19f75694c585506b0c091372d60e07ca7Jim Millerimport android.preference.Preference; 33bbb4afa19f75694c585506b0c091372d60e07ca7Jim Millerimport android.preference.PreferenceScreen; 34d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstromimport android.security.KeyStore; 3527d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich canningsimport android.util.EventLog; 36309004706c54ba940651e95618b34f7cf693ad25Elliott Hughesimport android.util.MutableBoolean; 37cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasaniimport android.view.LayoutInflater; 38cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasaniimport android.view.View; 39cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasaniimport android.view.ViewGroup; 40524484426855f814ff1f3189fd5221dd630dbf8cSvetoslavimport android.view.accessibility.AccessibilityManager; 41cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasaniimport android.widget.ListView; 42bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 436465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunneimport com.android.internal.widget.LockPatternUtils; 446465054995f8470e52ecaf68ea9508a28f8a5363Gilles Debunne 45783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Millerimport java.util.List; 46783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller 47263bcc8b732dbb47d3ce63904e0e05191fabbad6Fabrice Di Megliopublic class ChooseLockGeneric extends SettingsActivity { 48abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn 49abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn @Override 5017e9e1933055b207473b488595b2887bfcaea32eJim Miller public Intent getIntent() { 5117e9e1933055b207473b488595b2887bfcaea32eJim Miller Intent modIntent = new Intent(super.getIntent()); 5217e9e1933055b207473b488595b2887bfcaea32eJim Miller modIntent.putExtra(EXTRA_SHOW_FRAGMENT, ChooseLockGenericFragment.class.getName()); 5317e9e1933055b207473b488595b2887bfcaea32eJim Miller return modIntent; 54a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani } 55a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani 56a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani @Override 57a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani protected boolean isValidFragment(String fragmentName) { 58a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani if (ChooseLockGenericFragment.class.getName().equals(fragmentName)) return true; 59a677ee210c67d13d15ba0663887675bda16354d8Amith Yamasani return false; 6017e9e1933055b207473b488595b2887bfcaea32eJim Miller } 61bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 6266026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani public static class InternalActivity extends ChooseLockGeneric { 6366026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 6466026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani 6517e9e1933055b207473b488595b2887bfcaea32eJim Miller public static class ChooseLockGenericFragment extends SettingsPreferenceFragment { 6617e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final int MIN_PASSWORD_LENGTH = 4; 675bae8739ea55702ec38df13550dd3f32137a9935Danielle Millett private static final String KEY_UNLOCK_BACKUP_INFO = "unlock_backup_info"; 6817e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_OFF = "unlock_set_off"; 6917e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_NONE = "unlock_set_none"; 705541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller private static final String KEY_UNLOCK_SET_BIOMETRIC_WEAK = "unlock_set_biometric_weak"; 7117e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PIN = "unlock_set_pin"; 7217e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PASSWORD = "unlock_set_password"; 7317e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String KEY_UNLOCK_SET_PATTERN = "unlock_set_pattern"; 7417e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final int CONFIRM_EXISTING_REQUEST = 100; 7531dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross private static final int FALLBACK_REQUEST = 101; 7646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private static final int ENABLE_ENCRYPTION_REQUEST = 102; 7717e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String PASSWORD_CONFIRMED = "password_confirmed"; 7817e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String CONFIRM_CREDENTIALS = "confirm_credentials"; 7947f1cd4325e839dd33273a451fa052e83789e483Jim Miller private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation"; 80c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani private static final String FINISH_PENDING = "finish_pending"; 81d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom public static final String MINIMUM_QUALITY_KEY = "minimum_quality"; 8246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_QUALITY = "encrypt_requested_quality"; 8346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller public static final String ENCRYPT_REQUESTED_DISABLED = "encrypt_requested_disabled"; 8417e9e1933055b207473b488595b2887bfcaea32eJim Miller 8580412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett private static final boolean ALWAY_SHOW_TUTORIAL = true; 8680412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett 8717e9e1933055b207473b488595b2887bfcaea32eJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 8817e9e1933055b207473b488595b2887bfcaea32eJim Miller private DevicePolicyManager mDPM; 89d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private KeyStore mKeyStore; 9017e9e1933055b207473b488595b2887bfcaea32eJim Miller private boolean mPasswordConfirmed = false; 9147f1cd4325e839dd33273a451fa052e83789e483Jim Miller private boolean mWaitingForConfirmation = false; 92c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani private boolean mFinishPending = false; 9346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private int mEncryptionRequestQuality; 9446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private boolean mEncryptionRequestDisabled; 9517e9e1933055b207473b488595b2887bfcaea32eJim Miller 9617e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 9717e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onCreate(Bundle savedInstanceState) { 9817e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onCreate(savedInstanceState); 9917e9e1933055b207473b488595b2887bfcaea32eJim Miller 10017e9e1933055b207473b488595b2887bfcaea32eJim Miller mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 101d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom mKeyStore = KeyStore.getInstance(); 10217e9e1933055b207473b488595b2887bfcaea32eJim Miller mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this.getActivity()); 10317e9e1933055b207473b488595b2887bfcaea32eJim Miller 104c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett // Defaults to needing to confirm credentials 105c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett final boolean confirmCredentials = getActivity().getIntent() 106c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett .getBooleanExtra(CONFIRM_CREDENTIALS, true); 10766026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani if (getActivity() instanceof ChooseLockGeneric.InternalActivity) { 10866026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani mPasswordConfirmed = !confirmCredentials; 10966026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani } 110c474a88c2de30ea93ae03221b70e6365bb7f5f34Danielle Millett 11117e9e1933055b207473b488595b2887bfcaea32eJim Miller if (savedInstanceState != null) { 11217e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); 11347f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION); 114c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani mFinishPending = savedInstanceState.getBoolean(FINISH_PENDING); 11546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = savedInstanceState.getInt(ENCRYPT_REQUESTED_QUALITY); 11646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = savedInstanceState.getBoolean( 11746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller ENCRYPT_REQUESTED_DISABLED); 11817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 119bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 12047f1cd4325e839dd33273a451fa052e83789e483Jim Miller if (mPasswordConfirmed) { 12147f1cd4325e839dd33273a451fa052e83789e483Jim Miller updatePreferencesOrFinish(); 12247f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else if (!mWaitingForConfirmation) { 1236370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler ChooseLockSettingsHelper helper = 1246370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler new ChooseLockSettingsHelper(this.getActivity(), this); 12517e9e1933055b207473b488595b2887bfcaea32eJim Miller if (!helper.launchConfirmationActivity(CONFIRM_EXISTING_REQUEST, null, null)) { 12617e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; // no password set, so no need to confirm 12717e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 12847f1cd4325e839dd33273a451fa052e83789e483Jim Miller } else { 12947f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = true; 13017e9e1933055b207473b488595b2887bfcaea32eJim Miller } 131bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 132bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 133bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 134c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani @Override 135c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani public void onResume() { 136c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani super.onResume(); 137c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani if (mFinishPending) { 138c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani mFinishPending = false; 139c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani finish(); 140c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani } 141c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani } 14247f1cd4325e839dd33273a451fa052e83789e483Jim Miller 14317e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 14417e9e1933055b207473b488595b2887bfcaea32eJim Miller public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 14517e9e1933055b207473b488595b2887bfcaea32eJim Miller Preference preference) { 14617e9e1933055b207473b488595b2887bfcaea32eJim Miller final String key = preference.getKey(); 14717e9e1933055b207473b488595b2887bfcaea32eJim Miller boolean handled = true; 14827d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich cannings 14927d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich cannings EventLog.writeEvent(EventLogTags.LOCK_SCREEN_TYPE, key); 15027d6f8d54b977757aa04aee1e1ea4ebd50ae80a3rich cannings 15117e9e1933055b207473b488595b2887bfcaea32eJim Miller if (KEY_UNLOCK_SET_OFF.equals(key)) { 1526370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler updateUnlockMethodAndFinish( 1536370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true); 15417e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_NONE.equals(key)) { 1556370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler updateUnlockMethodAndFinish( 1566370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, false); 1575541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (KEY_UNLOCK_SET_BIOMETRIC_WEAK.equals(key)) { 15846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller maybeEnableEncryption( 1595541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK, false); 1605541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller }else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { 16146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller maybeEnableEncryption( 1626370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false); 16317e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PIN.equals(key)) { 16446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller maybeEnableEncryption( 1656370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler DevicePolicyManager.PASSWORD_QUALITY_NUMERIC, false); 16617e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { 16746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller maybeEnableEncryption( 1686370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC, false); 16917e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 17017e9e1933055b207473b488595b2887bfcaea32eJim Miller handled = false; 17117e9e1933055b207473b488595b2887bfcaea32eJim Miller } 17217e9e1933055b207473b488595b2887bfcaea32eJim Miller return handled; 173bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 174bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 17546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller /** 17646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * If the device has encryption already enabled, then ask the user if they 17746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * also want to encrypt the phone with this password. 17846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * 17946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param quality 18046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * @param disabled 18146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller */ 18246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller private void maybeEnableEncryption(int quality, boolean disabled) { 18346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller if (Process.myUserHandle().isOwner() && LockPatternUtils.isDeviceEncryptionEnabled()) { 18446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestQuality = quality; 18546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller mEncryptionRequestDisabled = disabled; 18646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller Intent intent = EncryptionInterstitial.createStartIntent(getActivity(), quality); 18746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST); 18846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } else { 18946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller updateUnlockMethodAndFinish(quality, disabled); 19046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 19146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } 19246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller 19317e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 194cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani public View onCreateView(LayoutInflater inflater, ViewGroup container, 195cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani Bundle savedInstanceState) { 196cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani View v = super.onCreateView(inflater, container, savedInstanceState); 197cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani final boolean onlyShowFallback = getActivity().getIntent() 198cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani .getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false); 199cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani if (onlyShowFallback) { 200cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani View header = v.inflate(getActivity(), 201cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani R.layout.weak_biometric_fallback_header, null); 202cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani ((ListView) v.findViewById(android.R.id.list)).addHeaderView(header, null, false); 203cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani } 204cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani 205cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani return v; 206cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani } 207cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani 208cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani @Override 20917e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onActivityResult(int requestCode, int resultCode, Intent data) { 21017e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onActivityResult(requestCode, resultCode, data); 21147f1cd4325e839dd33273a451fa052e83789e483Jim Miller mWaitingForConfirmation = false; 21217e9e1933055b207473b488595b2887bfcaea32eJim Miller if (requestCode == CONFIRM_EXISTING_REQUEST && resultCode == Activity.RESULT_OK) { 21317e9e1933055b207473b488595b2887bfcaea32eJim Miller mPasswordConfirmed = true; 21417e9e1933055b207473b488595b2887bfcaea32eJim Miller updatePreferencesOrFinish(); 21546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } else if (requestCode == FALLBACK_REQUEST) { 21631dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross mChooseLockSettingsHelper.utils().deleteTempGallery(); 21731dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross getActivity().setResult(resultCode); 21831dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross finish(); 21946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller } else if (requestCode == ENABLE_ENCRYPTION_REQUEST 22046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller && resultCode == Activity.RESULT_OK) { 22146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller updateUnlockMethodAndFinish(mEncryptionRequestQuality, mEncryptionRequestDisabled); 22217e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 22317e9e1933055b207473b488595b2887bfcaea32eJim Miller getActivity().setResult(Activity.RESULT_CANCELED); 22417e9e1933055b207473b488595b2887bfcaea32eJim Miller finish(); 22517e9e1933055b207473b488595b2887bfcaea32eJim Miller } 226bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 227bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 22817e9e1933055b207473b488595b2887bfcaea32eJim Miller @Override 22917e9e1933055b207473b488595b2887bfcaea32eJim Miller public void onSaveInstanceState(Bundle outState) { 23017e9e1933055b207473b488595b2887bfcaea32eJim Miller super.onSaveInstanceState(outState); 23117e9e1933055b207473b488595b2887bfcaea32eJim Miller // Saved so we don't force user to re-enter their password if configuration changes 23217e9e1933055b207473b488595b2887bfcaea32eJim Miller outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed); 23347f1cd4325e839dd33273a451fa052e83789e483Jim Miller outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation); 234c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani outState.putBoolean(FINISH_PENDING, mFinishPending); 23546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putInt(ENCRYPT_REQUESTED_QUALITY, mEncryptionRequestQuality); 23646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller outState.putBoolean(ENCRYPT_REQUESTED_DISABLED, mEncryptionRequestDisabled); 23717e9e1933055b207473b488595b2887bfcaea32eJim Miller } 238bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 23917e9e1933055b207473b488595b2887bfcaea32eJim Miller private void updatePreferencesOrFinish() { 2405541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller Intent intent = getActivity().getIntent(); 2415541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller int quality = intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, -1); 24217e9e1933055b207473b488595b2887bfcaea32eJim Miller if (quality == -1) { 2436370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // If caller didn't specify password quality, show UI and allow the user to choose. 2445541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller quality = intent.getIntExtra(MINIMUM_QUALITY_KEY, -1); 24594c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross MutableBoolean allowBiometric = new MutableBoolean(false); 24694c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross quality = upgradeQuality(quality, allowBiometric); 24717e9e1933055b207473b488595b2887bfcaea32eJim Miller final PreferenceScreen prefScreen = getPreferenceScreen(); 24817e9e1933055b207473b488595b2887bfcaea32eJim Miller if (prefScreen != null) { 24917e9e1933055b207473b488595b2887bfcaea32eJim Miller prefScreen.removeAll(); 25017e9e1933055b207473b488595b2887bfcaea32eJim Miller } 25117e9e1933055b207473b488595b2887bfcaea32eJim Miller addPreferencesFromResource(R.xml.security_settings_picker); 25294c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross disableUnusablePreferences(quality, allowBiometric); 253524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav updatePreferenceSummaryIfNeeded(); 25417e9e1933055b207473b488595b2887bfcaea32eJim Miller } else { 25517e9e1933055b207473b488595b2887bfcaea32eJim Miller updateUnlockMethodAndFinish(quality, false); 256bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 257abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 258bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 25994c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross /** increases the quality if necessary, and returns whether biometric is allowed */ 26094c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross private int upgradeQuality(int quality, MutableBoolean allowBiometric) { 261d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = upgradeQualityForDPM(quality); 262d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = upgradeQualityForKeyStore(quality); 263b05f39d186d8ce1b53bb4da3cb4c2cd22986f513Paul Lawrence return quality; 264d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 265d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 266d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private int upgradeQualityForDPM(int quality) { 267d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom // Compare min allowed password quality 268d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom int minQuality = mDPM.getPasswordQuality(null); 269d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom if (quality < minQuality) { 270d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = minQuality; 271d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 272d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom return quality; 273d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom } 274d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom 275d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom private int upgradeQualityForKeyStore(int quality) { 276d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom if (!mKeyStore.isEmpty()) { 277d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom if (quality < CredentialStorage.MIN_PASSWORD_QUALITY) { 278d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom quality = CredentialStorage.MIN_PASSWORD_QUALITY; 2796370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler } 2806370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler } 2816370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler return quality; 2826370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler } 2836370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler 28417e9e1933055b207473b488595b2887bfcaea32eJim Miller /*** 28517e9e1933055b207473b488595b2887bfcaea32eJim Miller * Disables preferences that are less secure than required quality. 28617e9e1933055b207473b488595b2887bfcaea32eJim Miller * 28717e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param quality the requested quality. 28817e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 28994c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross private void disableUnusablePreferences(final int quality, MutableBoolean allowBiometric) { 290cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani final PreferenceScreen entries = getPreferenceScreen(); 2915541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller final boolean onlyShowFallback = getActivity().getIntent() 2925541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller .getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false); 2930fb158a685d753682afdcffb0b783be8e38e0f2bDanielle Millett final boolean weakBiometricAvailable = 2940fb158a685d753682afdcffb0b783be8e38e0f2bDanielle Millett mChooseLockSettingsHelper.utils().isBiometricWeakInstalled(); 295783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller 296783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller // if there are multiple users, disable "None" setting 297783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller UserManager mUm = (UserManager) getSystemService(Context.USER_SERVICE); 298783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller List<UserInfo> users = mUm.getUsers(true); 299783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller final boolean singleUser = users.size() == 1; 300783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller 301cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani for (int i = entries.getPreferenceCount() - 1; i >= 0; --i) { 302cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani Preference pref = entries.getPreference(i); 30317e9e1933055b207473b488595b2887bfcaea32eJim Miller if (pref instanceof PreferenceScreen) { 30417e9e1933055b207473b488595b2887bfcaea32eJim Miller final String key = ((PreferenceScreen) pref).getKey(); 30517e9e1933055b207473b488595b2887bfcaea32eJim Miller boolean enabled = true; 3065541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller boolean visible = true; 307cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani if (KEY_UNLOCK_SET_OFF.equals(key)) { 30817e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 309783ea85bec4ec3b2f0fa9dd06cf065e527daf04cJim Miller visible = singleUser; // don't show when there's more than 1 user 31017e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_NONE.equals(key)) { 31117e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; 3125541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (KEY_UNLOCK_SET_BIOMETRIC_WEAK.equals(key)) { 31394c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK || 31494c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross allowBiometric.value; 3155541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller visible = weakBiometricAvailable; // If not available, then don't show it. 31617e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PATTERN.equals(key)) { 31717e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; 31817e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PIN.equals(key)) { 3198fd852e7c2f488650095024aca9c51f8c7ddc3b3Nicolas Prevot enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; 32017e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (KEY_UNLOCK_SET_PASSWORD.equals(key)) { 32117e9e1933055b207473b488595b2887bfcaea32eJim Miller enabled = quality <= DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; 32217e9e1933055b207473b488595b2887bfcaea32eJim Miller } 3235541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller if (!visible || (onlyShowFallback && !allowedForFallback(key))) { 324cf26bb2dcc83803678bcd37bb58b677209ffb3fcAmith Yamasani entries.removePreference(pref); 3255541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (!enabled) { 32617e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setSummary(R.string.unlock_set_unlock_disabled_summary); 32717e9e1933055b207473b488595b2887bfcaea32eJim Miller pref.setEnabled(false); 32817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 329bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 330bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 331bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller } 332bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 333524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav private void updatePreferenceSummaryIfNeeded() { 334524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav if (AccessibilityManager.getInstance(getActivity()).getEnabledAccessibilityServiceList( 335524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav AccessibilityServiceInfo.FEEDBACK_ALL_MASK).isEmpty()) { 336524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav return; 337524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 338524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 339524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav CharSequence summary = getString(R.string.secure_lock_encryption_warning); 340524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 341524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav PreferenceScreen screen = getPreferenceScreen(); 342524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav final int preferenceCount = screen.getPreferenceCount(); 343524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav for (int i = 0; i < preferenceCount; i++) { 344524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav Preference preference = screen.getPreference(i); 345524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav switch (preference.getKey()) { 346524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PATTERN: 347524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PIN: 348524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav case KEY_UNLOCK_SET_PASSWORD: { 349524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav preference.setSummary(summary); 350524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } break; 351524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 352524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 353524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav } 354524484426855f814ff1f3189fd5221dd630dbf8cSvetoslav 35517e9e1933055b207473b488595b2887bfcaea32eJim Miller /** 3565541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller * Check whether the key is allowed for fallback (e.g. bio sensor). Returns true if it's 3575541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller * supported as a backup. 3585541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller * 3595541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller * @param key 3605541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller * @return true if allowed 3615541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller */ 3625541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller private boolean allowedForFallback(String key) { 3635bae8739ea55702ec38df13550dd3f32137a9935Danielle Millett return KEY_UNLOCK_BACKUP_INFO.equals(key) || 3645bae8739ea55702ec38df13550dd3f32137a9935Danielle Millett KEY_UNLOCK_SET_PATTERN.equals(key) || KEY_UNLOCK_SET_PIN.equals(key); 3655541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } 3665541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller 367487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett private Intent getBiometricSensorIntent() { 36866026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani Intent fallBackIntent = new Intent().setClass(getActivity(), 36966026773bbf1d7631743a5b892a4f768c694f868Amith Yamasani ChooseLockGeneric.InternalActivity.class); 3705541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller fallBackIntent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, true); 3715541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller fallBackIntent.putExtra(CONFIRM_CREDENTIALS, false); 372940407eb6aac05a513d2f7d0626df9519be3a83cDanielle Millett fallBackIntent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE, 373940407eb6aac05a513d2f7d0626df9519be3a83cDanielle Millett R.string.backup_lock_settings_picker_title); 3745541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller 37580412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett boolean showTutorial = ALWAY_SHOW_TUTORIAL || 37680412e70db62d64777cd3399a9afc6fafae6f0a4Danielle Millett !mChooseLockSettingsHelper.utils().isBiometricWeakEverChosen(); 377c82ba86375fc3c58bd9ee572f73d336693d62b11Danielle Millett Intent intent = new Intent(); 378487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett intent.setClassName("com.android.facelock", "com.android.facelock.SetupIntro"); 379487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett intent.putExtra("showTutorial", showTutorial); 3805541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller PendingIntent pending = PendingIntent.getActivity(getActivity(), 0, fallBackIntent, 0); 3815541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller intent.putExtra("PendingIntent", pending); 3825541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller return intent; 3835541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } 3845541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller 3855541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller /** 38617e9e1933055b207473b488595b2887bfcaea32eJim Miller * Invokes an activity to change the user's pattern, password or PIN based on given quality 38717e9e1933055b207473b488595b2887bfcaea32eJim Miller * and minimum quality specified by DevicePolicyManager. If quality is 38817e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED}, password is cleared. 38917e9e1933055b207473b488595b2887bfcaea32eJim Miller * 3906370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler * @param quality the desired quality. Ignored if DevicePolicyManager requires more security 39117e9e1933055b207473b488595b2887bfcaea32eJim Miller * @param disabled whether or not to show LockScreen at all. Only meaningful when quality is 39217e9e1933055b207473b488595b2887bfcaea32eJim Miller * {@link DevicePolicyManager#PASSWORD_QUALITY_UNSPECIFIED} 39317e9e1933055b207473b488595b2887bfcaea32eJim Miller */ 39417e9e1933055b207473b488595b2887bfcaea32eJim Miller void updateUnlockMethodAndFinish(int quality, boolean disabled) { 3956370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler // Sanity check. We should never get here without confirming user's existing password. 39617e9e1933055b207473b488595b2887bfcaea32eJim Miller if (!mPasswordConfirmed) { 3976370c87a6b98abfc6badb31070a60f84b3f528b3Andy Stadler throw new IllegalStateException("Tried to update password without confirming it"); 39817e9e1933055b207473b488595b2887bfcaea32eJim Miller } 399bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller 4005541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller final boolean isFallback = getActivity().getIntent() 4015541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller .getBooleanExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, false); 4025541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller 40394c05482240f743daa8c8698a241d1d0dfe2404cSteven Ross quality = upgradeQuality(quality, null); 404c620ba41ce20e683aad3d124b3866cadaddcc87dSteven Ross 40517e9e1933055b207473b488595b2887bfcaea32eJim Miller if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { 40617e9e1933055b207473b488595b2887bfcaea32eJim Miller int minLength = mDPM.getPasswordMinimumLength(null); 40717e9e1933055b207473b488595b2887bfcaea32eJim Miller if (minLength < MIN_PASSWORD_LENGTH) { 40817e9e1933055b207473b488595b2887bfcaea32eJim Miller minLength = MIN_PASSWORD_LENGTH; 40917e9e1933055b207473b488595b2887bfcaea32eJim Miller } 41017e9e1933055b207473b488595b2887bfcaea32eJim Miller final int maxLength = mDPM.getPasswordMaximumLength(quality); 41117e9e1933055b207473b488595b2887bfcaea32eJim Miller Intent intent = new Intent().setClass(getActivity(), ChooseLockPassword.class); 41217e9e1933055b207473b488595b2887bfcaea32eJim Miller intent.putExtra(LockPatternUtils.PASSWORD_TYPE_KEY, quality); 41317e9e1933055b207473b488595b2887bfcaea32eJim Miller intent.putExtra(ChooseLockPassword.PASSWORD_MIN_KEY, minLength); 41417e9e1933055b207473b488595b2887bfcaea32eJim Miller intent.putExtra(ChooseLockPassword.PASSWORD_MAX_KEY, maxLength); 41517e9e1933055b207473b488595b2887bfcaea32eJim Miller intent.putExtra(CONFIRM_CREDENTIALS, false); 4165541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller intent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, 4175541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller isFallback); 418c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani if (isFallback) { 41931dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross startActivityForResult(intent, FALLBACK_REQUEST); 42031dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross return; 4217caac4c19daf79a9220231a60ed1b8231968a619Steven Ross } else { 422c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani mFinishPending = true; 42331dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 42431dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross startActivity(intent); 42531dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross } 42617e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { 42712c1451f1fbcbc8b2b0dbf68886b6742e8eb83e2Danielle Millett Intent intent = new Intent(getActivity(), ChooseLockPattern.class); 42817e9e1933055b207473b488595b2887bfcaea32eJim Miller intent.putExtra("key_lock_method", "pattern"); 42917e9e1933055b207473b488595b2887bfcaea32eJim Miller intent.putExtra(CONFIRM_CREDENTIALS, false); 4305541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller intent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, 4315541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller isFallback); 432c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani if (isFallback) { 43331dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross startActivityForResult(intent, FALLBACK_REQUEST); 43431dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross return; 4357caac4c19daf79a9220231a60ed1b8231968a619Steven Ross } else { 436c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani mFinishPending = true; 43731dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); 43831dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross startActivity(intent); 43931dac17c4b0b49b4968b42b2af6f0799a0508a2fSteven Ross } 4405541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) { 441487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett Intent intent = getBiometricSensorIntent(); 442c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani mFinishPending = true; 44317e9e1933055b207473b488595b2887bfcaea32eJim Miller startActivity(intent); 44417e9e1933055b207473b488595b2887bfcaea32eJim Miller } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) { 445c620ba41ce20e683aad3d124b3866cadaddcc87dSteven Ross mChooseLockSettingsHelper.utils().clearLock(false); 44617e9e1933055b207473b488595b2887bfcaea32eJim Miller mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled); 44717e9e1933055b207473b488595b2887bfcaea32eJim Miller getActivity().setResult(Activity.RESULT_OK); 448c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani finish(); 449c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani } else { 450c666c65fab5e5db7ed0d1e5c53656e81969ea1f5Amith Yamasani finish(); 45117e9e1933055b207473b488595b2887bfcaea32eJim Miller } 452abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 453b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 454b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani @Override 455b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani protected int getHelpResource() { 456b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani return R.string.help_url_choose_lockscreen; 457b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani } 458b0b37ae21c172491bc170659b5f429601858ddc1Amith Yamasani 459abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn } 460abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn} 461