SecuritySettings.java revision 8227e303850d7c1162c62947b70d0592432b455e
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 2086624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; 2186624a21540e2cd336573a55adb5d3997e4a717dJim Miller 22487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millettimport android.app.Activity; 232c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunneimport android.app.AlertDialog; 248227e303850d7c1162c62947b70d0592432b455eMichael Jurkaimport android.app.KeyguardManager; 254037c7f27c849a1ada0980ad881636fc940a0b85Dianne Hackbornimport android.app.admin.DevicePolicyManager; 268227e303850d7c1162c62947b70d0592432b455eMichael Jurkaimport android.appwidget.AppWidgetHost; 278227e303850d7c1162c62947b70d0592432b455eMichael Jurkaimport android.appwidget.AppWidgetManager; 288227e303850d7c1162c62947b70d0592432b455eMichael Jurkaimport android.appwidget.AppWidgetProviderInfo; 298227e303850d7c1162c62947b70d0592432b455eMichael Jurkaimport android.content.ActivityNotFoundException; 308227e303850d7c1162c62947b70d0592432b455eMichael Jurkaimport android.content.ComponentName; 31abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Context; 322c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunneimport android.content.DialogInterface; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 34bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich canningsimport android.content.pm.PackageManager; 35bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich canningsimport android.content.pm.ResolveInfo; 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 37bb06a427eb471227cf42a8078a54ca0581309493Dianne Hackbornimport android.os.UserHandle; 38edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasaniimport android.os.Vibrator; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 4086624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport android.preference.ListPreference; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 42f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwoodimport android.preference.Preference.OnPreferenceChangeListener; 43f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwoodimport android.preference.PreferenceGroup; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 469cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yehimport android.security.KeyStore; 4756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayorimport android.telephony.TelephonyManager; 4886624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport android.util.Log; 498227e303850d7c1162c62947b70d0592432b455eMichael Jurkaimport android.widget.Toast; 50f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 51a6a8a1479b970d8a84395453703348fe42d17438Gilles Debunneimport com.android.internal.widget.LockPatternUtils; 52a6a8a1479b970d8a84395453703348fe42d17438Gilles Debunne 5386624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport java.util.ArrayList; 54bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich canningsimport java.util.List; 555ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Gesture lock pattern settings. 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 5936972bb7e952ca8a7bd8e57e32246d60873d7479Jim Millerpublic class SecuritySettings extends SettingsPreferenceFragment 602c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne implements OnPreferenceChangeListener, DialogInterface.OnClickListener { 618227e303850d7c1162c62947b70d0592432b455eMichael Jurka static final String TAG = "SecuritySettings"; 626f8fb436178d12d11d6ab59671168f0603bdbdcbJason parks 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Lock Settings 6491d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final String KEY_UNLOCK_SET_OR_CHANGE = "unlock_set_or_change"; 658227e303850d7c1162c62947b70d0592432b455eMichael Jurka private static final String KEY_CHOOSE_USER_SELECTED_LOCKSCREEN_WIDGET = 668227e303850d7c1162c62947b70d0592432b455eMichael Jurka "choose_user_selected_lockscreen_widget"; 67487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett private static final String KEY_BIOMETRIC_WEAK_IMPROVE_MATCHING = 68487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett "biometric_weak_improve_matching"; 69a87a25bdec7b991bfa6ef3ea9dfacd0ed162044eDanielle Millett private static final String KEY_BIOMETRIC_WEAK_LIVELINESS = "biometric_weak_liveliness"; 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_LOCK_ENABLED = "lockenabled"; 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; 729e61b9fe59aca9ac521792f4f89e5a270333b030Jim Miller private static final String KEY_TACTILE_FEEDBACK_ENABLED = "unlock_tactile_feedback"; 73edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani private static final String KEY_SECURITY_CATEGORY = "security_category"; 7491d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final String KEY_LOCK_AFTER_TIMEOUT = "lock_after_timeout"; 758227e303850d7c1162c62947b70d0592432b455eMichael Jurka private static final String EXTRA_NO_WIDGET = "com.android.settings.NO_WIDGET"; 7691d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123; 77790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett private static final int CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_IMPROVE_REQUEST = 124; 784a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett private static final int CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_LIVELINESS_OFF = 125; 798227e303850d7c1162c62947b70d0592432b455eMichael Jurka private static final int REQUEST_PICK_APPWIDGET = 126; 808227e303850d7c1162c62947b70d0592432b455eMichael Jurka private static final int REQUEST_CREATE_APPWIDGET = 127; 817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // Misc Settings 8391d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final String KEY_SIM_LOCK = "sim_lock"; 8491d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final String KEY_SHOW_PASSWORD = "show_password"; 8591d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private static final String KEY_RESET_CREDENTIALS = "reset_credentials"; 862c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne private static final String KEY_TOGGLE_INSTALL_APPLICATIONS = "toggle_install_applications"; 87d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings private static final String KEY_TOGGLE_VERIFY_APPLICATIONS = "toggle_verify_applications"; 88071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks"; 89bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive"; 9047d380f1e6c823cea444004cb799d4c791145cc6Jim Miller 91abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn DevicePolicyManager mDPM; 92122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 9300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 948227e303850d7c1162c62947b70d0592432b455eMichael Jurka private Preference mUserSelectedWidget; 95122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller private LockPatternUtils mLockPatternUtils; 9686624a21540e2cd336573a55adb5d3997e4a717dJim Miller private ListPreference mLockAfter; 9736972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller 984a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett private CheckBoxPreference mBiometricWeakLiveliness; 9991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private CheckBoxPreference mVisiblePattern; 10091d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private CheckBoxPreference mTactileFeedback; 10191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh 10291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private CheckBoxPreference mShowPassword; 10391d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh 10491d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private Preference mResetCredentials; 1055ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 1062c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne private CheckBoxPreference mToggleAppInstallation; 1072c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne private DialogInterface mWarnInstallApps; 108d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings private CheckBoxPreference mToggleVerifyApps; 109071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller private CheckBoxPreference mPowerButtonInstantlyLocks; 1102c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne 111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 112d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle savedInstanceState) { 113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 114122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 115d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mLockPatternUtils = new LockPatternUtils(getActivity()); 116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 117abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 118122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 119d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); 12002cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani } 1215ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PreferenceScreen createPreferenceHierarchy() { 12391d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh PreferenceScreen root = getPreferenceScreen(); 124122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (root != null) { 125122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller root.removeAll(); 126122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 127122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller addPreferencesFromResource(R.xml.security_settings); 12891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh root = getPreferenceScreen(); 129122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 13036972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller // Add options for lock/unlock screen 13136972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller int resid = 0; 132122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (!mLockPatternUtils.isSecure()) { 13336972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller if (mLockPatternUtils.isLockScreenDisabled()) { 13436972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_lockscreen; 13536972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } else { 13636972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_chooser; 13736972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } 1380fb158a685d753682afdcffb0b783be8e38e0f2bDanielle Millett } else if (mLockPatternUtils.usingBiometricWeak() && 1390fb158a685d753682afdcffb0b783be8e38e0f2bDanielle Millett mLockPatternUtils.isBiometricWeakInstalled()) { 1405541a86efe5f26956e54de49c4a59bf1dab79a78Jim Miller resid = R.xml.security_settings_biometric_weak; 141122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } else { 142af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) { 143af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 14436972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_pattern; 145af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 146af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 14736972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_pin; 148af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 149af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 150af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 15157fbf694a53afb9c1924d81272179dceb3acfa4dKonstantin Lopyrev case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 15236972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_password; 153af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 15400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 155122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 15636972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller addPreferencesFromResource(resid); 157122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 1584112199ed654f8bd1cea2c9a29a24be3c148b2edJason parks 1594112199ed654f8bd1cea2c9a29a24be3c148b2edJason parks // Add options for device encryption 160f8217304073b5cd13823a0602568394be93bf310Jason parks DevicePolicyManager dpm = 161f8217304073b5cd13823a0602568394be93bf310Jason parks (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); 1624112199ed654f8bd1cea2c9a29a24be3c148b2edJason parks 163bb06a427eb471227cf42a8078a54ca0581309493Dianne Hackborn if (UserHandle.myUserId() == 0) { 164b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani switch (dpm.getStorageEncryptionStatus()) { 165b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani case DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE: 166b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani // The device is currently encrypted. 167b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani addPreferencesFromResource(R.xml.security_settings_encrypted); 168b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani break; 169b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani case DevicePolicyManager.ENCRYPTION_STATUS_INACTIVE: 170b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani // This device supports encryption but isn't encrypted. 171b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani addPreferencesFromResource(R.xml.security_settings_unencrypted); 172b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani break; 173b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani } 1744112199ed654f8bd1cea2c9a29a24be3c148b2edJason parks } 1754112199ed654f8bd1cea2c9a29a24be3c148b2edJason parks 17686624a21540e2cd336573a55adb5d3997e4a717dJim Miller // lock after preference 17791d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter = (ListPreference) root.findPreference(KEY_LOCK_AFTER_TIMEOUT); 17891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh if (mLockAfter != null) { 17991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh setupLockAfterPreference(); 18091d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh updateLockAfterPreferenceSummary(); 18191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh } 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 183a87a25bdec7b991bfa6ef3ea9dfacd0ed162044eDanielle Millett // biometric weak liveliness 184a87a25bdec7b991bfa6ef3ea9dfacd0ed162044eDanielle Millett mBiometricWeakLiveliness = 1854a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett (CheckBoxPreference) root.findPreference(KEY_BIOMETRIC_WEAK_LIVELINESS); 186a87a25bdec7b991bfa6ef3ea9dfacd0ed162044eDanielle Millett 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // visible pattern 18891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mVisiblePattern = (CheckBoxPreference) root.findPreference(KEY_VISIBLE_PATTERN); 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 190071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller // lock instantly on power key press 191071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller mPowerButtonInstantlyLocks = (CheckBoxPreference) root.findPreference( 192071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller KEY_POWER_INSTANTLY_LOCKS); 193071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller 1948123493ef905a210bd00b0c623459f4c86505298Danielle Millett // don't display visible pattern if biometric and backup is not pattern 1958123493ef905a210bd00b0c623459f4c86505298Danielle Millett if (resid == R.xml.security_settings_biometric_weak && 1968123493ef905a210bd00b0c623459f4c86505298Danielle Millett mLockPatternUtils.getKeyguardStoredPasswordQuality() != 1978123493ef905a210bd00b0c623459f4c86505298Danielle Millett DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) { 1988123493ef905a210bd00b0c623459f4c86505298Danielle Millett PreferenceGroup securityCategory = (PreferenceGroup) 1998123493ef905a210bd00b0c623459f4c86505298Danielle Millett root.findPreference(KEY_SECURITY_CATEGORY); 2008123493ef905a210bd00b0c623459f4c86505298Danielle Millett if (securityCategory != null && mVisiblePattern != null) { 2018123493ef905a210bd00b0c623459f4c86505298Danielle Millett securityCategory.removePreference(root.findPreference(KEY_VISIBLE_PATTERN)); 2028123493ef905a210bd00b0c623459f4c86505298Danielle Millett } 2038123493ef905a210bd00b0c623459f4c86505298Danielle Millett } 2048123493ef905a210bd00b0c623459f4c86505298Danielle Millett 205122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller // tactile feedback. Should be common to all unlock preference screens. 20691d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mTactileFeedback = (CheckBoxPreference) root.findPreference(KEY_TACTILE_FEEDBACK_ENABLED); 207edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani if (!((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).hasVibrator()) { 208edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani PreferenceGroup securityCategory = (PreferenceGroup) 20991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh root.findPreference(KEY_SECURITY_CATEGORY); 210edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani if (securityCategory != null && mTactileFeedback != null) { 211edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani securityCategory.removePreference(mTactileFeedback); 212edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani } 213edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani } 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 215bb06a427eb471227cf42a8078a54ca0581309493Dianne Hackborn if (UserHandle.myUserId() > 0) { 216b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani return root; 217b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani } 218b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani // Rest are for primary user... 219b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani 22091d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // Append the rest of the settings 22191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh addPreferencesFromResource(R.xml.security_settings_misc); 22291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh 2235c68e12493d3c81324179c7c3ba6cd58279d648bAmith Yamasani // Do not display SIM lock for devices without an Icc card 224cd05e8859599658a546b5d4ee09068dd2833b901Wink Saville TelephonyManager tm = TelephonyManager.getDefault(); 2255c68e12493d3c81324179c7c3ba6cd58279d648bAmith Yamasani if (!tm.hasIccCard()) { 22691d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh root.removePreference(root.findPreference(KEY_SIM_LOCK)); 227a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo } else { 228a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo // Disable SIM lock if sim card is missing or unknown 229a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo if ((TelephonyManager.getDefault().getSimState() == 230a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo TelephonyManager.SIM_STATE_ABSENT) || 231a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo (TelephonyManager.getDefault().getSimState() == 232a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo TelephonyManager.SIM_STATE_UNKNOWN)) { 233a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo root.findPreference(KEY_SIM_LOCK).setEnabled(false); 234a98c353f8b18607f0c2e9af26b91bf6ffbe8dc78Kazuhiro Ondo } 235386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 23791d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // Show password 23891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mShowPassword = (CheckBoxPreference) root.findPreference(KEY_SHOW_PASSWORD); 239feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn 2407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 24191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mResetCredentials = root.findPreference(KEY_RESET_CREDENTIALS); 2428877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 2432c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne mToggleAppInstallation = (CheckBoxPreference) findPreference( 2442c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne KEY_TOGGLE_INSTALL_APPLICATIONS); 2452c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne mToggleAppInstallation.setChecked(isNonMarketAppsAllowed()); 2462c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne 247d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings // Package verification 248bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings mToggleVerifyApps = (CheckBoxPreference) findPreference(KEY_TOGGLE_VERIFY_APPLICATIONS); 249bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings if (isVerifierInstalled()) { 250bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings mToggleVerifyApps.setChecked(isVerifyAppsEnabled()); 251bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings } else { 252bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings mToggleVerifyApps.setChecked(false); 253bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings mToggleVerifyApps.setEnabled(false); 254bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings } 255d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings 2568227e303850d7c1162c62947b70d0592432b455eMichael Jurka mUserSelectedWidget = root.findPreference(KEY_CHOOSE_USER_SELECTED_LOCKSCREEN_WIDGET); 2578227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getActivity()); 2588227e303850d7c1162c62947b70d0592432b455eMichael Jurka int appWidgetId = -1; 2598227e303850d7c1162c62947b70d0592432b455eMichael Jurka String appWidgetIdString = Settings.Secure.getString( 2608227e303850d7c1162c62947b70d0592432b455eMichael Jurka getContentResolver(), Settings.Secure.LOCK_SCREEN_USER_SELECTED_APPWIDGET_ID); 2618227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (appWidgetIdString != null) {; 2628227e303850d7c1162c62947b70d0592432b455eMichael Jurka appWidgetId = (int) Integer.decode(appWidgetIdString); 2638227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 2648227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (appWidgetId == -1) { 2658227e303850d7c1162c62947b70d0592432b455eMichael Jurka mUserSelectedWidget.setSummary(getResources().getString(R.string.widget_none)); 2668227e303850d7c1162c62947b70d0592432b455eMichael Jurka } else { 2678227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetProviderInfo appWidget = appWidgetManager.getAppWidgetInfo(appWidgetId); 2688227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (appWidget != null) { 2698227e303850d7c1162c62947b70d0592432b455eMichael Jurka mUserSelectedWidget.setSummary(appWidget.label); 2708227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 2718227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 2728227e303850d7c1162c62947b70d0592432b455eMichael Jurka 273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return root; 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 2762c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne private boolean isNonMarketAppsAllowed() { 2775a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate return Settings.Global.getInt(getContentResolver(), 2785a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate Settings.Global.INSTALL_NON_MARKET_APPS, 0) > 0; 2792c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 2802c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne 2812c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne private void setNonMarketAppsAllowed(boolean enabled) { 2822c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne // Change the system setting 2835a64c739bfbf644dabd11d5330f577e94d478326Christopher Tate Settings.Global.putInt(getContentResolver(), Settings.Global.INSTALL_NON_MARKET_APPS, 2842c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne enabled ? 1 : 0); 2852c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 2862c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne 287d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings private boolean isVerifyAppsEnabled() { 288d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings return Settings.Global.getInt(getContentResolver(), 289d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) > 0; 290d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings } 291d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings 292bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings private boolean isVerifierInstalled() { 293bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings final PackageManager pm = getPackageManager(); 294bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION); 295bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings verification.setType(PACKAGE_MIME_TYPE); 296bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 297bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings final List<ResolveInfo> receivers = pm.queryBroadcastReceivers(verification, 0); 298bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings return (receivers.size() > 0) ? true : false; 299bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings } 300bfbdceffe60e20a8db91b54cc81cfe49ea0dd96arich cannings 3012c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne private void warnAppInstallation() { 3022c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne // TODO: DialogFragment? 3032c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne mWarnInstallApps = new AlertDialog.Builder(getActivity()).setTitle( 3042c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne getResources().getString(R.string.error_title)) 3052c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne .setIcon(com.android.internal.R.drawable.ic_dialog_alert) 3062c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne .setMessage(getResources().getString(R.string.install_all_warning)) 3072c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne .setPositiveButton(android.R.string.yes, this) 3082c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne .setNegativeButton(android.R.string.no, null) 3092c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne .show(); 3102c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 3112c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne 3122c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne public void onClick(DialogInterface dialog, int which) { 3132c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne if (dialog == mWarnInstallApps && which == DialogInterface.BUTTON_POSITIVE) { 3142c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne setNonMarketAppsAllowed(true); 315b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani if (mToggleAppInstallation != null) { 316b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani mToggleAppInstallation.setChecked(true); 317b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani } 3182c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 3192c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 3202c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne 3212c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne @Override 3222c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne public void onDestroy() { 3232c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne super.onDestroy(); 3242c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne if (mWarnInstallApps != null) { 3252c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne mWarnInstallApps.dismiss(); 3262c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 3272c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 3282c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne 32991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private void setupLockAfterPreference() { 33091d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // Compatible with pre-Froyo 33191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh long currentTimeout = Settings.Secure.getLong(getContentResolver(), 33291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 5000); 33391d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter.setValue(String.valueOf(currentTimeout)); 33491d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter.setOnPreferenceChangeListener(this); 33591d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh final long adminTimeout = (mDPM != null ? mDPM.getMaximumTimeToLock(null) : 0); 33691d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh final long displayTimeout = Math.max(0, 33791d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh Settings.System.getInt(getContentResolver(), SCREEN_OFF_TIMEOUT, 0)); 33891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh if (adminTimeout > 0) { 33991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // This setting is a slave to display timeout when a device policy is enforced. 34091d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // As such, maxLockTimeout = adminTimeout - displayTimeout. 34191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh // If there isn't enough time, shows "immediately" setting. 34291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh disableUnusableTimeouts(Math.max(0, adminTimeout - displayTimeout)); 34386624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 34486624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 34586624a21540e2cd336573a55adb5d3997e4a717dJim Miller 346c9787070bab332b80676b745a44dd8ee4d72073dJim Miller private void updateLockAfterPreferenceSummary() { 347c9787070bab332b80676b745a44dd8ee4d72073dJim Miller // Update summary message with current value 348c9787070bab332b80676b745a44dd8ee4d72073dJim Miller long currentTimeout = Settings.Secure.getLong(getContentResolver(), 34958bca8f15fbdc9e621b3c259a50ecf41c00e64c3Amith Yamasani Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 5000); 350c9787070bab332b80676b745a44dd8ee4d72073dJim Miller final CharSequence[] entries = mLockAfter.getEntries(); 351c9787070bab332b80676b745a44dd8ee4d72073dJim Miller final CharSequence[] values = mLockAfter.getEntryValues(); 352c9787070bab332b80676b745a44dd8ee4d72073dJim Miller int best = 0; 353c9787070bab332b80676b745a44dd8ee4d72073dJim Miller for (int i = 0; i < values.length; i++) { 354c9787070bab332b80676b745a44dd8ee4d72073dJim Miller long timeout = Long.valueOf(values[i].toString()); 355c9787070bab332b80676b745a44dd8ee4d72073dJim Miller if (currentTimeout >= timeout) { 356c9787070bab332b80676b745a44dd8ee4d72073dJim Miller best = i; 357c9787070bab332b80676b745a44dd8ee4d72073dJim Miller } 358c9787070bab332b80676b745a44dd8ee4d72073dJim Miller } 35991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter.setSummary(getString(R.string.lock_after_timeout_summary, entries[best])); 360c9787070bab332b80676b745a44dd8ee4d72073dJim Miller } 361c9787070bab332b80676b745a44dd8ee4d72073dJim Miller 36291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh private void disableUnusableTimeouts(long maxTimeout) { 36391d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh final CharSequence[] entries = mLockAfter.getEntries(); 36491d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh final CharSequence[] values = mLockAfter.getEntryValues(); 36586624a21540e2cd336573a55adb5d3997e4a717dJim Miller ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>(); 36686624a21540e2cd336573a55adb5d3997e4a717dJim Miller ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>(); 36786624a21540e2cd336573a55adb5d3997e4a717dJim Miller for (int i = 0; i < values.length; i++) { 36886624a21540e2cd336573a55adb5d3997e4a717dJim Miller long timeout = Long.valueOf(values[i].toString()); 36986624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (timeout <= maxTimeout) { 37086624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedEntries.add(entries[i]); 37186624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedValues.add(values[i]); 37286624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 37386624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 37486624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (revisedEntries.size() != entries.length || revisedValues.size() != values.length) { 37591d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter.setEntries( 37686624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedEntries.toArray(new CharSequence[revisedEntries.size()])); 37791d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter.setEntryValues( 37886624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedValues.toArray(new CharSequence[revisedValues.size()])); 37991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh final int userPreference = Integer.valueOf(mLockAfter.getValue()); 38086624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (userPreference <= maxTimeout) { 38191d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter.setValue(String.valueOf(userPreference)); 38286624a21540e2cd336573a55adb5d3997e4a717dJim Miller } else { 38386624a21540e2cd336573a55adb5d3997e4a717dJim Miller // There will be no highlighted selection since nothing in the list matches 38486624a21540e2cd336573a55adb5d3997e4a717dJim Miller // maxTimeout. The user can still select anything less than maxTimeout. 38586624a21540e2cd336573a55adb5d3997e4a717dJim Miller // TODO: maybe append maxTimeout to the list and mark selected. 38686624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 38786624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 38891d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh mLockAfter.setEnabled(revisedEntries.size() > 0); 38986624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 39086624a21540e2cd336573a55adb5d3997e4a717dJim Miller 391afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 392d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 393afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 39586624a21540e2cd336573a55adb5d3997e4a717dJim Miller // Make sure we reload the preference hierarchy since some of these settings 39686624a21540e2cd336573a55adb5d3997e4a717dJim Miller // depend on others... 39786624a21540e2cd336573a55adb5d3997e4a717dJim Miller createPreferenceHierarchy(); 39886624a21540e2cd336573a55adb5d3997e4a717dJim Miller 39900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 400a87a25bdec7b991bfa6ef3ea9dfacd0ed162044eDanielle Millett if (mBiometricWeakLiveliness != null) { 4014a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett mBiometricWeakLiveliness.setChecked( 4024a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett lockPatternUtils.isBiometricWeakLivelinessEnabled()); 403a87a25bdec7b991bfa6ef3ea9dfacd0ed162044eDanielle Millett } 404122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (mVisiblePattern != null) { 405122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mVisiblePattern.setChecked(lockPatternUtils.isVisiblePatternEnabled()); 406122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 407122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (mTactileFeedback != null) { 408122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mTactileFeedback.setChecked(lockPatternUtils.isTactileFeedbackEnabled()); 409122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 410071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller if (mPowerButtonInstantlyLocks != null) { 411071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller mPowerButtonInstantlyLocks.setChecked(lockPatternUtils.getPowerButtonInstantlyLocks()); 412071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller } 4137031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 414b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani if (mShowPassword != null) { 415b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani mShowPassword.setChecked(Settings.System.getInt(getContentResolver(), 416b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani Settings.System.TEXT_SHOW_PASSWORD, 1) != 0); 417b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani } 418b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 419d4023b7cca11e33e84df39dee9e9a737efab47c2Brian Carlstrom KeyStore.State state = KeyStore.getInstance().state(); 420b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani if (mResetCredentials != null) { 421b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani mResetCredentials.setEnabled(state != KeyStore.State.UNINITIALIZED); 422b810a0ddf9dd93a08789aff38901eeab9bfaf812Amith Yamasani } 423afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4258227e303850d7c1162c62947b70d0592432b455eMichael Jurka void startActivityForResultSafely(Intent intent, int requestCode) { 4268227e303850d7c1162c62947b70d0592432b455eMichael Jurka try { 4278227e303850d7c1162c62947b70d0592432b455eMichael Jurka startActivityForResult(intent, requestCode); 4288227e303850d7c1162c62947b70d0592432b455eMichael Jurka } catch (ActivityNotFoundException e) { 4298227e303850d7c1162c62947b70d0592432b455eMichael Jurka Toast.makeText(getActivity(), R.string.activity_not_found, Toast.LENGTH_SHORT).show(); 4308227e303850d7c1162c62947b70d0592432b455eMichael Jurka } catch (SecurityException e) { 4318227e303850d7c1162c62947b70d0592432b455eMichael Jurka Toast.makeText(getActivity(), R.string.activity_not_found, Toast.LENGTH_SHORT).show(); 4328227e303850d7c1162c62947b70d0592432b455eMichael Jurka Log.e(TAG, "Settings does not have the permission to launch " + intent, e); 4338227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 4348227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 4358227e303850d7c1162c62947b70d0592432b455eMichael Jurka 436afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 437a6a8a1479b970d8a84395453703348fe42d17438Gilles Debunne public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String key = preference.getKey(); 439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 44000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 441bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller if (KEY_UNLOCK_SET_OR_CHANGE.equals(key)) { 44217e9e1933055b207473b488595b2887bfcaea32eJim Miller startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment", 44317e9e1933055b207473b488595b2887bfcaea32eJim Miller SET_OR_CHANGE_LOCK_METHOD_REQUEST, null); 4448227e303850d7c1162c62947b70d0592432b455eMichael Jurka } else if (KEY_CHOOSE_USER_SELECTED_LOCKSCREEN_WIDGET.equals(key)) { 4458227e303850d7c1162c62947b70d0592432b455eMichael Jurka // Create intent to pick widget 4468227e303850d7c1162c62947b70d0592432b455eMichael Jurka Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); 4478227e303850d7c1162c62947b70d0592432b455eMichael Jurka // Found in KeyguardHostView.java 4488227e303850d7c1162c62947b70d0592432b455eMichael Jurka final int KEYGUARD_HOST_ID = 0x4B455947; 4498227e303850d7c1162c62947b70d0592432b455eMichael Jurka int appWidgetId = AppWidgetHost.allocateAppWidgetIdForHost( 4508227e303850d7c1162c62947b70d0592432b455eMichael Jurka "com.android.internal.policy.impl.keyguard", KEYGUARD_HOST_ID); 4518227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (appWidgetId != -1) { 4528227e303850d7c1162c62947b70d0592432b455eMichael Jurka pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 4538227e303850d7c1162c62947b70d0592432b455eMichael Jurka pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_SORT, false); 4548227e303850d7c1162c62947b70d0592432b455eMichael Jurka pickIntent.putExtra(AppWidgetManager.EXTRA_CATEGORY_FILTER, 4558227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD); 4568227e303850d7c1162c62947b70d0592432b455eMichael Jurka 4578227e303850d7c1162c62947b70d0592432b455eMichael Jurka // Add an entry for "none" to let someone select no widget 4588227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetProviderInfo noneInfo = new AppWidgetProviderInfo(); 4598227e303850d7c1162c62947b70d0592432b455eMichael Jurka ArrayList<AppWidgetProviderInfo> extraInfos = new ArrayList<AppWidgetProviderInfo>(); 4608227e303850d7c1162c62947b70d0592432b455eMichael Jurka noneInfo.label = getResources().getString(R.string.widget_none); 4618227e303850d7c1162c62947b70d0592432b455eMichael Jurka noneInfo.provider = new ComponentName("", ""); 4628227e303850d7c1162c62947b70d0592432b455eMichael Jurka extraInfos.add(noneInfo); 4638227e303850d7c1162c62947b70d0592432b455eMichael Jurka 4648227e303850d7c1162c62947b70d0592432b455eMichael Jurka ArrayList<Bundle> extraExtras = new ArrayList<Bundle>(); 4658227e303850d7c1162c62947b70d0592432b455eMichael Jurka Bundle b = new Bundle(); 4668227e303850d7c1162c62947b70d0592432b455eMichael Jurka b.putBoolean(EXTRA_NO_WIDGET, true); 4678227e303850d7c1162c62947b70d0592432b455eMichael Jurka extraExtras.add(b); 4688227e303850d7c1162c62947b70d0592432b455eMichael Jurka 4698227e303850d7c1162c62947b70d0592432b455eMichael Jurka // Launch the widget picker 4708227e303850d7c1162c62947b70d0592432b455eMichael Jurka pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_INFO, extraInfos); 4718227e303850d7c1162c62947b70d0592432b455eMichael Jurka pickIntent.putExtra(AppWidgetManager.EXTRA_CUSTOM_EXTRAS, extraExtras); 4728227e303850d7c1162c62947b70d0592432b455eMichael Jurka startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET); 4738227e303850d7c1162c62947b70d0592432b455eMichael Jurka } else { 4748227e303850d7c1162c62947b70d0592432b455eMichael Jurka Log.e(TAG, "Unable to allocate an AppWidget id in lock screen"); 4758227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 476487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett } else if (KEY_BIOMETRIC_WEAK_IMPROVE_MATCHING.equals(key)) { 477487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett ChooseLockSettingsHelper helper = 478487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett new ChooseLockSettingsHelper(this.getActivity(), this); 479487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett if (!helper.launchConfirmationActivity( 480790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_IMPROVE_REQUEST, null, null)) { 481790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett // If this returns false, it means no password confirmation is required, so 482790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett // go ahead and start improve. 483790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett // Note: currently a backup is required for biometric_weak so this code path 484790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett // can't be reached, but is here in case things change in the future 485790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett startBiometricWeakImprove(); 486487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett } 4874a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett } else if (KEY_BIOMETRIC_WEAK_LIVELINESS.equals(key)) { 4884a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett if (isToggled(preference)) { 4894a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett lockPatternUtils.setBiometricWeakLivelinessEnabled(true); 4904a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett } else { 4914a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett // In this case the user has just unchecked the checkbox, but this action requires 4924a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett // them to confirm their password. We need to re-check the checkbox until 4934a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett // they've confirmed their password 4944a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett mBiometricWeakLiveliness.setChecked(true); 4954a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett ChooseLockSettingsHelper helper = 4964a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett new ChooseLockSettingsHelper(this.getActivity(), this); 4974a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett if (!helper.launchConfirmationActivity( 4984a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_LIVELINESS_OFF, null, null)) { 4994a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett // If this returns false, it means no password confirmation is required, so 5004a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett // go ahead and uncheck it here. 5014a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett // Note: currently a backup is required for biometric_weak so this code path 5024a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett // can't be reached, but is here in case things change in the future 5034a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett lockPatternUtils.setBiometricWeakLivelinessEnabled(false); 5044a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett mBiometricWeakLiveliness.setChecked(false); 5054a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett } 5064a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett } 507122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } else if (KEY_LOCK_ENABLED.equals(key)) { 50800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setLockPatternEnabled(isToggled(preference)); 509afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_VISIBLE_PATTERN.equals(key)) { 51000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); 511afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) { 51200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setTactileFeedbackEnabled(isToggled(preference)); 513071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller } else if (KEY_POWER_INSTANTLY_LOCKS.equals(key)) { 514071742d838f9b0c312af309c87eaf2c444aeeab8Jim Miller lockPatternUtils.setPowerButtonInstantlyLocks(isToggled(preference)); 515afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mShowPassword) { 516afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 517afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword.isChecked() ? 1 : 0); 5182c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } else if (preference == mToggleAppInstallation) { 5192c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne if (mToggleAppInstallation.isChecked()) { 5202c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne mToggleAppInstallation.setChecked(false); 5212c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne warnAppInstallation(); 5222c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } else { 5232c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne setNonMarketAppsAllowed(false); 5242c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne } 525d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings } else if (KEY_TOGGLE_VERIFY_APPLICATIONS.equals(key)) { 526d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings Settings.Global.putInt(getContentResolver(), Settings.Global.PACKAGE_VERIFIER_ENABLE, 527d5d60655a9c23ba02b5fc1264fb1680f599b3b07rich cannings mToggleVerifyApps.isChecked() ? 1 : 0); 52836972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } else { 52936972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller // If we didn't handle it, let preferences handle it. 53036972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller return super.onPreferenceTreeClick(preferenceScreen, preference); 531afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 5324bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani 53336972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller return true; 534afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 535afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 536afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean isToggled(Preference pref) { 537afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return ((CheckBoxPreference) pref).isChecked(); 538afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 539afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 540afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 541a6a8a1479b970d8a84395453703348fe42d17438Gilles Debunne * see confirmPatternThenDisableAndClear 542afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 543afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 544d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onActivityResult(int requestCode, int resultCode, Intent data) { 545afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 546790e0c3ef3f11d7472ad676ce8314a73df190190Danielle Millett if (requestCode == CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_IMPROVE_REQUEST && 547487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett resultCode == Activity.RESULT_OK) { 548487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett startBiometricWeakImprove(); 549487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett return; 5504a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett } else if (requestCode == CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_LIVELINESS_OFF && 5514a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett resultCode == Activity.RESULT_OK) { 5524a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 5534a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett lockPatternUtils.setBiometricWeakLivelinessEnabled(false); 5548227e303850d7c1162c62947b70d0592432b455eMichael Jurka // Setting the mBiometricWeakLiveliness checked value to false is handled when onResume 5558227e303850d7c1162c62947b70d0592432b455eMichael Jurka // is called by grabbing the value from lockPatternUtils. We can't set it here 5568227e303850d7c1162c62947b70d0592432b455eMichael Jurka // because mBiometricWeakLiveliness could be null 5574a3e40d68e8b01871121655456d7a1dfa3312f71Danielle Millett return; 5588227e303850d7c1162c62947b70d0592432b455eMichael Jurka } else if (requestCode == REQUEST_PICK_APPWIDGET || 5598227e303850d7c1162c62947b70d0592432b455eMichael Jurka requestCode == REQUEST_CREATE_APPWIDGET) { 5608227e303850d7c1162c62947b70d0592432b455eMichael Jurka int appWidgetId = (data == null) ? -1 : data.getIntExtra( 5618227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 5628227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (requestCode == REQUEST_PICK_APPWIDGET && resultCode == Activity.RESULT_OK) { 5638227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getActivity()); 5648227e303850d7c1162c62947b70d0592432b455eMichael Jurka boolean noWidget = data.getBooleanExtra(EXTRA_NO_WIDGET, false); 5658227e303850d7c1162c62947b70d0592432b455eMichael Jurka 5668227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetProviderInfo appWidget = null; 5678227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (!noWidget) { 5688227e303850d7c1162c62947b70d0592432b455eMichael Jurka appWidget = appWidgetManager.getAppWidgetInfo(appWidgetId); 5698227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 5708227e303850d7c1162c62947b70d0592432b455eMichael Jurka 5718227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (!noWidget && appWidget.configure != null) { 5728227e303850d7c1162c62947b70d0592432b455eMichael Jurka // Launch over to configure widget, if needed 5738227e303850d7c1162c62947b70d0592432b455eMichael Jurka Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE); 5748227e303850d7c1162c62947b70d0592432b455eMichael Jurka intent.setComponent(appWidget.configure); 5758227e303850d7c1162c62947b70d0592432b455eMichael Jurka intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 5768227e303850d7c1162c62947b70d0592432b455eMichael Jurka 5778227e303850d7c1162c62947b70d0592432b455eMichael Jurka startActivityForResultSafely(intent, REQUEST_CREATE_APPWIDGET); 5788227e303850d7c1162c62947b70d0592432b455eMichael Jurka } else { 5798227e303850d7c1162c62947b70d0592432b455eMichael Jurka // Otherwise just add it 5808227e303850d7c1162c62947b70d0592432b455eMichael Jurka if (noWidget) { 5818227e303850d7c1162c62947b70d0592432b455eMichael Jurka data.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 5828227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 5838227e303850d7c1162c62947b70d0592432b455eMichael Jurka onActivityResult(REQUEST_CREATE_APPWIDGET, Activity.RESULT_OK, data); 5848227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 5858227e303850d7c1162c62947b70d0592432b455eMichael Jurka } else if (requestCode == REQUEST_CREATE_APPWIDGET && resultCode == Activity.RESULT_OK) { 5868227e303850d7c1162c62947b70d0592432b455eMichael Jurka Settings.Secure.putString(getContentResolver(), 5878227e303850d7c1162c62947b70d0592432b455eMichael Jurka Settings.Secure.LOCK_SCREEN_USER_SELECTED_APPWIDGET_ID, 5888227e303850d7c1162c62947b70d0592432b455eMichael Jurka Integer.toString(appWidgetId)); 5898227e303850d7c1162c62947b70d0592432b455eMichael Jurka 5908227e303850d7c1162c62947b70d0592432b455eMichael Jurka } else { 5918227e303850d7c1162c62947b70d0592432b455eMichael Jurka AppWidgetHost.deleteAppWidgetIdForHost(appWidgetId); 5928227e303850d7c1162c62947b70d0592432b455eMichael Jurka } 593487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett } 594122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller createPreferenceHierarchy(); 595afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 596f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 59786624a21540e2cd336573a55adb5d3997e4a717dJim Miller public boolean onPreferenceChange(Preference preference, Object value) { 59886624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (preference == mLockAfter) { 59991d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh int timeout = Integer.parseInt((String) value); 60086624a21540e2cd336573a55adb5d3997e4a717dJim Miller try { 60186624a21540e2cd336573a55adb5d3997e4a717dJim Miller Settings.Secure.putInt(getContentResolver(), 60291d65a20af2d1bfb06f32d0bd821e8558afe939dChia-chi Yeh Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, timeout); 60386624a21540e2cd336573a55adb5d3997e4a717dJim Miller } catch (NumberFormatException e) { 60486624a21540e2cd336573a55adb5d3997e4a717dJim Miller Log.e("SecuritySettings", "could not persist lockAfter timeout setting", e); 60586624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 606c9787070bab332b80676b745a44dd8ee4d72073dJim Miller updateLockAfterPreferenceSummary(); 60786624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 60886624a21540e2cd336573a55adb5d3997e4a717dJim Miller return true; 60986624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 610487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett 611487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett public void startBiometricWeakImprove(){ 612487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett Intent intent = new Intent(); 613487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett intent.setClassName("com.android.facelock", "com.android.facelock.AddToSetup"); 614487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett startActivity(intent); 615487b16f3400b62b79f8108ca669cc3e937c69defDanielle Millett } 616afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 617