SecuritySettings.java revision 7031ab0d756327496ac3ce1e082b53c94be2f3b1
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; 28f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.content.pm.PackageManager.NameNotFoundException; 295ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport android.database.Cursor; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.location.LocationManager; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.preference.EditTextPreference; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity; 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceCategory; 37f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.preference.PreferenceGroup; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.security.Keystore; 417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.text.Html; 427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.text.TextUtils; 43f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.text.method.LinkMovementMethod; 447031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.view.View; 45f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.widget.TextView; 467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport android.widget.Toast; 47f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 48f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport com.android.internal.widget.LockPatternUtils; 49386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhangimport android.telephony.TelephonyManager; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport java.util.ArrayList; 527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyanimport java.util.List; 535ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport java.util.Observable; 545ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport java.util.Observer; 555ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Gesture lock pattern settings. 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 59f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasanipublic class SecuritySettings extends PreferenceActivity implements 60f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani DialogInterface.OnDismissListener, DialogInterface.OnClickListener { 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Lock Settings 637031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_LOCK_ENABLED = "lockenabled"; 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_TACTILE_FEEDBACK_ENABLED = "tactilefeedback"; 6772ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project private static final int CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE = 55; 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private LockPatternUtils mLockPatternUtils; 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mLockEnabled; 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mVisiblePattern; 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mTactileFeedback; 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mChoosePattern; 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mShowPassword; 767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Location Settings 78f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String LOCATION_CATEGORY = "location_category"; 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"; 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 837031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final String ACTION_ADD_CREDENTIAL = 847031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan "android.security.ADD_CREDENTIAL"; 857031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final String ACTION_UNLOCK_CREDENTIAL_STORAGE = 867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan "android.security.UNLOCK_CREDENTIAL_STORAGE"; 877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final String KEY_CSTOR_TYPE_NAME = "typeName"; 887031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final String KEY_CSTOR_ITEM = "item"; 897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final String KEY_CSTOR_NAMESPACE = "namespace"; 907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final String KEY_CSTOR_DESCRIPTION = "description"; 917031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final int CSTOR_MIN_PASSWORD_LENGTH = 8; 927031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final int CSTOR_INIT_DIALOG = 1; 947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final int CSTOR_CHANGE_PASSWORD_DIALOG = 2; 957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final int CSTOR_UNLOCK_DIALOG = 3; 967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final int CSTOR_RESET_DIALOG = 4; 977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private static final int CSTOR_NAME_CREDENTIAL_DIALOG = 5; 987031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private CstorHelper mCstorHelper = new CstorHelper(); 1007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 101f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Vendor specific 102f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String GSETTINGS_PROVIDER = "com.google.android.providers.settings"; 103f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String USE_LOCATION = "use_location"; 104f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String KEY_DONE_USE_LOCATION = "doneLocation"; 105f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private CheckBoxPreference mUseLocation; 106f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private boolean mOkClicked; 107f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private Dialog mUseLocationDialog; 108f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mNetwork; 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mGps; 11172ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project 1125ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // These provide support for receiving notification when Location Manager settings change. 1135ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // This is necessary because the Network Location Provider can change settings 1145ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // if the user does not confirm enabling the provider. 1155ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private ContentQueryMap mContentQueryMap; 1165ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private final class SettingsObserver implements Observer { 1175ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood public void update(Observable o, Object arg) { 1185ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood updateToggles(); 1195ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1205ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 1215ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.security_settings); 126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils = new LockPatternUtils(getContentResolver()); 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project createPreferenceHierarchy(); 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK); 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS); 133f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation = (CheckBoxPreference) getPreferenceScreen().findPreference(USE_LOCATION); 134f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 135f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Vendor specific 136f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani try { 137f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocation != null 138f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani && getPackageManager().getPackageInfo(GSETTINGS_PROVIDER, 0) == null) { 139f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ((PreferenceGroup)findPreference(LOCATION_CATEGORY)) 140f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .removePreference(mUseLocation); 141f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 142f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } catch (NameNotFoundException nnfe) { 143f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project updateToggles(); 1455ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 1465ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // listen for Location Manager settings changes 1475ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood Cursor settingsCursor = getContentResolver().query(Settings.Secure.CONTENT_URI, null, 1485ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood "(" + Settings.System.NAME + "=?)", 1495ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED}, 1505ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood null); 1515ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null); 1525ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood mContentQueryMap.addObserver(new SettingsObserver()); 153f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani boolean doneUseLocation = savedInstanceState != null 154f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani && savedInstanceState.getBoolean(KEY_DONE_USE_LOCATION, true); 155f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (getIntent().getBooleanExtra("SHOW_USE_LOCATION", false) && !doneUseLocation) { 156f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani showUseLocationDialog(true); 157f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 1587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 1597031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mCstorHelper.handleCstorIntents(getIntent()); 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PreferenceScreen createPreferenceHierarchy() { 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Root 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen root = this.getPreferenceScreen(); 165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Inline preferences 167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory inlinePrefCat = new PreferenceCategory(this); 168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.setTitle(R.string.lock_settings_title); 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(inlinePrefCat); 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // autolock toggle 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled = new LockEnabledPref(this); 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setTitle(R.string.lockpattern_settings_enable_title); 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setSummary(R.string.lockpattern_settings_enable_summary); 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setKey(KEY_LOCK_ENABLED); 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mLockEnabled); 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // visible pattern 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern = new CheckBoxPreference(this); 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setKey(KEY_VISIBLE_PATTERN); 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setTitle(R.string.lockpattern_settings_enable_visible_pattern_title); 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mVisiblePattern); 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // tactile feedback 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback = new CheckBoxPreference(this); 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setKey(KEY_TACTILE_FEEDBACK_ENABLED); 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setTitle(R.string.lockpattern_settings_enable_tactile_feedback_title); 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mTactileFeedback); 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // change pattern lock 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent intent = new Intent(); 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.setClassName("com.android.settings", 193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project "com.android.settings.ChooseLockPatternTutorial"); 194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mChoosePattern = getPreferenceManager().createPreferenceScreen(this); 195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mChoosePattern.setIntent(intent); 196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mChoosePattern); 1977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 198386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang int activePhoneType = TelephonyManager.getDefault().getPhoneType(); 199386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang 200386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // do not display SIM lock for CDMA phone 201386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang if (TelephonyManager.PHONE_TYPE_CDMA != activePhoneType) 202386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang { 203386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang PreferenceScreen simLockPreferences = getPreferenceManager() 204386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang .createPreferenceScreen(this); 205386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockPreferences.setTitle(R.string.sim_lock_settings_category); 206386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang // Intent to launch SIM lock settings 207386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang intent = new Intent(); 208386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang intent.setClassName("com.android.settings", "com.android.settings.IccLockSettings"); 209386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockPreferences.setIntent(intent); 2107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 211386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang PreferenceCategory simLockCat = new PreferenceCategory(this); 212386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.setTitle(R.string.sim_lock_settings_title); 213386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang root.addPreference(simLockCat); 214386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang simLockCat.addPreference(simLockPreferences); 215386278a338d740dce95b7fa1514662b0eb5683e4Chouting Zhang } 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Passwords 218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory passwordsCat = new PreferenceCategory(this); 219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.setTitle(R.string.security_passwords_title); 220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(passwordsCat); 2217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference showPassword = mShowPassword = new CheckBoxPreference(this); 223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setKey("show_password"); 224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setTitle(R.string.show_password); 225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setSummary(R.string.show_password_summary); 226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setPersistent(false); 227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.addPreference(showPassword); 2287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 2297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // Credential storage 2307031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan PreferenceCategory credStoreCat = new PreferenceCategory(this); 2317031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan credStoreCat.setTitle(R.string.cstor_settings_category); 2327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan root.addPreference(credStoreCat); 2337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan credStoreCat.addPreference(mCstorHelper.createAccessCheckBox()); 2347031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan credStoreCat.addPreference(mCstorHelper.createSetPasswordPreference()); 2357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan credStoreCat.addPreference(mCstorHelper.createResetPreference()); 2367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return root; 238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean patternExists = mLockPatternUtils.savedPatternExists(); 245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setEnabled(patternExists); 246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setEnabled(patternExists); 247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setEnabled(patternExists); 248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setChecked(mLockPatternUtils.isLockPatternEnabled()); 250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setChecked(mLockPatternUtils.isVisiblePatternEnabled()); 251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setChecked(mLockPatternUtils.isTactileFeedbackEnabled()); 252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int chooseStringRes = mLockPatternUtils.savedPatternExists() ? 254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project R.string.lockpattern_settings_change_lock_pattern : 255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project R.string.lockpattern_settings_choose_lock_pattern; 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mChoosePattern.setTitle(chooseStringRes); 2577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .setChecked(Settings.System.getInt(getContentResolver(), 260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TEXT_SHOW_PASSWORD, 1) != 0); 261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 264f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onPause() { 265f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocationDialog != null && mUseLocationDialog.isShowing()) { 266f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog.dismiss(); 267f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 268f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog = null; 269f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani super.onPause(); 270f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 271f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 272f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani @Override 273f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onSaveInstanceState(Bundle icicle) { 274f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocationDialog != null && mUseLocationDialog.isShowing()) { 275f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani icicle.putBoolean(KEY_DONE_USE_LOCATION, false); 276f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 277f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani super.onSaveInstanceState(icicle); 278f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 279f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 280f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani @Override 281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Preference preference) { 283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String key = preference.getKey(); 284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (KEY_LOCK_ENABLED.equals(key)) { 286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setLockPatternEnabled(isToggled(preference)); 287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_VISIBLE_PATTERN.equals(key)) { 288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); 289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) { 290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setTactileFeedbackEnabled(isToggled(preference)); 291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mShowPassword) { 292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword.isChecked() ? 1 : 0); 2944bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mNetwork) { 295d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 296d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood LocationManager.NETWORK_PROVIDER, mNetwork.isChecked()); 2974bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mGps) { 298074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 299074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood LocationManager.GPS_PROVIDER, mGps.isChecked()); 300f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } else if (preference == mUseLocation) { 301f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani //normally called on the toggle click 302f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocation.isChecked()) { 303f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani showUseLocationDialog(false); 304f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } else { 305f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani updateUseLocation(); 306f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 307afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3084bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani 309afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 312f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private void showPrivacyPolicy() { 313f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Intent intent = new Intent("android.settings.TERMS"); 314f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani startActivity(intent); 315f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 316f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 317f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private void showUseLocationDialog(boolean force) { 318f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Show a warning to the user that location data will be shared 319f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mOkClicked = false; 320f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (force) { 321f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation.setChecked(true); 322f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 32341b6daa69213f58d6e0de1ff6c6c720731c971d2Amith Yamasani 324f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani CharSequence msg = getResources().getText(R.string.use_location_warning_message); 325f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog = new AlertDialog.Builder(this).setMessage(msg) 326f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setTitle(R.string.use_location_title) 327f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setIcon(android.R.drawable.ic_dialog_alert) 328f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setPositiveButton(R.string.agree, this) 329f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setNegativeButton(R.string.disagree, this) 330f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .show(); 331f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ((TextView)mUseLocationDialog.findViewById(android.R.id.message)) 332f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setMovementMethod(LinkMovementMethod.getInstance()); 333f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog.setOnDismissListener(this); 334f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 335f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* 337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Creates toggles for each available location provider 338afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateToggles() { 340f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ContentResolver res = getContentResolver(); 341074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood mNetwork.setChecked(Settings.Secure.isLocationProviderEnabled( 342f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res, LocationManager.NETWORK_PROVIDER)); 343074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood mGps.setChecked(Settings.Secure.isLocationProviderEnabled( 344f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res, LocationManager.GPS_PROVIDER)); 34541b6daa69213f58d6e0de1ff6c6c720731c971d2Amith Yamasani mUseLocation.setChecked(Settings.Secure.getInt(res, 34641b6daa69213f58d6e0de1ff6c6c720731c971d2Amith Yamasani Settings.Secure.USE_LOCATION_FOR_SERVICES, 2) == 1); 347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean isToggled(Preference pref) { 350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return ((CheckBoxPreference) pref).isChecked(); 351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 353f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private void updateUseLocation() { 354f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani boolean use = mUseLocation.isChecked(); 35541b6daa69213f58d6e0de1ff6c6c720731c971d2Amith Yamasani Settings.Secure.putInt(getContentResolver(), 35641b6daa69213f58d6e0de1ff6c6c720731c971d2Amith Yamasani Settings.Secure.USE_LOCATION_FOR_SERVICES, use ? 1 : 0); 357f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 358f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 360afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 361afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * For the user to disable keyguard, we first make them verify their 362afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * existing pattern. 363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private class LockEnabledPref extends CheckBoxPreference { 365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public LockEnabledPref(Context context) { 367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super(context); 368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 371afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onClick() { 37272ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project if (mLockPatternUtils.savedPatternExists() && isChecked()) { 37372ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project confirmPatternThenDisableAndClear(); 374afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 375afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onClick(); 376afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 377afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 378afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Launch screen to confirm the existing lock pattern. 382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @see #onActivityResult(int, int, android.content.Intent) 383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 38472ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project private void confirmPatternThenDisableAndClear() { 385afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Intent intent = new Intent(); 386afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern"); 38772ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project startActivityForResult(intent, CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE); 388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 389afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 390afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 39172ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project * @see #confirmPatternThenDisableAndClear 392afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 393afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 394f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani protected void onActivityResult(int requestCode, int resultCode, Intent data) { 395afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 396afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 397afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final boolean resultOk = resultCode == Activity.RESULT_OK; 398afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 399f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if ((requestCode == CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE) 400f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani && resultOk) { 401afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setLockPatternEnabled(false); 40272ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project mLockPatternUtils.saveLockPattern(null); 403afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 404afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 405f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 406f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onClick(DialogInterface dialog, int which) { 407f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (which == DialogInterface.BUTTON_POSITIVE) { 408f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani //updateProviders(); 409f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mOkClicked = true; 410f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } else { 411f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Reset the toggle 412f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation.setChecked(false); 413f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 414f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani updateUseLocation(); 415f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 416f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 417f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onDismiss(DialogInterface dialog) { 418f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Assuming that onClick gets called first 419f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (!mOkClicked) { 420f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation.setChecked(false); 421f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 422f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 4237031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4247031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan @Override 4257031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan protected Dialog onCreateDialog (int id) { 4267031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan switch (id) { 4277031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_INIT_DIALOG: 4287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_CHANGE_PASSWORD_DIALOG: 4297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mCstorHelper.createSetPasswordDialog(id); 4307031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4317031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_UNLOCK_DIALOG: 4327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mCstorHelper.createUnlockDialog(); 4337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4347031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_RESET_DIALOG: 4357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mCstorHelper.createResetDialog(); 4367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4377031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_NAME_CREDENTIAL_DIALOG: 4387031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mCstorHelper.createNameCredentialDialog(); 4397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan default: 4417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return null; 4427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4447031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4457031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private class CstorHelper implements 4467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan DialogInterface.OnClickListener, DialogInterface.OnDismissListener { 4477031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Keystore mKeystore = Keystore.getInstance(); 4487031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private View mView; 4497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private int mDialogId; 4507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private boolean mConfirm = true; 4517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private CheckBoxPreference mAccessCheckBox; 4537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Preference mResetButton; 4547031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4557031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Intent mSpecialIntent; 4567031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private CstorAddCredentialHelper mCstorAddCredentialHelper; 4577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan void handleCstorIntents(Intent intent) { 4597031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (intent == null) return; 4607031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String action = intent.getAction(); 4617031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4627031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (ACTION_ADD_CREDENTIAL.equals(action)) { 4637031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mCstorAddCredentialHelper = new CstorAddCredentialHelper(intent); 4647031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(CSTOR_NAME_CREDENTIAL_DIALOG); 4657031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else if (ACTION_UNLOCK_CREDENTIAL_STORAGE.equals(action)) { 4667031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mSpecialIntent = intent; 4677031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(mCstorHelper.isCstorInitialized() 4687031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan ? CSTOR_UNLOCK_DIALOG 4697031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan : CSTOR_INIT_DIALOG); 4707031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4737031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private boolean isCstorUnlocked() { 4747031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return (mKeystore.getState() == Keystore.UNLOCKED); 4757031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private boolean isCstorInitialized() { 4787031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return (mKeystore.getState() != Keystore.UNINITIALIZED); 4797031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4807031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void lockCstor() { 4827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mKeystore.lock(); 4837031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mAccessCheckBox.setChecked(false); 4847031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4857031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private int unlockCstor(String passwd) { 4877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan int ret = mKeystore.unlock(passwd); 4887031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (ret == -1) resetCstor(); 4897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (ret == 0) { 4907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Toast.makeText(SecuritySettings.this, R.string.cstor_is_enabled, 4917031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Toast.LENGTH_SHORT).show(); 4927031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return ret; 4947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 4957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 4967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private int changeCstorPassword(String oldPasswd, String newPasswd) { 4977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan int ret = mKeystore.changePassword(oldPasswd, newPasswd); 4987031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (ret == -1) resetCstor(); 4997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return ret; 5007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5017031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void initCstor(String passwd) { 5037031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mKeystore.setPassword(passwd); 5047031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan enablePreferences(true); 5057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mAccessCheckBox.setChecked(true); 5067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Toast.makeText(SecuritySettings.this, R.string.cstor_is_enabled, 5077031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Toast.LENGTH_SHORT).show(); 5087031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void resetCstor() { 5117031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mKeystore.reset(); 5127031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan enablePreferences(false); 5137031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mAccessCheckBox.setChecked(false); 5147031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5157031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5167031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void addCredential() { 5177031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String message = String.format(getString(R.string.cstor_is_added), 5187031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mCstorAddCredentialHelper.getName()); 5197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Toast.makeText(SecuritySettings.this, message, Toast.LENGTH_SHORT) 5207031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .show(); 5217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5227031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5237031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan public void onClick(DialogInterface dialog, int which) { 5247031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (which == DialogInterface.BUTTON_NEGATIVE) { 5257031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (mCstorAddCredentialHelper != null) finish(); 5267031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return; 5277031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan switch (mDialogId) { 5307031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_INIT_DIALOG: 5317031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_CHANGE_PASSWORD_DIALOG: 5327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mConfirm = checkPasswords((Dialog) dialog); 5337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan break; 5347031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_UNLOCK_DIALOG: 5367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mConfirm = checkUnlockPassword((Dialog) dialog); 5377031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan break; 5387031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_RESET_DIALOG: 5407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan resetCstor(); 5417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan break; 5427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_NAME_CREDENTIAL_DIALOG: 5447031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mConfirm = checkAddCredential(); 5457031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan break; 5467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5477031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5487031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan public void onDismiss(DialogInterface dialog) { 5507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (!mConfirm) { 5517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mConfirm = true; 5527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(mDialogId); 5537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 5547031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan removeDialog(mDialogId); 5557031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5567031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (mCstorAddCredentialHelper != null) { 5577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (!isCstorInitialized()) { 5587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(CSTOR_INIT_DIALOG); 5597031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else if (!isCstorUnlocked()) { 5607031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(CSTOR_UNLOCK_DIALOG); 5617031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 5627031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan addCredential(); 5637031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan finish(); 5647031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5657031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else if (mSpecialIntent != null) { 5667031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan finish(); 5677031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5687031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5697031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5707031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void showResetWarning(int count) { 5727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan TextView v = showError(count <= 3 5737031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan ? R.string.cstor_password_error_reset_warning 5747031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan : R.string.cstor_password_error); 5757031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (count <= 3) { 5767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (count == 1) { 5777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan v.setText(getString( 5787031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan R.string.cstor_password_error_reset_warning)); 5797031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 5807031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String format = getString( 5817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan R.string.cstor_password_error_reset_warning_plural); 5827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan v.setText(String.format(format, count)); 5837031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5847031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5857031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private boolean checkAddCredential() { 5887031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan hideError(); 5897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String name = getText(R.id.cstor_credential_name); 5917031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (TextUtils.isEmpty(name)) { 5927031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_name_empty_error); 5937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 5947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 5957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 5967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan for (int i = 0, len = name.length(); i < len; i++) { 5977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (!Character.isLetterOrDigit(name.charAt(i))) { 5987031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_name_char_error); 5997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6017031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6037031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mCstorAddCredentialHelper.setName(name); 6047031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 6057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6077031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // returns true if the password is long enough and does not contain 6087031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // characters that we don't like 6097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private boolean verifyPassword(String passwd) { 6107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (passwd == null) { 6117031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_passwords_empty_error); 6127031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6137031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else if ((passwd.length() < CSTOR_MIN_PASSWORD_LENGTH) 6147031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan || passwd.contains(" ")) { 6157031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_password_verification_error); 6167031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6177031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 6187031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 6197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6207031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6227031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // returns true if the password is ok 6237031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private boolean checkUnlockPassword(Dialog d) { 6247031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan hideError(); 6257031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6267031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String passwd = getText(R.id.cstor_password); 6277031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (TextUtils.isEmpty(passwd)) { 6287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_password_empty_error); 6297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6307031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6317031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan int count = unlockCstor(passwd); 6337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (count > 0) { 6347031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showResetWarning(count); 6357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 6377031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // done or reset 6387031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 6397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // returns true if the passwords are ok 6437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private boolean checkPasswords(Dialog d) { 6447031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan hideError(); 6457031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String oldPasswd = getText(R.id.cstor_old_password); 6477031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String newPasswd = getText(R.id.cstor_new_password); 6487031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String confirmPasswd = getText(R.id.cstor_confirm_password); 6497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if ((mDialogId == CSTOR_CHANGE_PASSWORD_DIALOG) 6517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan && TextUtils.isEmpty(oldPasswd)) { 6527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_password_empty_error); 6537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6547031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6557031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6567031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (TextUtils.isEmpty(newPasswd) 6577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan && TextUtils.isEmpty(confirmPasswd)) { 6587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_passwords_empty_error); 6597031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6607031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6617031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6627031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (!verifyPassword(newPasswd)) { 6637031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6647031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else if (!newPasswd.equals(confirmPasswd)) { 6657031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showError(R.string.cstor_passwords_error); 6667031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6677031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6687031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6697031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (mDialogId == CSTOR_CHANGE_PASSWORD_DIALOG) { 6707031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan int count = changeCstorPassword(oldPasswd, newPasswd); 6717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (count > 0) { 6727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showResetWarning(count); 6737031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return false; 6747031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 6757031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // done or reset 6767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 6777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6787031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 6797031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan initCstor(newPasswd); 6807031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 6817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6837031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6847031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private TextView showError(int messageId) { 6857031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan TextView v = (TextView) mView.findViewById(R.id.cstor_error); 6867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan v.setText(messageId); 6877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (v != null) v.setVisibility(View.VISIBLE); 6887031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return v; 6897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6917031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void hideError() { 6927031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan View v = mView.findViewById(R.id.cstor_error); 6937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (v != null) v.setVisibility(View.GONE); 6947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 6967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private String getText(int viewId) { 6977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return ((TextView) mView.findViewById(viewId)).getText().toString(); 6987031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 6997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void setText(int viewId, String text) { 7017031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan TextView v = (TextView) mView.findViewById(viewId); 7027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (v != null) v.setText(text); 7037031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7047031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void enablePreferences(boolean enabled) { 7067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mAccessCheckBox.setEnabled(enabled); 7077031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mResetButton.setEnabled(enabled); 7087031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Preference createAccessCheckBox() { 7117031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan CheckBoxPreference pref = new CheckBoxPreference( 7127031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan SecuritySettings.this); 7137031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setTitle(R.string.cstor_access_title); 7147031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setSummary(R.string.cstor_access_summary); 7157031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setChecked(isCstorUnlocked()); 7167031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setOnPreferenceChangeListener( 7177031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan new Preference.OnPreferenceChangeListener() { 7187031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan public boolean onPreferenceChange( 7197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Preference pref, Object value) { 7207031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (((Boolean) value)) { 7217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(isCstorInitialized() 7227031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan ? CSTOR_UNLOCK_DIALOG 7237031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan : CSTOR_INIT_DIALOG); 7247031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } else { 7257031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan lockCstor(); 7267031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7277031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 7287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan }); 7307031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setEnabled(isCstorInitialized()); 7317031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mAccessCheckBox = pref; 7327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return pref; 7337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7347031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Preference createSetPasswordPreference() { 7367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Preference pref = new Preference(SecuritySettings.this); 7377031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setTitle(R.string.cstor_set_passwd_title); 7387031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setSummary(R.string.cstor_set_passwd_summary); 7397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setOnPreferenceClickListener( 7407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan new Preference.OnPreferenceClickListener() { 7417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan public boolean onPreferenceClick(Preference pref) { 7427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(isCstorInitialized() 7437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan ? CSTOR_CHANGE_PASSWORD_DIALOG 7447031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan : CSTOR_INIT_DIALOG); 7457031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 7467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7477031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan }); 7487031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return pref; 7497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Preference createResetPreference() { 7527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Preference pref = new Preference(SecuritySettings.this); 7537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setTitle(R.string.cstor_reset_title); 7547031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setSummary(R.string.cstor_reset_summary); 7557031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setOnPreferenceClickListener( 7567031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan new Preference.OnPreferenceClickListener() { 7577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan public boolean onPreferenceClick(Preference pref) { 7587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan showDialog(CSTOR_RESET_DIALOG); 7597031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return true; 7607031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7617031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan }); 7627031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan pref.setEnabled(isCstorInitialized()); 7637031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mResetButton = pref; 7647031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return pref; 7657031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7667031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7677031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Dialog createUnlockDialog() { 7687031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mDialogId = CSTOR_UNLOCK_DIALOG; 7697031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mView = View.inflate(SecuritySettings.this, 7707031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan R.layout.cstor_unlock_dialog_view, null); 7717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan hideError(); 7727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7737031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Dialog d = new AlertDialog.Builder(SecuritySettings.this) 7747031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setView(mView) 7757031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setTitle(R.string.cstor_access_dialog_title) 7767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 7777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 7787031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setCancelable(false) 7797031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 7807031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan d.setOnDismissListener(this); 7817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return d; 7827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 7837031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7847031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Dialog createSetPasswordDialog(int id) { 7857031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mDialogId = id; 7867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mView = View.inflate(SecuritySettings.this, 7877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan R.layout.cstor_set_password_dialog_view, null); 7887031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan hideError(); 7897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan switch (id) { 7917031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_INIT_DIALOG: 7927031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mView.findViewById(R.id.cstor_old_password_block) 7937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setVisibility(View.GONE); 7947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan break; 7957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 7967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan case CSTOR_CHANGE_PASSWORD_DIALOG: 7977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mView.findViewById(R.id.cstor_first_time_hint) 7987031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setVisibility(View.GONE); 7997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan break; 8007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8017031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan default: 8027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan throw new RuntimeException( 8037031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan "Unknown dialog id: " + mDialogId); 8047031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Dialog d = new AlertDialog.Builder(SecuritySettings.this) 8077031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setView(mView) 8087031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setTitle(R.string.cstor_set_passwd_dialog_title) 8097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 8107031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 8117031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setCancelable(false) 8127031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 8137031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan d.setOnDismissListener(this); 8147031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return d; 8157031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8167031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8177031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Dialog createResetDialog() { 8187031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mDialogId = CSTOR_RESET_DIALOG; 8197031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return new AlertDialog.Builder(SecuritySettings.this) 8207031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setTitle(android.R.string.dialog_alert_title) 8217031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setIcon(android.R.drawable.ic_dialog_alert) 8227031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setMessage(R.string.cstor_reset_hint) 8237031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(getString(android.R.string.ok), this) 8247031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(getString(android.R.string.cancel), this) 8257031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 8267031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8277031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8287031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private Dialog createNameCredentialDialog() { 8297031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mDialogId = CSTOR_NAME_CREDENTIAL_DIALOG; 8307031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mView = View.inflate(SecuritySettings.this, 8317031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan R.layout.cstor_name_credential_dialog_view, null); 8327031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan hideError(); 8337031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8347031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan setText(R.id.cstor_credential_name_title, 8357031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan getString(R.string.cstor_credential_name)); 8367031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan setText(R.id.cstor_credential_info_title, 8377031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan getString(R.string.cstor_credential_info)); 8387031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan setText(R.id.cstor_credential_info, 8397031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mCstorAddCredentialHelper.getDescription().toString()); 8407031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8417031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan Dialog d = new AlertDialog.Builder(SecuritySettings.this) 8427031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setView(mView) 8437031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setTitle(R.string.cstor_name_credential_dialog_title) 8447031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setPositiveButton(android.R.string.ok, this) 8457031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setNegativeButton(android.R.string.cancel, this) 8467031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .setCancelable(false) 8477031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan .create(); 8487031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan d.setOnDismissListener(this); 8497031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return d; 8507031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8517031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8527031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8537031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private class CstorAddCredentialHelper { 8547031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private String mTypeName; 8557031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private List<byte[]> mItemList; 8567031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private List<String> mNamespaceList; 8577031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private String mDescription; 8587031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private String mName; 8597031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8607031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan CstorAddCredentialHelper(Intent intent) { 8617031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan parse(intent); 8627031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8637031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8647031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String getTypeName() { 8657031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mTypeName; 8667031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8677031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8687031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan byte[] getItem(int i) { 8697031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mItemList.get(i); 8707031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8717031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8727031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String getNamespace(int i) { 8737031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mNamespaceList.get(i); 8747031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8757031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8767031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan CharSequence getDescription() { 8777031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return Html.fromHtml(mDescription); 8787031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8797031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8807031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan void setName(String name) { 8817031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mName = name; 8827031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8837031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8847031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String getName() { 8857031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan return mName; 8867031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8877031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 8887031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan private void parse(Intent intent) { 8897031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mTypeName = intent.getStringExtra(KEY_CSTOR_TYPE_NAME); 8907031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mItemList = new ArrayList<byte[]>(); 8917031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mNamespaceList = new ArrayList<String>(); 8927031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan for (int i = 0; ; i++) { 8937031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan byte[] blob = intent.getByteArrayExtra(KEY_CSTOR_ITEM + i); 8947031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (blob == null) break; 8957031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mItemList.add(blob); 8967031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mNamespaceList.add(intent.getStringExtra( 8977031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan KEY_CSTOR_NAMESPACE + i)); 8987031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 8997031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan 9007031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan // build description string 9017031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan StringBuilder sb = new StringBuilder(); 9027031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan for (int i = 0; ; i++) { 9037031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan String s = intent.getStringExtra(KEY_CSTOR_DESCRIPTION + i); 9047031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan if (s == null) break; 9057031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan sb.append(s).append("<br>"); 9067031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 9077031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan mDescription = sb.toString(); 9087031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 9097031ab0d756327496ac3ce1e082b53c94be2f3b1Hung-ying Tyan } 910afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 911