SecuritySettings.java revision 8877f74901b456d45aaf7a47f6d2208fab9e283c
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 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.Activity; 21f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.app.AlertDialog; 22f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.app.Dialog; 235ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport android.content.ContentQueryMap; 24f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.content.ContentResolver; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 26f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.content.DialogInterface; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 285ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport android.database.Cursor; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.location.LocationManager; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 318877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayorimport android.os.SystemProperties; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceCategory; 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 389cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yehimport android.security.Credentials; 399cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yehimport android.security.KeyStore; 40d8858c3ee12bfdde1bde60dfe7cdf8bc497cf254Hung-ying Tyanimport android.util.Log; 417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.view.View; 42f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.widget.TextView; 437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.widget.Toast; 44f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 45f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport com.android.internal.widget.LockPatternUtils; 46386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhangimport android.telephony.TelephonyManager; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 485ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport java.util.Observable; 495ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport java.util.Observer; 505ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Gesture lock pattern settings. 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 54e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasanipublic class SecuritySettings extends PreferenceActivity { 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Lock Settings 577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_LOCK_ENABLED = "lockenabled"; 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_TACTILE_FEEDBACK_ENABLED = "tactilefeedback"; 6172ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project private static final int CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE = 55; 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 638877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted File Systems constants 648877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final String PROPERTY_EFS_ENABLED = "persist.security.efs.enabled"; 658877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final String PROPERTY_EFS_TRANSITION = "persist.security.efs.trans"; 668877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 67f411c9625c70bf9716805f0f1b146f07f4eca678Amith Yamasani private static final String PREFS_NAME = "location_prefs"; 68f411c9625c70bf9716805f0f1b146f07f4eca678Amith Yamasani private static final String PREFS_USE_LOCATION = "use_location"; 69f411c9625c70bf9716805f0f1b146f07f4eca678Amith Yamasani 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private LockPatternUtils mLockPatternUtils; 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mLockEnabled; 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mVisiblePattern; 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mTactileFeedback; 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mChoosePattern; 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mShowPassword; 777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Location Settings 79f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String LOCATION_CATEGORY = "location_category"; 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_NETWORK = "location_network"; 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_GPS = "location_gps"; 82d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood private static final String ASSISTED_GPS = "assisted_gps"; 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 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 945ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // These provide support for receiving notification when Location Manager settings change. 955ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // This is necessary because the Network Location Provider can change settings 965ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // if the user does not confirm enabling the provider. 975ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private ContentQueryMap mContentQueryMap; 985ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private final class SettingsObserver implements Observer { 995ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood public void update(Observable o, Object arg) { 1005ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood updateToggles(); 1015ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1025ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1035ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.security_settings); 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils = new LockPatternUtils(getContentResolver()); 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project createPreferenceHierarchy(); 112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK); 114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS); 115d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood mAssistedGps = (CheckBoxPreference) getPreferenceScreen().findPreference(ASSISTED_GPS); 116e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateToggles(); 1185ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 1195ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // listen for Location Manager settings changes 1205ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood Cursor settingsCursor = getContentResolver().query(Settings.Secure.CONTENT_URI, null, 1215ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood "(" + Settings.System.NAME + "=?)", 1225ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED}, 1235ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood null); 1245ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null); 1255ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood mContentQueryMap.addObserver(new SettingsObserver()); 126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PreferenceScreen createPreferenceHierarchy() { 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Root 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen root = this.getPreferenceScreen(); 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Inline preferences 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory inlinePrefCat = new PreferenceCategory(this); 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.setTitle(R.string.lock_settings_title); 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(inlinePrefCat); 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 137e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani // change pattern lock 138e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani Intent intent = new Intent(); 139e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani intent.setClassName("com.android.settings", 140e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani "com.android.settings.ChooseLockPatternTutorial"); 141e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani mChoosePattern = getPreferenceManager().createPreferenceScreen(this); 142e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani mChoosePattern.setIntent(intent); 143e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani inlinePrefCat.addPreference(mChoosePattern); 144e65c943f974966e21c6f18dc9a95107ea1f07631Amith Yamasani 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // autolock toggle 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled = new LockEnabledPref(this); 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setTitle(R.string.lockpattern_settings_enable_title); 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setSummary(R.string.lockpattern_settings_enable_summary); 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setKey(KEY_LOCK_ENABLED); 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mLockEnabled); 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // visible pattern 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern = new CheckBoxPreference(this); 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setKey(KEY_VISIBLE_PATTERN); 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setTitle(R.string.lockpattern_settings_enable_visible_pattern_title); 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mVisiblePattern); 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // tactile feedback 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback = new CheckBoxPreference(this); 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setKey(KEY_TACTILE_FEEDBACK_ENABLED); 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setTitle(R.string.lockpattern_settings_enable_tactile_feedback_title); 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mTactileFeedback); 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 164386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang int activePhoneType = TelephonyManager.getDefault().getPhoneType(); 165386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 166386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // do not display SIM lock for CDMA phone 167386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang if (TelephonyManager.PHONE_TYPE_CDMA != activePhoneType) 168386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang { 169386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang PreferenceScreen simLockPreferences = getPreferenceManager() 170386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang .createPreferenceScreen(this); 171386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockPreferences.setTitle(R.string.sim_lock_settings_category); 172386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // Intent to launch SIM lock settings 173386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang intent = new Intent(); 174386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang intent.setClassName("com.android.settings", "com.android.settings.IccLockSettings"); 175386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockPreferences.setIntent(intent); 1767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 177386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang PreferenceCategory simLockCat = new PreferenceCategory(this); 178386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.setTitle(R.string.sim_lock_settings_title); 179386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang root.addPreference(simLockCat); 180386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.addPreference(simLockPreferences); 181386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Passwords 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory passwordsCat = new PreferenceCategory(this); 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.setTitle(R.string.security_passwords_title); 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(passwordsCat); 1877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference showPassword = mShowPassword = new CheckBoxPreference(this); 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setKey("show_password"); 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setTitle(R.string.show_password); 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setSummary(R.string.show_password_summary); 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setPersistent(false); 193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.addPreference(showPassword); 1947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 1957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 19602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh PreferenceCategory credentialsCat = new PreferenceCategory(this); 19702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh credentialsCat.setTitle(R.string.credentials_category); 19802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh root.addPreference(credentialsCat); 1998877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mCredentialStorage.createPreferences(credentialsCat, CredentialStorage.TYPE_KEYSTORE); 2008877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 2018877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // File System Encryption 2028877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor PreferenceCategory encryptedfsCat = new PreferenceCategory(this); 2038877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor encryptedfsCat.setTitle(R.string.encrypted_fs_category); 2048877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor root.addPreference(encryptedfsCat); 2058877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mCredentialStorage.createPreferences(encryptedfsCat, CredentialStorage.TYPE_ENCRYPTEDFS); 2067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return root; 208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean patternExists = mLockPatternUtils.savedPatternExists(); 215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setEnabled(patternExists); 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setEnabled(patternExists); 217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setEnabled(patternExists); 218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setChecked(mLockPatternUtils.isLockPatternEnabled()); 220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setChecked(mLockPatternUtils.isVisiblePatternEnabled()); 221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setChecked(mLockPatternUtils.isTactileFeedbackEnabled()); 222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int chooseStringRes = mLockPatternUtils.savedPatternExists() ? 224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project R.string.lockpattern_settings_change_lock_pattern : 225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project R.string.lockpattern_settings_choose_lock_pattern; 226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mChoosePattern.setTitle(chooseStringRes); 2277031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 2289cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh mShowPassword.setChecked(Settings.System.getInt(getContentResolver(), 229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TEXT_SHOW_PASSWORD, 1) != 0); 230b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 23102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mCredentialStorage.resume(); 232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Preference preference) { 237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String key = preference.getKey(); 238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (KEY_LOCK_ENABLED.equals(key)) { 240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setLockPatternEnabled(isToggled(preference)); 241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_VISIBLE_PATTERN.equals(key)) { 242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); 243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) { 244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setTactileFeedbackEnabled(isToggled(preference)); 245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mShowPassword) { 246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword.isChecked() ? 1 : 0); 2484bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mNetwork) { 249d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 250d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood LocationManager.NETWORK_PROVIDER, mNetwork.isChecked()); 2514bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mGps) { 252d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood boolean enabled = mGps.isChecked(); 253074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 254d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood LocationManager.GPS_PROVIDER, enabled); 2557f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood if (mAssistedGps != null) { 2567f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setEnabled(enabled); 2577f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood } 258d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood } else if (preference == mAssistedGps) { 259d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood Settings.Secure.putInt(getContentResolver(), Settings.Secure.ASSISTED_GPS_ENABLED, 260d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood mAssistedGps.isChecked() ? 1 : 0); 261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2624bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani 263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 266f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private void showPrivacyPolicy() { 267f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Intent intent = new Intent("android.settings.TERMS"); 268f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani startActivity(intent); 269f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 270f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* 272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Creates toggles for each available location provider 273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateToggles() { 275f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ContentResolver res = getContentResolver(); 276d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled( 277d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood res, LocationManager.GPS_PROVIDER); 278074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood mNetwork.setChecked(Settings.Secure.isLocationProviderEnabled( 279f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res, LocationManager.NETWORK_PROVIDER)); 280d75fb2f92f237ea9c818551f1826f991be57284cMike Lockwood mGps.setChecked(gpsEnabled); 2817f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood if (mAssistedGps != null) { 2827f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setChecked(Settings.Secure.getInt(res, 2837f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood Settings.Secure.ASSISTED_GPS_ENABLED, 2) == 1); 2847f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood mAssistedGps.setEnabled(gpsEnabled); 2857f894124f4e1b8e7a02f6868adf1c21a25179c66Mike Lockwood } 286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean isToggled(Preference pref) { 289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return ((CheckBoxPreference) pref).isChecked(); 290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * For the user to disable keyguard, we first make them verify their 294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * existing pattern. 295afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private class LockEnabledPref extends CheckBoxPreference { 297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public LockEnabledPref(Context context) { 299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super(context); 300afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 301afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 302afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 303afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onClick() { 30472ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project if (mLockPatternUtils.savedPatternExists() && isChecked()) { 30572ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project confirmPatternThenDisableAndClear(); 306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 307afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onClick(); 308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 309afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 312afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Launch screen to confirm the existing lock pattern. 314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @see #onActivityResult(int, int, android.content.Intent) 315afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 31672ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project private void confirmPatternThenDisableAndClear() { 317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Intent intent = new Intent(); 318afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern"); 31972ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project startActivityForResult(intent, CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE); 320afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 321afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 322afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 32372ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project * @see #confirmPatternThenDisableAndClear 324afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 326f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani protected void onActivityResult(int requestCode, int resultCode, Intent data) { 327afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 328afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 329afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final boolean resultOk = resultCode == Activity.RESULT_OK; 330afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 331f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if ((requestCode == CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE) 332f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani && resultOk) { 333afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setLockPatternEnabled(false); 33472ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project mLockPatternUtils.saveLockPattern(null); 335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 337f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 33802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private class CredentialStorage implements DialogInterface.OnClickListener, 33902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener, 34002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Preference.OnPreferenceClickListener { 34102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private static final int MINIMUM_PASSWORD_LENGTH = 8; 342a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 3438877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final int TYPE_KEYSTORE = 0; 3448877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private static final int TYPE_ENCRYPTEDFS = 1; 3458877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 3469cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh private KeyStore mKeyStore = KeyStore.getInstance(); 3470bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private int mState; 3480bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private boolean mSubmit = false; 3490bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private boolean mExternal = false; 35002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 3518877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private boolean mIsEFSActive; 3528877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 3538877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Key Store controls 3547031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private CheckBoxPreference mAccessCheckBox; 35502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private Preference mInstallButton; 35602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private Preference mPasswordButton; 3577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Preference mResetButton; 3587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 3598877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted file system controls 3608877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private CheckBoxPreference mEncryptedFSEnabled; 3618877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 362b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan void resume() { 36302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mState = mKeyStore.test(); 36402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(mState); 365b0883cb384fc7ad46e011a72355c9fda924e5b28Hung-ying Tyan 3660bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh Intent intent = getIntent(); 3670bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (!mExternal && intent != null && 3680bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh Credentials.UNLOCK_ACTION.equals(intent.getAction())) { 3690bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh mExternal = true; 3700bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mState == KeyStore.UNINITIALIZED) { 3710bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showPasswordDialog(); 3720bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } else if (mState == KeyStore.LOCKED) { 3730bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showUnlockDialog(); 3740bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } else { 3750bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh finish(); 3760bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh } 377d8858c3ee12bfdde1bde60dfe7cdf8bc497cf254Hung-ying Tyan } 37802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 37902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 38002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void initialize(String password) { 38102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.password(password); 38202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(KeyStore.NO_ERROR); 38302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 38402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 38502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void reset() { 38602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.reset(); 38702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh updatePreferences(KeyStore.UNINITIALIZED); 3887031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 3897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 39002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void lock() { 3919cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh mKeyStore.lock(); 3929cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.LOCKED); 3937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 3947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 39502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private int unlock(String password) { 39602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.unlock(password); 3979cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return mKeyStore.getLastError(); 3987031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 3997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 40002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private int changePassword(String oldPassword, String newPassword) { 40102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mKeyStore.password(oldPassword, newPassword); 4029cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return mKeyStore.getLastError(); 4037031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4047031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 40502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public boolean onPreferenceChange(Preference preference, Object value) { 40602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (preference == mAccessCheckBox) { 407454a0dbf8ff6d638e4ad31e30007bf3099a509ccChia-chi Yeh if ((Boolean) value) { 4080bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showUnlockDialog(); 40902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 41002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh lock(); 41102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 41202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 4138877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } else if (preference == mEncryptedFSEnabled) { 4148877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor Boolean bval = (Boolean)value; 4158877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor SystemProperties.set(PROPERTY_EFS_ENABLED, 4168877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor bval.booleanValue() ? "1" : "0"); 4178877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor if (mIsEFSActive != bval.booleanValue()) { 4188877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // EFS transition detected 4198877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor SystemProperties.set(PROPERTY_EFS_TRANSITION, "1"); 4208877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } else { 4218877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // No transition 4228877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor SystemProperties.set(PROPERTY_EFS_TRANSITION, "0"); 4238877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } 4248877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 4258877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor updatePreferences(mState); 4268877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor if (bval.booleanValue()) { 4278877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor Toast.makeText(SecuritySettings.this, R.string.encrypted_fs_enabled, 4288877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor Toast.LENGTH_SHORT).show(); 4298877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } else { 4308877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor Toast.makeText(SecuritySettings.this, R.string.encrypted_fs_disabled, 4318877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor Toast.LENGTH_SHORT).show(); 4328877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } 43302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 43402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 4357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 436a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 43702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public boolean onPreferenceClick(Preference preference) { 43802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (preference == mInstallButton) { 43902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Credentials.getInstance().installFromSdCard(SecuritySettings.this); 44002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (preference == mPasswordButton) { 4410bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showPasswordDialog(); 44202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (preference == mResetButton) { 4430bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh showResetDialog(); 44402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 44502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 44602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 44702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 4487031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 45002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public void onClick(DialogInterface dialog, int button) { 45102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mSubmit = (button == DialogInterface.BUTTON_POSITIVE); 45202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (button == DialogInterface.BUTTON_NEUTRAL) { 45302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh reset(); 45402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 4551ddccd07f744344b5248dd5418ee526f26d520dcHung-ying Tyan } 4561ddccd07f744344b5248dd5418ee526f26d520dcHung-ying Tyan 45702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh public void onDismiss(DialogInterface dialog) { 45802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (mSubmit && !isFinishing()) { 45902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mSubmit = false; 46002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (!checkPassword((Dialog) dialog)) { 4610bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh ((Dialog) dialog).show(); 46202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return; 46302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 46402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 465454a0dbf8ff6d638e4ad31e30007bf3099a509ccChia-chi Yeh updatePreferences(mState); 4660bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mExternal) { 46702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh finish(); 4687031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4697031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4707031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 47102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Return true if there is no error. 47202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private boolean checkPassword(Dialog dialog) { 47302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String oldPassword = getText(dialog, R.id.old_password); 47402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String newPassword = getText(dialog, R.id.new_password); 47502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh String confirmPassword = getText(dialog, R.id.confirm_password); 476c3eaaad17ebe9a2cbe34b096511c8f06369dadd1Hung-ying Tyan 47702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (oldPassword != null && oldPassword.length() == 0) { 47802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_password_empty); 47902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 48002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword == null) { 48102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return !checkError(dialog, unlock(oldPassword)); 48202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword.length() == 0 || confirmPassword.length() == 0) { 48302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_passwords_empty); 48402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (newPassword.length() < MINIMUM_PASSWORD_LENGTH) { 48502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_password_too_short); 48602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (!newPassword.equals(confirmPassword)) { 48702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_passwords_mismatch); 48802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (oldPassword == null) { 48902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh initialize(newPassword); 49002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return true; 49102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 49202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return !checkError(dialog, changePassword(oldPassword, newPassword)); 4937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 49402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return false; 4957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 49702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Return false if there is no error. 49802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private boolean checkError(Dialog dialog, int error) { 4999cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error == KeyStore.NO_ERROR) { 5009cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.NO_ERROR); 5019cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return false; 5027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5039cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error == KeyStore.UNINITIALIZED) { 5049cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh updatePreferences(KeyStore.UNINITIALIZED); 5057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 5067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5079cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (error < KeyStore.WRONG_PASSWORD) { 5089cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return false; 5097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5109cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh int count = error - KeyStore.WRONG_PASSWORD + 1; 5119cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh if (count > 3) { 51202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_wrong_password); 51302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (count == 1) { 51402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_reset_warning); 5157031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 51602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh showError(dialog, R.string.credentials_reset_warning_plural, count); 5177031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5189cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh return true; 5197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5207031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 52102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private String getText(Dialog dialog, int viewId) { 52202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh TextView view = (TextView) dialog.findViewById(viewId); 52302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh return (view == null || view.getVisibility() == View.GONE) ? null : 52402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.getText().toString(); 5257031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5267031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 52702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void showError(Dialog dialog, int stringId, Object... formatArgs) { 52802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh TextView view = (TextView) dialog.findViewById(R.id.error); 52902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (view != null) { 53002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (formatArgs == null || formatArgs.length == 0) { 53102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setText(stringId); 5327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 53302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setText(dialog.getContext().getString(stringId, formatArgs)); 5347031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 53502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.setVisibility(View.VISIBLE); 5367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5379cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh } 538a7c57145993a190a38519f53eab14c98a48ccbf0Chia-chi Yeh 5398877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor private void createPreferences(PreferenceCategory category, int type) { 5408877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Legacy EFS state - useful for detecting EFS device state transition 5418877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mIsEFSActive = SystemProperties.getBoolean(PROPERTY_EFS_ENABLED, false); 5428877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5438877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor switch(type) { 5448877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor case TYPE_KEYSTORE: 5458877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox = new CheckBoxPreference(SecuritySettings.this); 5468877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setTitle(R.string.credentials_access); 5478877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setSummary(R.string.credentials_access_summary); 5488877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setOnPreferenceChangeListener(this); 5498877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mAccessCheckBox); 5508877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5518877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton = new Preference(SecuritySettings.this); 5528877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setTitle(R.string.credentials_install_certificates); 5538877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setSummary(R.string.credentials_install_certificates_summary); 5548877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mInstallButton.setOnPreferenceClickListener(this); 5558877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mInstallButton); 5568877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5578877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton = new Preference(SecuritySettings.this); 5588877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setTitle(R.string.credentials_set_password); 5598877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setSummary(R.string.credentials_set_password_summary); 5608877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mPasswordButton.setOnPreferenceClickListener(this); 5618877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mPasswordButton); 5628877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5638877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton = new Preference(SecuritySettings.this); 5648877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setTitle(R.string.credentials_reset); 5658877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setSummary(R.string.credentials_reset_summary); 5668877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setOnPreferenceClickListener(this); 5678877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mResetButton); 5688877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor break; 5698877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5708877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor case TYPE_ENCRYPTEDFS: 5718877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled = new CheckBoxPreference(SecuritySettings.this); 5728877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setTitle(R.string.encrypted_fs_enable); 5738877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setSummary(R.string.encrypted_fs_enable_summary); 5748877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setOnPreferenceChangeListener(this); 5758877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor category.addPreference(mEncryptedFSEnabled); 5768877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor break; 5778877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor } 57802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 5799cec698a1fbbe5e8d23a96347d4e75003f4b8cb6Chia-chi Yeh 58002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh private void updatePreferences(int state) { 58102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mAccessCheckBox.setChecked(state == KeyStore.NO_ERROR); 5828877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor boolean encFSEnabled = SystemProperties.getBoolean(PROPERTY_EFS_ENABLED, 5838877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor false); 5848877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mResetButton.setEnabled((!encFSEnabled) && (state != KeyStore.UNINITIALIZED)); 5858877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mAccessCheckBox.setEnabled((state != KeyStore.UNINITIALIZED) && (!encFSEnabled)); 5868877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor 5878877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor // Encrypted File system preferences 5888877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setChecked(encFSEnabled); 5898877f74901b456d45aaf7a47f6d2208fab9e283cOscar Montemayor mEncryptedFSEnabled.setEnabled(state != KeyStore.UNINITIALIZED); 59002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh 59102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh // Show a toast message if the state is changed. 592446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh if (mState == state) { 593446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh return; 594446bf8b5bc845d14df2f7e1a860d3e28d4542bb6Chia-chi Yeh } else if (state == KeyStore.NO_ERROR) { 59502f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.makeText(SecuritySettings.this, R.string.credentials_enabled, 59602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 59702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (state == KeyStore.UNINITIALIZED) { 59802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.makeText(SecuritySettings.this, R.string.credentials_erased, 59902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 60002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else if (state == KeyStore.LOCKED) { 60102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.makeText(SecuritySettings.this, R.string.credentials_disabled, 60202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Toast.LENGTH_SHORT).show(); 60302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } 60402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh mState = state; 6057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6070bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showUnlockDialog() { 60802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh View view = View.inflate(SecuritySettings.this, 60902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh R.layout.credentials_unlock_dialog, null); 6107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6110bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh // Show extra hint only when the action comes from outside. 6120bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh if (mExternal) { 61302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.hint).setVisibility(View.VISIBLE); 6140a59b500147cc038541f6f2897de7e28c15a12c1Hung-ying Tyan } 6150a59b500147cc038541f6f2897de7e28c15a12c1Hung-ying Tyan 61602f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Dialog dialog = new AlertDialog.Builder(SecuritySettings.this) 61702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setView(view) 61802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setTitle(R.string.credentials_unlock) 6197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 6207031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 6217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 62202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh dialog.setOnDismissListener(this); 6230bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh dialog.show(); 6247031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6257031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6260bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showPasswordDialog() { 62702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh View view = View.inflate(SecuritySettings.this, 62802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh R.layout.credentials_password_dialog, null); 6297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 63002f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh if (mState == KeyStore.UNINITIALIZED) { 63102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.hint).setVisibility(View.VISIBLE); 63202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh } else { 63302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.old_password_prompt).setVisibility(View.VISIBLE); 63402f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh view.findViewById(R.id.old_password).setVisibility(View.VISIBLE); 6357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 63702f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh Dialog dialog = new AlertDialog.Builder(SecuritySettings.this) 63802f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setView(view) 63902f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setTitle(R.string.credentials_set_password) 6407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 6417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 6427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 64302f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh dialog.setOnDismissListener(this); 6440bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh dialog.show(); 6457031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6470bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh private void showResetDialog() { 6480bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh new AlertDialog.Builder(SecuritySettings.this) 6497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setTitle(android.R.string.dialog_alert_title) 6507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 65102f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setMessage(R.string.credentials_reset_hint) 65202f58e898d4ebecb0ec0bc9e8f4dc2732a82962eChia-chi Yeh .setNeutralButton(getString(android.R.string.ok), this) 6537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(getString(android.R.string.cancel), this) 6540bc5e275fdbbb8e80f8259136caf45a356922c40Chia-chi Yeh .create().show(); 6557031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6567031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 657afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 658