SecuritySettings.java revision c9787070bab332b80676b745a44dd8ee4d72073d
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 22d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport com.android.internal.widget.LockPatternUtils; 2356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 24f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.app.AlertDialog; 25f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.app.Dialog; 264037c7f27c849a1ada0980ad881636fc940a0b85Dianne Hackbornimport android.app.admin.DevicePolicyManager; 275ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport android.content.ContentQueryMap; 28f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.content.ContentResolver; 29abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackbornimport android.content.Context; 30f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.content.DialogInterface; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 325ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport android.database.Cursor; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.location.LocationManager; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 355e47f95316f164dca8b57584e3bdee97620378abMike Doddimport android.os.SystemProperties; 36edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasaniimport android.os.Vibrator; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 3886624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport android.preference.ListPreference; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 40f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwoodimport android.preference.Preference.OnPreferenceChangeListener; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceCategory; 42f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwoodimport android.preference.PreferenceGroup; 4300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Millerimport android.preference.PreferenceManager; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 469cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yehimport android.security.Credentials; 479cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yehimport android.security.KeyStore; 4856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayorimport android.telephony.TelephonyManager; 4986624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport android.util.Log; 507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.view.View; 51f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.widget.TextView; 527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.widget.Toast; 53f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 5486624a21540e2cd336573a55adb5d3997e4a717dJim Millerimport java.util.ArrayList; 55d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport java.util.Observable; 56d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport java.util.Observer; 575ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Gesture lock pattern settings. 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 6136972bb7e952ca8a7bd8e57e32246d60873d7479Jim Millerpublic class SecuritySettings extends SettingsPreferenceFragment 6286624a21540e2cd336573a55adb5d3997e4a717dJim Miller implements OnPreferenceChangeListener { 63bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller private static final String KEY_UNLOCK_SET_OR_CHANGE = "unlock_set_or_change"; 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Lock Settings 6600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private static final String PACKAGE = "com.android.settings"; 6700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private static final String ICC_LOCK_SETTINGS = PACKAGE + ".IccLockSettings"; 687031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_LOCK_ENABLED = "lockenabled"; 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; 719e61b9fe59aca9ac521792f4f89e5a270333b030Jim Miller private static final String KEY_TACTILE_FEEDBACK_ENABLED = "unlock_tactile_feedback"; 72edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani private static final String KEY_SECURITY_CATEGORY = "security_category"; 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 748877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted File Systems constants 758877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final String PROPERTY_EFS_ENABLED = "persist.security.efs.enabled"; 768877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final String PROPERTY_EFS_TRANSITION = "persist.security.efs.trans"; 778877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mVisiblePattern; 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mTactileFeedback; 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mShowPassword; 827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Location Settings 84f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood private static final String LOCATION_CATEGORY = "location_category"; 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_NETWORK = "location_network"; 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_GPS = "location_gps"; 87d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood private static final String ASSISTED_GPS = "assisted_gps"; 88f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood private static final String USE_LOCATION = "location_use_for_services"; 8986624a21540e2cd336573a55adb5d3997e4a717dJim Miller private static final String LOCK_AFTER_TIMEOUT_KEY = "lock_after_timeout"; 90bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123; 9186624a21540e2cd336573a55adb5d3997e4a717dJim Miller private static final int FALLBACK_LOCK_AFTER_TIMEOUT_VALUE = 5000; // compatible with pre-Froyo 9247d380f1e6c823cea444004cb799d4c791145cc6Jim Miller 9317e9e1933055b207473b488595b2887bfcaea32eJim Miller private static final String TAG = "SecuritySettings"; 9417e9e1933055b207473b488595b2887bfcaea32eJim Miller 957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 96f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood private final CredentialStorage mCredentialStorage = new CredentialStorage(); 977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 988877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted file system 998877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private CheckBoxPreference mEncryptedFSEnabled; 1008877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mNetwork; 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mGps; 103d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood private CheckBoxPreference mAssistedGps; 104f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood private CheckBoxPreference mUseLocation; 10572ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project 106abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn DevicePolicyManager mDPM; 107122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 1085ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // These provide support for receiving notification when Location Manager settings change. 1095ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // This is necessary because the Network Location Provider can change settings 1105ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // if the user does not confirm enabling the provider. 1115ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private ContentQueryMap mContentQueryMap; 11236972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller 11300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 114122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller private LockPatternUtils mLockPatternUtils; 11586624a21540e2cd336573a55adb5d3997e4a717dJim Miller private ListPreference mLockAfter; 11636972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller 11702cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani private SettingsObserver mSettingsObserver; 11802cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani 1195ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private final class SettingsObserver implements Observer { 1205ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood public void update(Observable o, Object arg) { 1215ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood updateToggles(); 1225ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1235ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1245ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 126d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle savedInstanceState) { 127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 128122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 129d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mLockPatternUtils = new LockPatternUtils(getActivity()); 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 131abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 132122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 133d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project createPreferenceHierarchy(); 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateToggles(); 13802cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani } 1395ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 14002cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani @Override 14102cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani public void onStart() { 14202cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani super.onStart(); 1435ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // listen for Location Manager settings changes 1445ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood Cursor settingsCursor = getContentResolver().query(Settings.Secure.CONTENT_URI, null, 1455ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood "(" + Settings.System.NAME + "=?)", 1465ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED}, 1475ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood null); 1485ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null); 14902cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani mContentQueryMap.addObserver(mSettingsObserver = new SettingsObserver()); 15002cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani } 15102cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani 15202cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani @Override 15302cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani public void onStop() { 15402cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani super.onStop(); 15502cf71a5916d1b0155e8fff3f62987cdc5c2b7c3Amith Yamasani mContentQueryMap.deleteObserver(mSettingsObserver); 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PreferenceScreen createPreferenceHierarchy() { 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen root = this.getPreferenceScreen(); 160122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (root != null) { 161122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller root.removeAll(); 162122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 163122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller addPreferencesFromResource(R.xml.security_settings); 164122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller root = this.getPreferenceScreen(); 165122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 166122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK); 167122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS); 168122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mAssistedGps = (CheckBoxPreference) getPreferenceScreen().findPreference(ASSISTED_GPS); 169f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood if (GoogleLocationSettingHelper.isAvailable(getActivity())) { 170f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood // GSF present, Add setting for 'Use My Location' 171f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood PreferenceGroup locationCat = (PreferenceGroup) root.findPreference(LOCATION_CATEGORY); 172f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood CheckBoxPreference useLocation = new CheckBoxPreference(getActivity()); 173f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood useLocation.setKey(USE_LOCATION); 174f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood useLocation.setTitle(R.string.use_location_title); 175f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood useLocation.setSummaryOn(R.string.use_location_summary_enabled); 176f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood useLocation.setSummaryOff(R.string.use_location_summary_disabled); 177f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood useLocation.setChecked( 178f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood GoogleLocationSettingHelper.getUseLocationForServices(getActivity()) 179f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood == GoogleLocationSettingHelper.USE_LOCATION_FOR_SERVICES_ON); 180f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood useLocation.setPersistent(false); 181f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood useLocation.setOnPreferenceChangeListener(this); 182f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood locationCat.addPreference(useLocation); 183f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood mUseLocation = useLocation; 184f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood } 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 18600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller PreferenceManager pm = getPreferenceManager(); 18700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 18836972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller // Add options for lock/unlock screen 18936972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller int resid = 0; 190122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (!mLockPatternUtils.isSecure()) { 19136972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller if (mLockPatternUtils.isLockScreenDisabled()) { 19236972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_lockscreen; 19336972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } else { 19436972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_chooser; 19536972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } 196122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } else { 197af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) { 198af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 19936972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_pattern; 200af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 201af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 20236972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_pin; 203af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 204af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 205af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 20657fbf694a53afb9c1924d81272179dceb3acfa4dKonstantin Lopyrev case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 20736972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller resid = R.xml.security_settings_password; 208af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 20900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 210122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 21136972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller addPreferencesFromResource(resid); 212122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 21386624a21540e2cd336573a55adb5d3997e4a717dJim Miller // lock after preference 21486624a21540e2cd336573a55adb5d3997e4a717dJim Miller mLockAfter = setupLockAfterPreference(pm); 215c9787070bab332b80676b745a44dd8ee4d72073dJim Miller updateLockAfterPreferenceSummary(); 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // visible pattern 21800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller mVisiblePattern = (CheckBoxPreference) pm.findPreference(KEY_VISIBLE_PATTERN); 219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 220122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller // tactile feedback. Should be common to all unlock preference screens. 22100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller mTactileFeedback = (CheckBoxPreference) pm.findPreference(KEY_TACTILE_FEEDBACK_ENABLED); 222edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani if (!((Vibrator) getSystemService(Context.VIBRATOR_SERVICE)).hasVibrator()) { 223edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani PreferenceGroup securityCategory = (PreferenceGroup) 224edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani pm.findPreference(KEY_SECURITY_CATEGORY); 225edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani if (securityCategory != null && mTactileFeedback != null) { 226edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani securityCategory.removePreference(mTactileFeedback); 227edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani } 228edac9af662f01026fd2b4acf263e1b5d1dfdeaa9Amith Yamasani } 229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 230386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang int activePhoneType = TelephonyManager.getDefault().getPhoneType(); 231386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 232386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // do not display SIM lock for CDMA phone 233386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang if (TelephonyManager.PHONE_TYPE_CDMA != activePhoneType) 234386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang { 235386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang PreferenceScreen simLockPreferences = getPreferenceManager() 236d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani .createPreferenceScreen(getActivity()); 237386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockPreferences.setTitle(R.string.sim_lock_settings_category); 238386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // Intent to launch SIM lock settings 23900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller simLockPreferences.setIntent(new Intent().setClassName(PACKAGE, ICC_LOCK_SETTINGS)); 240d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani PreferenceCategory simLockCat = new PreferenceCategory(getActivity()); 241386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.setTitle(R.string.sim_lock_settings_title); 242386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang root.addPreference(simLockCat); 243386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.addPreference(simLockPreferences); 244386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Passwords 247d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani PreferenceCategory passwordsCat = new PreferenceCategory(getActivity()); 248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.setTitle(R.string.security_passwords_title); 249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(passwordsCat); 2507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 251d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani CheckBoxPreference showPassword = mShowPassword = new CheckBoxPreference(getActivity()); 252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setKey("show_password"); 253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setTitle(R.string.show_password); 254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setSummary(R.string.show_password_summary); 255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setPersistent(false); 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.addPreference(showPassword); 2577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 258feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn // Device policies 259d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani PreferenceCategory devicePoliciesCat = new PreferenceCategory(getActivity()); 260feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn devicePoliciesCat.setTitle(R.string.device_admin_title); 261feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn root.addPreference(devicePoliciesCat); 262feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn 263d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Preference deviceAdminButton = new Preference(getActivity()); 264feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn deviceAdminButton.setTitle(R.string.manage_device_admin); 265feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn deviceAdminButton.setSummary(R.string.manage_device_admin_summary); 266feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn Intent deviceAdminIntent = new Intent(); 267d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani deviceAdminIntent.setClass(getActivity(), DeviceAdminSettings.class); 268feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn deviceAdminButton.setIntent(deviceAdminIntent); 269feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn devicePoliciesCat.addPreference(deviceAdminButton); 270feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn 2717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 272d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani PreferenceCategory credentialsCat = new PreferenceCategory(getActivity()); 27302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh credentialsCat.setTitle(R.string.credentials_category); 27402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh root.addPreference(credentialsCat); 2758877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mCredentialStorage.createPreferences(credentialsCat, CredentialStorage.TYPE_KEYSTORE); 2768877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 2778877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // File System Encryption 278d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani PreferenceCategory encryptedfsCat = new PreferenceCategory(getActivity()); 2798877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor encryptedfsCat.setTitle(R.string.encrypted_fs_category); 280c5a73328f16c9000f2256207cb675e2fb5f0fc88Oscar Montemayor //root.addPreference(encryptedfsCat); 2818877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mCredentialStorage.createPreferences(encryptedfsCat, CredentialStorage.TYPE_ENCRYPTEDFS); 282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return root; 283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 28586624a21540e2cd336573a55adb5d3997e4a717dJim Miller private ListPreference setupLockAfterPreference(PreferenceManager pm) { 28686624a21540e2cd336573a55adb5d3997e4a717dJim Miller ListPreference result = (ListPreference) pm.findPreference(LOCK_AFTER_TIMEOUT_KEY); 28786624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (result != null) { 28836972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller int lockAfterValue = Settings.Secure.getInt(getContentResolver(), 28936972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 29086624a21540e2cd336573a55adb5d3997e4a717dJim Miller FALLBACK_LOCK_AFTER_TIMEOUT_VALUE); 29186624a21540e2cd336573a55adb5d3997e4a717dJim Miller result.setValue(String.valueOf(lockAfterValue)); 29286624a21540e2cd336573a55adb5d3997e4a717dJim Miller result.setOnPreferenceChangeListener(this); 29386624a21540e2cd336573a55adb5d3997e4a717dJim Miller final long adminTimeout = mDPM != null ? mDPM.getMaximumTimeToLock(null) : 0; 29486624a21540e2cd336573a55adb5d3997e4a717dJim Miller final ContentResolver cr = getContentResolver(); 29536972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller final long displayTimeout = Math.max(0, 29686624a21540e2cd336573a55adb5d3997e4a717dJim Miller Settings.System.getInt(cr, SCREEN_OFF_TIMEOUT, 0)); 29786624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (adminTimeout > 0) { 29886624a21540e2cd336573a55adb5d3997e4a717dJim Miller // This setting is a slave to display timeout when a device policy is enforced. 29986624a21540e2cd336573a55adb5d3997e4a717dJim Miller // As such, maxLockTimeout = adminTimeout - displayTimeout. 30086624a21540e2cd336573a55adb5d3997e4a717dJim Miller // If there isn't enough time, shows "immediately" setting. 30186624a21540e2cd336573a55adb5d3997e4a717dJim Miller disableUnusableTimeouts(result, Math.max(0, adminTimeout - displayTimeout)); 30286624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 30386624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 30486624a21540e2cd336573a55adb5d3997e4a717dJim Miller return result; 30586624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 30686624a21540e2cd336573a55adb5d3997e4a717dJim Miller 307c9787070bab332b80676b745a44dd8ee4d72073dJim Miller private void updateLockAfterPreferenceSummary() { 308c9787070bab332b80676b745a44dd8ee4d72073dJim Miller // Not all security types have a "lock after" preference, so ignore those that don't. 309c9787070bab332b80676b745a44dd8ee4d72073dJim Miller if (mLockAfter == null) return; 310c9787070bab332b80676b745a44dd8ee4d72073dJim Miller 311c9787070bab332b80676b745a44dd8ee4d72073dJim Miller // Update summary message with current value 312c9787070bab332b80676b745a44dd8ee4d72073dJim Miller long currentTimeout = Settings.Secure.getLong(getContentResolver(), 313c9787070bab332b80676b745a44dd8ee4d72073dJim Miller Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, 0); 314c9787070bab332b80676b745a44dd8ee4d72073dJim Miller final CharSequence[] entries = mLockAfter.getEntries(); 315c9787070bab332b80676b745a44dd8ee4d72073dJim Miller final CharSequence[] values = mLockAfter.getEntryValues(); 316c9787070bab332b80676b745a44dd8ee4d72073dJim Miller int best = 0; 317c9787070bab332b80676b745a44dd8ee4d72073dJim Miller for (int i = 0; i < values.length; i++) { 318c9787070bab332b80676b745a44dd8ee4d72073dJim Miller long timeout = Long.valueOf(values[i].toString()); 319c9787070bab332b80676b745a44dd8ee4d72073dJim Miller if (currentTimeout >= timeout) { 320c9787070bab332b80676b745a44dd8ee4d72073dJim Miller best = i; 321c9787070bab332b80676b745a44dd8ee4d72073dJim Miller } 322c9787070bab332b80676b745a44dd8ee4d72073dJim Miller } 323c9787070bab332b80676b745a44dd8ee4d72073dJim Miller String summary = mLockAfter.getContext() 324c9787070bab332b80676b745a44dd8ee4d72073dJim Miller .getString(R.string.lock_after_timeout_summary, entries[best]); 325c9787070bab332b80676b745a44dd8ee4d72073dJim Miller mLockAfter.setSummary(summary); 326c9787070bab332b80676b745a44dd8ee4d72073dJim Miller } 327c9787070bab332b80676b745a44dd8ee4d72073dJim Miller 32886624a21540e2cd336573a55adb5d3997e4a717dJim Miller private static void disableUnusableTimeouts(ListPreference pref, long maxTimeout) { 32986624a21540e2cd336573a55adb5d3997e4a717dJim Miller final CharSequence[] entries = pref.getEntries(); 33086624a21540e2cd336573a55adb5d3997e4a717dJim Miller final CharSequence[] values = pref.getEntryValues(); 33186624a21540e2cd336573a55adb5d3997e4a717dJim Miller ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>(); 33286624a21540e2cd336573a55adb5d3997e4a717dJim Miller ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>(); 33386624a21540e2cd336573a55adb5d3997e4a717dJim Miller for (int i = 0; i < values.length; i++) { 33486624a21540e2cd336573a55adb5d3997e4a717dJim Miller long timeout = Long.valueOf(values[i].toString()); 33586624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (timeout <= maxTimeout) { 33686624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedEntries.add(entries[i]); 33786624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedValues.add(values[i]); 33886624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 33986624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 34086624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (revisedEntries.size() != entries.length || revisedValues.size() != values.length) { 34186624a21540e2cd336573a55adb5d3997e4a717dJim Miller pref.setEntries( 34286624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedEntries.toArray(new CharSequence[revisedEntries.size()])); 34386624a21540e2cd336573a55adb5d3997e4a717dJim Miller pref.setEntryValues( 34486624a21540e2cd336573a55adb5d3997e4a717dJim Miller revisedValues.toArray(new CharSequence[revisedValues.size()])); 34586624a21540e2cd336573a55adb5d3997e4a717dJim Miller final int userPreference = Integer.valueOf(pref.getValue()); 34686624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (userPreference <= maxTimeout) { 34786624a21540e2cd336573a55adb5d3997e4a717dJim Miller pref.setValue(String.valueOf(userPreference)); 34886624a21540e2cd336573a55adb5d3997e4a717dJim Miller } else { 34986624a21540e2cd336573a55adb5d3997e4a717dJim Miller // There will be no highlighted selection since nothing in the list matches 35086624a21540e2cd336573a55adb5d3997e4a717dJim Miller // maxTimeout. The user can still select anything less than maxTimeout. 35186624a21540e2cd336573a55adb5d3997e4a717dJim Miller // TODO: maybe append maxTimeout to the list and mark selected. 35286624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 35386624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 35486624a21540e2cd336573a55adb5d3997e4a717dJim Miller pref.setEnabled(revisedEntries.size() > 0); 35586624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 35686624a21540e2cd336573a55adb5d3997e4a717dJim Miller 357afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 358d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 360afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 36186624a21540e2cd336573a55adb5d3997e4a717dJim Miller // Make sure we reload the preference hierarchy since some of these settings 36286624a21540e2cd336573a55adb5d3997e4a717dJim Miller // depend on others... 36386624a21540e2cd336573a55adb5d3997e4a717dJim Miller createPreferenceHierarchy(); 36486624a21540e2cd336573a55adb5d3997e4a717dJim Miller 36500d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 366122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (mVisiblePattern != null) { 367122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mVisiblePattern.setChecked(lockPatternUtils.isVisiblePatternEnabled()); 368122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 369122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (mTactileFeedback != null) { 370122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mTactileFeedback.setChecked(lockPatternUtils.isTactileFeedbackEnabled()); 371122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 3727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 3739cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh mShowPassword.setChecked(Settings.System.getInt(getContentResolver(), 374afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TEXT_SHOW_PASSWORD, 1) != 0); 375b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 37602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mCredentialStorage.resume(); 377afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 378afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Preference preference) { 382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String key = preference.getKey(); 383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 38400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 385bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller if (KEY_UNLOCK_SET_OR_CHANGE.equals(key)) { 38617e9e1933055b207473b488595b2887bfcaea32eJim Miller startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment", 38717e9e1933055b207473b488595b2887bfcaea32eJim Miller SET_OR_CHANGE_LOCK_METHOD_REQUEST, null); 388122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } else if (KEY_LOCK_ENABLED.equals(key)) { 38900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setLockPatternEnabled(isToggled(preference)); 390afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_VISIBLE_PATTERN.equals(key)) { 39100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); 392afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) { 39300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setTactileFeedbackEnabled(isToggled(preference)); 394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mShowPassword) { 395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 396afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword.isChecked() ? 1 : 0); 3974bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mNetwork) { 398d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 399d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood LocationManager.NETWORK_PROVIDER, mNetwork.isChecked()); 4004bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mGps) { 401d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood boolean enabled = mGps.isChecked(); 402074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 403d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood LocationManager.GPS_PROVIDER, enabled); 4047f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood if (mAssistedGps != null) { 4057f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setEnabled(enabled); 4067f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood } 407d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood } else if (preference == mAssistedGps) { 408d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood Settings.Secure.putInt(getContentResolver(), Settings.Secure.ASSISTED_GPS_ENABLED, 409d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood mAssistedGps.isChecked() ? 1 : 0); 41036972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } else { 41136972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller // If we didn't handle it, let preferences handle it. 41236972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller return super.onPreferenceTreeClick(preferenceScreen, preference); 413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 4144bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani 41536972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller return true; 416afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 417afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* 419afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Creates toggles for each available location provider 420afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateToggles() { 422f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ContentResolver res = getContentResolver(); 423d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled( 424d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood res, LocationManager.GPS_PROVIDER); 425074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood mNetwork.setChecked(Settings.Secure.isLocationProviderEnabled( 426f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res, LocationManager.NETWORK_PROVIDER)); 427d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood mGps.setChecked(gpsEnabled); 4287f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood if (mAssistedGps != null) { 4297f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setChecked(Settings.Secure.getInt(res, 4307f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood Settings.Secure.ASSISTED_GPS_ENABLED, 2) == 1); 4317f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setEnabled(gpsEnabled); 4327f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood } 433afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 434afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 435afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean isToggled(Preference pref) { 436afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return ((CheckBoxPreference) pref).isChecked(); 437afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 44072ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project * @see #confirmPatternThenDisableAndClear 441afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 442afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 443d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onActivityResult(int requestCode, int resultCode, Intent data) { 444afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 445122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller createPreferenceHierarchy(); 446afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 447f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 44802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private class CredentialStorage implements DialogInterface.OnClickListener, 44902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener, 45002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Preference.OnPreferenceClickListener { 45102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private static final int MINIMUM_PASSWORD_LENGTH = 8; 452a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 4538877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final int TYPE_KEYSTORE = 0; 4548877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final int TYPE_ENCRYPTEDFS = 1; 4558877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 45656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor // Dialog identifiers 45756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_BASE = 0; 45856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_UNLOCK = DLG_BASE + 1; 45956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_PASSWORD = DLG_UNLOCK + 1; 46056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_RESET = DLG_PASSWORD + 1; 46156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_ENABLE_EFS = DLG_RESET + 1; 46256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 463f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood private final KeyStore mKeyStore = KeyStore.getInstance(); 4640bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private int mState; 4650bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private boolean mSubmit = false; 4660bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private boolean mExternal = false; 46702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 46856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private boolean mWillEnableEncryptedFS; 46956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private int mShowingDialog = 0; 4708877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 4718877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Key Store controls 4727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private CheckBoxPreference mAccessCheckBox; 47302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private Preference mInstallButton; 47402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private Preference mPasswordButton; 4757031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Preference mResetButton; 4767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 47756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 4788877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted file system controls 4798877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private CheckBoxPreference mEncryptedFSEnabled; 4808877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 481b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan void resume() { 48202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mState = mKeyStore.test(); 48302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(mState); 484b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 485d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Intent intent = getActivity().getIntent(); 4860bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (!mExternal && intent != null && 4870bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh Credentials.UNLOCK_ACTION.equals(intent.getAction())) { 4880bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh mExternal = true; 4890bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mState == KeyStore.UNINITIALIZED) { 4900bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showPasswordDialog(); 4910bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } else if (mState == KeyStore.LOCKED) { 4920bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showUnlockDialog(); 4930bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } else { 494d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani // TODO: Verify if this is the right way 495d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani SecuritySettings.this.getFragmentManager().popBackStack(); 4960bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } 497d8858c3ee12bfdde1bde60dfe7cdf8bc497cf254Hung-ying Tyan } 49802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 49902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 50002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void initialize(String password) { 50102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.password(password); 50202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(KeyStore.NO_ERROR); 50302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 50402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 50502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void reset() { 50602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.reset(); 50702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(KeyStore.UNINITIALIZED); 5087031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 51002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void lock() { 5119cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh mKeyStore.lock(); 5129cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.LOCKED); 5137031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5147031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 51502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private int unlock(String password) { 51602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.unlock(password); 5179cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return mKeyStore.getLastError(); 5187031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 52002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private int changePassword(String oldPassword, String newPassword) { 52102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.password(oldPassword, newPassword); 5229cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return mKeyStore.getLastError(); 5237031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5247031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 52502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public boolean onPreferenceChange(Preference preference, Object value) { 52602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (preference == mAccessCheckBox) { 527454a0dbf8ff6d638e4ad31e30007bf3099a509ccChia-chi Yeh if ((Boolean) value) { 5280bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showUnlockDialog(); 52902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 53002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh lock(); 53102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 53202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 5338877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } else if (preference == mEncryptedFSEnabled) { 5348877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor Boolean bval = (Boolean)value; 53556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mWillEnableEncryptedFS = bval.booleanValue(); 53656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor showSwitchEncryptedFSDialog(); 53736972bb7e952ca8a7bd8e57e32246d60873d7479Jim Miller } 53856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor return true; 5397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 540a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 54102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public boolean onPreferenceClick(Preference preference) { 54202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (preference == mInstallButton) { 543d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Credentials.getInstance().installFromSdCard(SecuritySettings.this.getActivity()); 54402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (preference == mPasswordButton) { 5450bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showPasswordDialog(); 54602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (preference == mResetButton) { 5470bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showResetDialog(); 54802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 54902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 55002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 55102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 5527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 55402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public void onClick(DialogInterface dialog, int button) { 55556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (mShowingDialog != DLG_ENABLE_EFS) { 55656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mSubmit = (button == DialogInterface.BUTTON_POSITIVE); 55756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (button == DialogInterface.BUTTON_NEUTRAL) { 55856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor reset(); 55956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 56056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else { 56156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (button == DialogInterface.BUTTON_POSITIVE) { 5623352d10f0733eb8b8715ce89346378444fbfe3b2Dan Egnor Intent intent = new Intent("android.intent.action.MASTER_CLEAR"); 5633352d10f0733eb8b8715ce89346378444fbfe3b2Dan Egnor intent.putExtra("enableEFS", mWillEnableEncryptedFS); 564d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().sendBroadcast(intent); 56556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor updatePreferences(mState); 56656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else if (button == DialogInterface.BUTTON_NEGATIVE) { 56756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor // Cancel action 568d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Toast.makeText(SecuritySettings.this.getActivity(), 569d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani R.string.encrypted_fs_cancel_confirm, 57056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor Toast.LENGTH_SHORT).show(); 57156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor updatePreferences(mState); 57256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else { 57356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor // Unknown - should not happen 57456e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor return; 57556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 57602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 5771ddccd07f744344b5248dd5418ee526f26d520dcHung-ying Tyan } 5781ddccd07f744344b5248dd5418ee526f26d520dcHung-ying Tyan 57902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public void onDismiss(DialogInterface dialog) { 580d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani // TODO: 581d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani //if (mSubmit && !isFinishing()) { 582d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani 583d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani if (mSubmit) { 58402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mSubmit = false; 58502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (!checkPassword((Dialog) dialog)) { 5860bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh ((Dialog) dialog).show(); 58702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return; 58802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 58902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 590454a0dbf8ff6d638e4ad31e30007bf3099a509ccChia-chi Yeh updatePreferences(mState); 5910bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mExternal) { 592d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani // TODO: 593d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani // finish(); 5947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 59702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Return true if there is no error. 59802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private boolean checkPassword(Dialog dialog) { 59902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String oldPassword = getText(dialog, R.id.old_password); 60002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String newPassword = getText(dialog, R.id.new_password); 60102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String confirmPassword = getText(dialog, R.id.confirm_password); 602c3eaaad17ebe9a2cbe34b096511c8f06369dadd1Hung-ying Tyan 60302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (oldPassword != null && oldPassword.length() == 0) { 60402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_password_empty); 60502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 60602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword == null) { 60702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return !checkError(dialog, unlock(oldPassword)); 60802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword.length() == 0 || confirmPassword.length() == 0) { 60902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_passwords_empty); 61002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword.length() < MINIMUM_PASSWORD_LENGTH) { 61102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_password_too_short); 61202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (!newPassword.equals(confirmPassword)) { 61302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_passwords_mismatch); 61402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (oldPassword == null) { 61502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh initialize(newPassword); 61602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 61702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 61802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return !checkError(dialog, changePassword(oldPassword, newPassword)); 6197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 62002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 6217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6227031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 62302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Return false if there is no error. 62402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private boolean checkError(Dialog dialog, int error) { 6259cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error == KeyStore.NO_ERROR) { 6269cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.NO_ERROR); 6279cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return false; 6287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6299cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error == KeyStore.UNINITIALIZED) { 6309cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.UNINITIALIZED); 6317031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6339cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error < KeyStore.WRONG_PASSWORD) { 6349cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return false; 6357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6369cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh int count = error - KeyStore.WRONG_PASSWORD + 1; 6379cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (count > 3) { 63802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_wrong_password); 63902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (count == 1) { 64002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_reset_warning); 6417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 64202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_reset_warning_plural, count); 6437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6449cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return true; 6457031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 64702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private String getText(Dialog dialog, int viewId) { 64802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh TextView view = (TextView) dialog.findViewById(viewId); 64902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return (view == null || view.getVisibility() == View.GONE) ? null : 65002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.getText().toString(); 6517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 65302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void showError(Dialog dialog, int stringId, Object... formatArgs) { 65402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh TextView view = (TextView) dialog.findViewById(R.id.error); 65502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (view != null) { 65602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (formatArgs == null || formatArgs.length == 0) { 65702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setText(stringId); 6587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 65902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setText(dialog.getContext().getString(stringId, formatArgs)); 6607031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 66102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setVisibility(View.VISIBLE); 6627031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6639cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh } 664a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 6658877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private void createPreferences(PreferenceCategory category, int type) { 6668877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor switch(type) { 6678877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor case TYPE_KEYSTORE: 668d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mAccessCheckBox = new CheckBoxPreference(SecuritySettings.this.getActivity()); 6698877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setTitle(R.string.credentials_access); 6708877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setSummary(R.string.credentials_access_summary); 6718877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setOnPreferenceChangeListener(this); 6728877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mAccessCheckBox); 6738877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 674d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mInstallButton = new Preference(SecuritySettings.this.getActivity()); 6758877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setTitle(R.string.credentials_install_certificates); 6768877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setSummary(R.string.credentials_install_certificates_summary); 6778877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setOnPreferenceClickListener(this); 6788877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mInstallButton); 6798877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 680d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mPasswordButton = new Preference(SecuritySettings.this.getActivity()); 6818877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setTitle(R.string.credentials_set_password); 6828877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setSummary(R.string.credentials_set_password_summary); 6838877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setOnPreferenceClickListener(this); 6848877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mPasswordButton); 6858877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 686d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mResetButton = new Preference(SecuritySettings.this.getActivity()); 6878877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setTitle(R.string.credentials_reset); 6888877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setSummary(R.string.credentials_reset_summary); 6898877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setOnPreferenceClickListener(this); 6908877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mResetButton); 6918877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor break; 6928877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 6938877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor case TYPE_ENCRYPTEDFS: 694d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani mEncryptedFSEnabled = new CheckBoxPreference(SecuritySettings.this 695d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani .getActivity()); 6968877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setTitle(R.string.encrypted_fs_enable); 6978877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setSummary(R.string.encrypted_fs_enable_summary); 6988877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setOnPreferenceChangeListener(this); 699c5a73328f16c9000f2256207cb675e2fb5f0fc88Oscar Montemayor // category.addPreference(mEncryptedFSEnabled); 7008877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor break; 7018877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } 70202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 7039cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh 70402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void updatePreferences(int state) { 70502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mAccessCheckBox.setChecked(state == KeyStore.NO_ERROR); 7068877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor boolean encFSEnabled = SystemProperties.getBoolean(PROPERTY_EFS_ENABLED, 7078877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor false); 7088877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setEnabled((!encFSEnabled) && (state != KeyStore.UNINITIALIZED)); 7098877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setEnabled((state != KeyStore.UNINITIALIZED) && (!encFSEnabled)); 7108877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 7118877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted File system preferences 7128877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setChecked(encFSEnabled); 71302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 71402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Show a toast message if the state is changed. 715446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh if (mState == state) { 716446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh return; 717446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh } else if (state == KeyStore.NO_ERROR) { 718d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Toast.makeText(SecuritySettings.this.getActivity(), R.string.credentials_enabled, 71902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 72002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (state == KeyStore.UNINITIALIZED) { 721d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Toast.makeText(SecuritySettings.this.getActivity(), R.string.credentials_erased, 72202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 72302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (state == KeyStore.LOCKED) { 724d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Toast.makeText(SecuritySettings.this.getActivity(), R.string.credentials_disabled, 72502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 72602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 72702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mState = state; 7287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7300bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showUnlockDialog() { 731d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani View view = View.inflate(SecuritySettings.this.getActivity(), 73202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh R.layout.credentials_unlock_dialog, null); 7337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7340bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh // Show extra hint only when the action comes from outside. 7350bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mExternal) { 73602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.hint).setVisibility(View.VISIBLE); 7370a59b500147cc038541f6f2897de7e28c15a12c1Hung-ying Tyan } 7380a59b500147cc038541f6f2897de7e28c15a12c1Hung-ying Tyan 739d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Dialog dialog = new AlertDialog.Builder(SecuritySettings.this.getActivity()) 74002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setView(view) 74102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setTitle(R.string.credentials_unlock) 7427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 7437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 7447031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 74502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh dialog.setOnDismissListener(this); 74656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_UNLOCK; 7470bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh dialog.show(); 7487031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7500bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showPasswordDialog() { 751d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani View view = View.inflate(SecuritySettings.this.getActivity(), 75202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh R.layout.credentials_password_dialog, null); 7537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 75402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (mState == KeyStore.UNINITIALIZED) { 75502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.hint).setVisibility(View.VISIBLE); 75602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 75702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.old_password_prompt).setVisibility(View.VISIBLE); 75802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.old_password).setVisibility(View.VISIBLE); 7597031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7607031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 761d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani Dialog dialog = new AlertDialog.Builder(SecuritySettings.this.getActivity()) 76202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setView(view) 76302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setTitle(R.string.credentials_set_password) 7647031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 7657031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 7667031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 76702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh dialog.setOnDismissListener(this); 76856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_PASSWORD; 7690bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh dialog.show(); 7707031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7720bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showResetDialog() { 77356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_RESET; 774d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani new AlertDialog.Builder(SecuritySettings.this.getActivity()) 7757031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setTitle(android.R.string.dialog_alert_title) 7767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 77702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setMessage(R.string.credentials_reset_hint) 778d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani .setNeutralButton(getResources().getString(android.R.string.ok), this) 779d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani .setNegativeButton(getResources().getString(android.R.string.cancel), this) 7800bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh .create().show(); 7817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 78256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 78356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private void showSwitchEncryptedFSDialog() { 784d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani AlertDialog.Builder builder = new AlertDialog.Builder(SecuritySettings.this 785d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani .getActivity()) 78656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setCancelable(false) 78756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setTitle(R.string.encrypted_fs_alert_dialog_title); 78856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 78956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_ENABLE_EFS; 79056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (mWillEnableEncryptedFS) { 79156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor builder.setMessage(R.string.encrypted_fs_enable_dialog) 79256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setPositiveButton(R.string.encrypted_fs_enable_button, this) 79356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setNegativeButton(R.string.encrypted_fs_cancel_button, this) 79456e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .create().show(); 79556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else { 79656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor builder.setMessage(R.string.encrypted_fs_disable_dialog) 79756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setPositiveButton(R.string.encrypted_fs_disable_button, this) 79856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setNegativeButton(R.string.encrypted_fs_cancel_button, this) 79956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .create().show(); 80056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 80156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 8027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 80386624a21540e2cd336573a55adb5d3997e4a717dJim Miller 80486624a21540e2cd336573a55adb5d3997e4a717dJim Miller public boolean onPreferenceChange(Preference preference, Object value) { 80586624a21540e2cd336573a55adb5d3997e4a717dJim Miller if (preference == mLockAfter) { 80686624a21540e2cd336573a55adb5d3997e4a717dJim Miller int lockAfter = Integer.parseInt((String) value); 80786624a21540e2cd336573a55adb5d3997e4a717dJim Miller try { 80886624a21540e2cd336573a55adb5d3997e4a717dJim Miller Settings.Secure.putInt(getContentResolver(), 80986624a21540e2cd336573a55adb5d3997e4a717dJim Miller Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT, lockAfter); 81086624a21540e2cd336573a55adb5d3997e4a717dJim Miller } catch (NumberFormatException e) { 81186624a21540e2cd336573a55adb5d3997e4a717dJim Miller Log.e("SecuritySettings", "could not persist lockAfter timeout setting", e); 81286624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 813c9787070bab332b80676b745a44dd8ee4d72073dJim Miller updateLockAfterPreferenceSummary(); 814f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood } else if (preference == mUseLocation) { 815f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood boolean newValue = value == null ? false : (Boolean) value; 816f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood GoogleLocationSettingHelper.setUseLocationForServices(getActivity(), newValue); 817f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood // We don't want to change the value immediately here, since the user may click 818f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood // disagree in the dialog that pops up. When the activity we just launched exits, this 819f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood // activity will be restated and the new value re-read, so the checkbox will get its 820f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood // new value then. 821f8b25796f0ce1096a95cae2b51d07d96e148277cMathew Inwood return false; 82286624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 82386624a21540e2cd336573a55adb5d3997e4a717dJim Miller return true; 82486624a21540e2cd336573a55adb5d3997e4a717dJim Miller } 825afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 826