SecuritySettings.java revision 57fbf694a53afb9c1924d81272179dceb3acfa4d
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 2056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayorimport java.util.Observable; 2156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayorimport java.util.Observer; 2256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.Activity; 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; 358877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayorimport android.os.SystemProperties; 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 3700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Millerimport android.preference.ListPreference; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity; 40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceCategory; 4100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Millerimport android.preference.PreferenceManager; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 4300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Millerimport android.preference.Preference.OnPreferenceChangeListener; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 459cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yehimport android.security.Credentials; 469cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yehimport android.security.KeyStore; 4756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayorimport android.telephony.TelephonyManager; 48d8858c3ee12bfdde1bde60dfe7cdf8bc497cf254Hung-ying Tyanimport android.util.Log; 497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.view.View; 50f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.widget.TextView; 517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.widget.Toast; 52f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 53f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport com.android.internal.widget.LockPatternUtils; 545ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Gesture lock pattern settings. 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 58e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasanipublic class SecuritySettings extends PreferenceActivity { 59bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller private static final String KEY_UNLOCK_SET_OR_CHANGE = "unlock_set_or_change"; 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Lock Settings 6200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private static final String PACKAGE = "com.android.settings"; 6300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private static final String ICC_LOCK_SETTINGS = PACKAGE + ".IccLockSettings"; 647031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_LOCK_ENABLED = "lockenabled"; 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; 679e61b9fe59aca9ac521792f4f89e5a270333b030Jim Miller private static final String KEY_TACTILE_FEEDBACK_ENABLED = "unlock_tactile_feedback"; 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 698877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted File Systems constants 708877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final String PROPERTY_EFS_ENABLED = "persist.security.efs.enabled"; 718877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final String PROPERTY_EFS_TRANSITION = "persist.security.efs.trans"; 728877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mVisiblePattern; 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mTactileFeedback; 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mShowPassword; 777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Location Settings 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_NETWORK = "location_network"; 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_GPS = "location_gps"; 81d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood private static final String ASSISTED_GPS = "assisted_gps"; 82bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123; 8347d380f1e6c823cea444004cb799d4c791145cc6Jim Miller 847031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 8502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private CredentialStorage mCredentialStorage = new CredentialStorage(); 867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 878877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted file system 888877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private CheckBoxPreference mEncryptedFSEnabled; 898877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mNetwork; 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mGps; 92d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood private CheckBoxPreference mAssistedGps; 9372ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project 94abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn DevicePolicyManager mDPM; 95122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 965ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // These provide support for receiving notification when Location Manager settings change. 975ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // This is necessary because the Network Location Provider can change settings 985ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // if the user does not confirm enabling the provider. 995ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private ContentQueryMap mContentQueryMap; 10000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private ChooseLockSettingsHelper mChooseLockSettingsHelper; 101122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller private LockPatternUtils mLockPatternUtils; 1025ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private final class SettingsObserver implements Observer { 1035ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood public void update(Observable o, Object arg) { 1045ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood updateToggles(); 1055ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1065ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1075ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 111122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 112122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mLockPatternUtils = new LockPatternUtils(this); 113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 114abc3dc64cf61c9f5c28b6f2640b221d63cb86a0aDianne Hackborn mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); 115122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 11600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this); 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project createPreferenceHierarchy(); 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateToggles(); 1215ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 1225ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // listen for Location Manager settings changes 1235ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood Cursor settingsCursor = getContentResolver().query(Settings.Secure.CONTENT_URI, null, 1245ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood "(" + Settings.System.NAME + "=?)", 1255ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED}, 1265ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood null); 1275ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null); 1285ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood mContentQueryMap.addObserver(new SettingsObserver()); 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PreferenceScreen createPreferenceHierarchy() { 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen root = this.getPreferenceScreen(); 133122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (root != null) { 134122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller root.removeAll(); 135122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 136122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller addPreferencesFromResource(R.xml.security_settings); 137122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller root = this.getPreferenceScreen(); 138122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 139122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK); 140122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS); 141122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mAssistedGps = (CheckBoxPreference) getPreferenceScreen().findPreference(ASSISTED_GPS); 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 14300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller PreferenceManager pm = getPreferenceManager(); 14400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 145122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller // Lock screen 146122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (!mLockPatternUtils.isSecure()) { 147122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller addPreferencesFromResource(R.xml.security_settings_chooser); 148122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } else { 149af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) { 150af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 151af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller addPreferencesFromResource(R.xml.security_settings_pattern); 152af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 153af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 154af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller addPreferencesFromResource(R.xml.security_settings_pin); 155af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 156af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 157af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 15857fbf694a53afb9c1924d81272179dceb3acfa4dKonstantin Lopyrev case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 159af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller addPreferencesFromResource(R.xml.security_settings_password); 160af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller break; 16100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 162122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 163122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller 164bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller // set or change current. Should be common to all unlock preference screens 165bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller // mSetOrChange = (PreferenceScreen) pm.findPreference(KEY_UNLOCK_SET_OR_CHANGE); 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // visible pattern 16800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller mVisiblePattern = (CheckBoxPreference) pm.findPreference(KEY_VISIBLE_PATTERN); 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 170122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller // tactile feedback. Should be common to all unlock preference screens. 17100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller mTactileFeedback = (CheckBoxPreference) pm.findPreference(KEY_TACTILE_FEEDBACK_ENABLED); 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 173386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang int activePhoneType = TelephonyManager.getDefault().getPhoneType(); 174386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 175386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // do not display SIM lock for CDMA phone 176386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang if (TelephonyManager.PHONE_TYPE_CDMA != activePhoneType) 177386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang { 178386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang PreferenceScreen simLockPreferences = getPreferenceManager() 179386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang .createPreferenceScreen(this); 180386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockPreferences.setTitle(R.string.sim_lock_settings_category); 181386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // Intent to launch SIM lock settings 18200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller simLockPreferences.setIntent(new Intent().setClassName(PACKAGE, ICC_LOCK_SETTINGS)); 183386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang PreferenceCategory simLockCat = new PreferenceCategory(this); 184386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.setTitle(R.string.sim_lock_settings_title); 185386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang root.addPreference(simLockCat); 186386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.addPreference(simLockPreferences); 187386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Passwords 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory passwordsCat = new PreferenceCategory(this); 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.setTitle(R.string.security_passwords_title); 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(passwordsCat); 1937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference showPassword = mShowPassword = new CheckBoxPreference(this); 195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setKey("show_password"); 196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setTitle(R.string.show_password); 197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setSummary(R.string.show_password_summary); 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setPersistent(false); 199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.addPreference(showPassword); 2007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 201feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn // Device policies 202feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn PreferenceCategory devicePoliciesCat = new PreferenceCategory(this); 203feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn devicePoliciesCat.setTitle(R.string.device_admin_title); 204feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn root.addPreference(devicePoliciesCat); 205feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn 206feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn Preference deviceAdminButton = new Preference(this); 207feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn deviceAdminButton.setTitle(R.string.manage_device_admin); 208feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn deviceAdminButton.setSummary(R.string.manage_device_admin_summary); 209feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn Intent deviceAdminIntent = new Intent(); 210feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn deviceAdminIntent.setClass(this, DeviceAdminSettings.class); 211feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn deviceAdminButton.setIntent(deviceAdminIntent); 212feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn devicePoliciesCat.addPreference(deviceAdminButton); 213feff65213231ba6a0f6185f98e660042b5b14595Dianne Hackborn 2147031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 21502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh PreferenceCategory credentialsCat = new PreferenceCategory(this); 21602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh credentialsCat.setTitle(R.string.credentials_category); 21702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh root.addPreference(credentialsCat); 2188877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mCredentialStorage.createPreferences(credentialsCat, CredentialStorage.TYPE_KEYSTORE); 2198877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 2208877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // File System Encryption 2218877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor PreferenceCategory encryptedfsCat = new PreferenceCategory(this); 2228877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor encryptedfsCat.setTitle(R.string.encrypted_fs_category); 223c5a73328f16c9000f2256207cb675e2fb5f0fc88Oscar Montemayor //root.addPreference(encryptedfsCat); 2248877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mCredentialStorage.createPreferences(encryptedfsCat, CredentialStorage.TYPE_ENCRYPTEDFS); 225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return root; 226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 23200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 233122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (mVisiblePattern != null) { 234122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mVisiblePattern.setChecked(lockPatternUtils.isVisiblePatternEnabled()); 235122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 236122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller if (mTactileFeedback != null) { 237122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller mTactileFeedback.setChecked(lockPatternUtils.isTactileFeedbackEnabled()); 238122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } 2397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 2409cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh mShowPassword.setChecked(Settings.System.getInt(getContentResolver(), 241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TEXT_SHOW_PASSWORD, 1) != 0); 242b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 24302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mCredentialStorage.resume(); 244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Preference preference) { 249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String key = preference.getKey(); 250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 25100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); 252bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller if (KEY_UNLOCK_SET_OR_CHANGE.equals(key)) { 253bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller Intent intent = new Intent(this, ChooseLockGeneric.class); 254bbb4afa19f75694c585506b0c091372d60e07ca7Jim Miller startActivityForResult(intent, SET_OR_CHANGE_LOCK_METHOD_REQUEST); 255122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller } else if (KEY_LOCK_ENABLED.equals(key)) { 25600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setLockPatternEnabled(isToggled(preference)); 257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_VISIBLE_PATTERN.equals(key)) { 25800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) { 26000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller lockPatternUtils.setTactileFeedbackEnabled(isToggled(preference)); 261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mShowPassword) { 262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword.isChecked() ? 1 : 0); 2644bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mNetwork) { 265d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 266d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood LocationManager.NETWORK_PROVIDER, mNetwork.isChecked()); 2674bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mGps) { 268d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood boolean enabled = mGps.isChecked(); 269074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 270d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood LocationManager.GPS_PROVIDER, enabled); 2717f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood if (mAssistedGps != null) { 2727f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setEnabled(enabled); 2737f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood } 274d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood } else if (preference == mAssistedGps) { 275d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood Settings.Secure.putInt(getContentResolver(), Settings.Secure.ASSISTED_GPS_ENABLED, 276d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood mAssistedGps.isChecked() ? 1 : 0); 277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2784bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani 279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* 283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Creates toggles for each available location provider 284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateToggles() { 286f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ContentResolver res = getContentResolver(); 287d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled( 288d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood res, LocationManager.GPS_PROVIDER); 289074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood mNetwork.setChecked(Settings.Secure.isLocationProviderEnabled( 290f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res, LocationManager.NETWORK_PROVIDER)); 291d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood mGps.setChecked(gpsEnabled); 2927f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood if (mAssistedGps != null) { 2937f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setChecked(Settings.Secure.getInt(res, 2947f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood Settings.Secure.ASSISTED_GPS_ENABLED, 2) == 1); 2957f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setEnabled(gpsEnabled); 2967f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood } 297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean isToggled(Preference pref) { 300afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return ((CheckBoxPreference) pref).isChecked(); 301afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 302afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 303afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 30472ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project * @see #confirmPatternThenDisableAndClear 305afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 307f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani protected void onActivityResult(int requestCode, int resultCode, Intent data) { 308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 309122b6c85a9bc7076eacc388142f8c4fccc5462c9Jim Miller createPreferenceHierarchy(); 310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 311f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 31202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private class CredentialStorage implements DialogInterface.OnClickListener, 31302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener, 31402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Preference.OnPreferenceClickListener { 31502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private static final int MINIMUM_PASSWORD_LENGTH = 8; 316a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 3178877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final int TYPE_KEYSTORE = 0; 3188877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final int TYPE_ENCRYPTEDFS = 1; 3198877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 32056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor // Dialog identifiers 32156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_BASE = 0; 32256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_UNLOCK = DLG_BASE + 1; 32356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_PASSWORD = DLG_UNLOCK + 1; 32456e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_RESET = DLG_PASSWORD + 1; 32556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private static final int DLG_ENABLE_EFS = DLG_RESET + 1; 32656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 3279cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh private KeyStore mKeyStore = KeyStore.getInstance(); 3280bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private int mState; 3290bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private boolean mSubmit = false; 3300bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private boolean mExternal = false; 33102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 33256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private boolean mWillEnableEncryptedFS; 33356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private int mShowingDialog = 0; 3348877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 3358877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Key Store controls 3367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private CheckBoxPreference mAccessCheckBox; 33702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private Preference mInstallButton; 33802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private Preference mPasswordButton; 3397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Preference mResetButton; 3407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 34156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 3428877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted file system controls 3438877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private CheckBoxPreference mEncryptedFSEnabled; 3448877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 345b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan void resume() { 34602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mState = mKeyStore.test(); 34702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(mState); 348b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 3490bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh Intent intent = getIntent(); 3500bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (!mExternal && intent != null && 3510bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh Credentials.UNLOCK_ACTION.equals(intent.getAction())) { 3520bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh mExternal = true; 3530bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mState == KeyStore.UNINITIALIZED) { 3540bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showPasswordDialog(); 3550bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } else if (mState == KeyStore.LOCKED) { 3560bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showUnlockDialog(); 3570bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } else { 3580bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh finish(); 3590bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } 360d8858c3ee12bfdde1bde60dfe7cdf8bc497cf254Hung-ying Tyan } 36102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 36202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 36302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void initialize(String password) { 36402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.password(password); 36502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(KeyStore.NO_ERROR); 36602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 36702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 36802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void reset() { 36902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.reset(); 37002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(KeyStore.UNINITIALIZED); 3717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 3727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 37302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void lock() { 3749cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh mKeyStore.lock(); 3759cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.LOCKED); 3767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 3777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 37802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private int unlock(String password) { 37902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.unlock(password); 3809cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return mKeyStore.getLastError(); 3817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 3827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 38302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private int changePassword(String oldPassword, String newPassword) { 38402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.password(oldPassword, newPassword); 3859cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return mKeyStore.getLastError(); 3867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 3877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 38802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public boolean onPreferenceChange(Preference preference, Object value) { 38902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (preference == mAccessCheckBox) { 390454a0dbf8ff6d638e4ad31e30007bf3099a509ccChia-chi Yeh if ((Boolean) value) { 3910bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showUnlockDialog(); 39202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 39302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh lock(); 39402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 39502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 3968877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } else if (preference == mEncryptedFSEnabled) { 3978877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor Boolean bval = (Boolean)value; 39856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mWillEnableEncryptedFS = bval.booleanValue(); 39956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor showSwitchEncryptedFSDialog(); 40002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 40156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor return true; 4027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 403a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 40402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public boolean onPreferenceClick(Preference preference) { 40502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (preference == mInstallButton) { 40602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Credentials.getInstance().installFromSdCard(SecuritySettings.this); 40702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (preference == mPasswordButton) { 4080bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showPasswordDialog(); 40902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (preference == mResetButton) { 4100bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showResetDialog(); 41102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 41202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 41302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 41402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 4157031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4167031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 41702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public void onClick(DialogInterface dialog, int button) { 41856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (mShowingDialog != DLG_ENABLE_EFS) { 41956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mSubmit = (button == DialogInterface.BUTTON_POSITIVE); 42056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (button == DialogInterface.BUTTON_NEUTRAL) { 42156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor reset(); 42256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 42356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else { 42456e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (button == DialogInterface.BUTTON_POSITIVE) { 4253352d10f0733eb8b8715ce89346378444fbfe3b2Dan Egnor Intent intent = new Intent("android.intent.action.MASTER_CLEAR"); 4263352d10f0733eb8b8715ce89346378444fbfe3b2Dan Egnor intent.putExtra("enableEFS", mWillEnableEncryptedFS); 4273352d10f0733eb8b8715ce89346378444fbfe3b2Dan Egnor sendBroadcast(intent); 42856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor updatePreferences(mState); 42956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else if (button == DialogInterface.BUTTON_NEGATIVE) { 43056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor // Cancel action 43156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor Toast.makeText(SecuritySettings.this, R.string.encrypted_fs_cancel_confirm, 43256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor Toast.LENGTH_SHORT).show(); 43356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor updatePreferences(mState); 43456e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else { 43556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor // Unknown - should not happen 43656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor return; 43756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 43802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 4391ddccd07f744344b5248dd5418ee526f26d520dcHung-ying Tyan } 4401ddccd07f744344b5248dd5418ee526f26d520dcHung-ying Tyan 44102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public void onDismiss(DialogInterface dialog) { 44202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (mSubmit && !isFinishing()) { 44302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mSubmit = false; 44402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (!checkPassword((Dialog) dialog)) { 4450bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh ((Dialog) dialog).show(); 44602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return; 44702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 44802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 449454a0dbf8ff6d638e4ad31e30007bf3099a509ccChia-chi Yeh updatePreferences(mState); 4500bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mExternal) { 45102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh finish(); 4527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4547031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 45502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Return true if there is no error. 45602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private boolean checkPassword(Dialog dialog) { 45702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String oldPassword = getText(dialog, R.id.old_password); 45802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String newPassword = getText(dialog, R.id.new_password); 45902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String confirmPassword = getText(dialog, R.id.confirm_password); 460c3eaaad17ebe9a2cbe34b096511c8f06369dadd1Hung-ying Tyan 46102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (oldPassword != null && oldPassword.length() == 0) { 46202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_password_empty); 46302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 46402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword == null) { 46502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return !checkError(dialog, unlock(oldPassword)); 46602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword.length() == 0 || confirmPassword.length() == 0) { 46702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_passwords_empty); 46802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword.length() < MINIMUM_PASSWORD_LENGTH) { 46902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_password_too_short); 47002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (!newPassword.equals(confirmPassword)) { 47102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_passwords_mismatch); 47202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (oldPassword == null) { 47302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh initialize(newPassword); 47402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 47502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 47602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return !checkError(dialog, changePassword(oldPassword, newPassword)); 4777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 47802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 4797031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4807031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 48102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Return false if there is no error. 48202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private boolean checkError(Dialog dialog, int error) { 4839cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error == KeyStore.NO_ERROR) { 4849cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.NO_ERROR); 4859cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return false; 4867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4879cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error == KeyStore.UNINITIALIZED) { 4889cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.UNINITIALIZED); 4897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 4907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4919cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error < KeyStore.WRONG_PASSWORD) { 4929cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return false; 4937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4949cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh int count = error - KeyStore.WRONG_PASSWORD + 1; 4959cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (count > 3) { 49602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_wrong_password); 49702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (count == 1) { 49802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_reset_warning); 4997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 50002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_reset_warning_plural, count); 5017031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5029cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return true; 5037031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5047031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 50502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private String getText(Dialog dialog, int viewId) { 50602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh TextView view = (TextView) dialog.findViewById(viewId); 50702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return (view == null || view.getVisibility() == View.GONE) ? null : 50802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.getText().toString(); 5097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 51102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void showError(Dialog dialog, int stringId, Object... formatArgs) { 51202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh TextView view = (TextView) dialog.findViewById(R.id.error); 51302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (view != null) { 51402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (formatArgs == null || formatArgs.length == 0) { 51502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setText(stringId); 5167031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 51702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setText(dialog.getContext().getString(stringId, formatArgs)); 5187031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 51902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setVisibility(View.VISIBLE); 5207031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5219cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh } 522a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 5238877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private void createPreferences(PreferenceCategory category, int type) { 5248877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor switch(type) { 5258877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor case TYPE_KEYSTORE: 5268877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox = new CheckBoxPreference(SecuritySettings.this); 5278877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setTitle(R.string.credentials_access); 5288877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setSummary(R.string.credentials_access_summary); 5298877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setOnPreferenceChangeListener(this); 5308877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mAccessCheckBox); 5318877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5328877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton = new Preference(SecuritySettings.this); 5338877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setTitle(R.string.credentials_install_certificates); 5348877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setSummary(R.string.credentials_install_certificates_summary); 5358877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setOnPreferenceClickListener(this); 5368877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mInstallButton); 5378877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5388877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton = new Preference(SecuritySettings.this); 5398877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setTitle(R.string.credentials_set_password); 5408877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setSummary(R.string.credentials_set_password_summary); 5418877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setOnPreferenceClickListener(this); 5428877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mPasswordButton); 5438877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5448877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton = new Preference(SecuritySettings.this); 5458877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setTitle(R.string.credentials_reset); 5468877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setSummary(R.string.credentials_reset_summary); 5478877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setOnPreferenceClickListener(this); 5488877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mResetButton); 5498877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor break; 5508877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5518877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor case TYPE_ENCRYPTEDFS: 5528877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled = new CheckBoxPreference(SecuritySettings.this); 5538877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setTitle(R.string.encrypted_fs_enable); 5548877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setSummary(R.string.encrypted_fs_enable_summary); 5558877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setOnPreferenceChangeListener(this); 556c5a73328f16c9000f2256207cb675e2fb5f0fc88Oscar Montemayor // category.addPreference(mEncryptedFSEnabled); 5578877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor break; 5588877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } 55902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 5609cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh 56102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void updatePreferences(int state) { 56202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mAccessCheckBox.setChecked(state == KeyStore.NO_ERROR); 5638877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor boolean encFSEnabled = SystemProperties.getBoolean(PROPERTY_EFS_ENABLED, 5648877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor false); 5658877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setEnabled((!encFSEnabled) && (state != KeyStore.UNINITIALIZED)); 5668877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setEnabled((state != KeyStore.UNINITIALIZED) && (!encFSEnabled)); 5678877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5688877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted File system preferences 5698877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setChecked(encFSEnabled); 57002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 57102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Show a toast message if the state is changed. 572446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh if (mState == state) { 573446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh return; 574446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh } else if (state == KeyStore.NO_ERROR) { 57502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.makeText(SecuritySettings.this, R.string.credentials_enabled, 57602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 57702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (state == KeyStore.UNINITIALIZED) { 57802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.makeText(SecuritySettings.this, R.string.credentials_erased, 57902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 58002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (state == KeyStore.LOCKED) { 58102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.makeText(SecuritySettings.this, R.string.credentials_disabled, 58202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 58302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 58402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mState = state; 5857031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5870bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showUnlockDialog() { 58802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh View view = View.inflate(SecuritySettings.this, 58902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh R.layout.credentials_unlock_dialog, null); 5907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5910bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh // Show extra hint only when the action comes from outside. 5920bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mExternal) { 59302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.hint).setVisibility(View.VISIBLE); 5940a59b500147cc038541f6f2897de7e28c15a12c1Hung-ying Tyan } 5950a59b500147cc038541f6f2897de7e28c15a12c1Hung-ying Tyan 59602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Dialog dialog = new AlertDialog.Builder(SecuritySettings.this) 59702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setView(view) 59802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setTitle(R.string.credentials_unlock) 5997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 6007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 6017031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 60202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh dialog.setOnDismissListener(this); 60356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_UNLOCK; 6040bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh dialog.show(); 6057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6070bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showPasswordDialog() { 60802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh View view = View.inflate(SecuritySettings.this, 60902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh R.layout.credentials_password_dialog, null); 6107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 61102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (mState == KeyStore.UNINITIALIZED) { 61202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.hint).setVisibility(View.VISIBLE); 61302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 61402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.old_password_prompt).setVisibility(View.VISIBLE); 61502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.old_password).setVisibility(View.VISIBLE); 6167031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6177031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 61802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Dialog dialog = new AlertDialog.Builder(SecuritySettings.this) 61902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setView(view) 62002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setTitle(R.string.credentials_set_password) 6217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 6227031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 6237031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 62402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh dialog.setOnDismissListener(this); 62556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_PASSWORD; 6260bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh dialog.show(); 6277031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6290bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showResetDialog() { 63056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_RESET; 6310bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh new AlertDialog.Builder(SecuritySettings.this) 6327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setTitle(android.R.string.dialog_alert_title) 6337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 63402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setMessage(R.string.credentials_reset_hint) 63502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setNeutralButton(getString(android.R.string.ok), this) 6367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(getString(android.R.string.cancel), this) 6370bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh .create().show(); 6387031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 63956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 64056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor private void showSwitchEncryptedFSDialog() { 64156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor AlertDialog.Builder builder = new AlertDialog.Builder(SecuritySettings.this) 64256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setCancelable(false) 64356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setTitle(R.string.encrypted_fs_alert_dialog_title); 64456e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor 64556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor mShowingDialog = DLG_ENABLE_EFS; 64656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor if (mWillEnableEncryptedFS) { 64756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor builder.setMessage(R.string.encrypted_fs_enable_dialog) 64856e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setPositiveButton(R.string.encrypted_fs_enable_button, this) 64956e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setNegativeButton(R.string.encrypted_fs_cancel_button, this) 65056e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .create().show(); 65156e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } else { 65256e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor builder.setMessage(R.string.encrypted_fs_disable_dialog) 65356e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setPositiveButton(R.string.encrypted_fs_disable_button, this) 65456e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .setNegativeButton(R.string.encrypted_fs_cancel_button, this) 65556e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor .create().show(); 65656e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 65756e1526114639dd7f19ef0aa90defd10756bf22dOscar Montemayor } 6587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 659afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 660