SecuritySettings.java revision f06d8698a4a2de1973a25df0c6563bdfcba4eb03
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; 311617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyanimport android.net.vpn.VpnManager; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 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; 40f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.text.method.LinkMovementMethod; 41f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport android.widget.TextView; 42f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 43f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasaniimport com.android.internal.widget.LockPatternUtils; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 455ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport java.util.Observable; 465ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwoodimport java.util.Observer; 475ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Gesture lock pattern settings. 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 51f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasanipublic class SecuritySettings extends PreferenceActivity implements 52f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani DialogInterface.OnDismissListener, DialogInterface.OnClickListener { 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Lock Settings 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_LOCK_ENABLED = "lockenabled"; 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_VISIBLE_PATTERN = "visiblepattern"; 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_TACTILE_FEEDBACK_ENABLED = "tactilefeedback"; 5972ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project private static final int CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE = 55; 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private LockPatternUtils mLockPatternUtils; 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mLockEnabled; 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mVisiblePattern; 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mTactileFeedback; 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mChoosePattern; 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mShowPassword; 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Location Settings 70f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String LOCATION_CATEGORY = "location_category"; 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_NETWORK = "location_network"; 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String LOCATION_GPS = "location_gps"; 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 74f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Vendor specific 75f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String GSETTINGS_PROVIDER = "com.google.android.providers.settings"; 76f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String USE_LOCATION = "use_location"; 77f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private static final String KEY_DONE_USE_LOCATION = "doneLocation"; 78f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private CheckBoxPreference mUseLocation; 79f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private boolean mOkClicked; 80f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private Dialog mUseLocationDialog; 81f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mNetwork; 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mGps; 8472ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project 855ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // These provide support for receiving notification when Location Manager settings change. 865ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // This is necessary because the Network Location Provider can change settings 875ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood // if the user does not confirm enabling the provider. 885ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private ContentQueryMap mContentQueryMap; 895ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood private final class SettingsObserver implements Observer { 905ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood public void update(Observable o, Object arg) { 915ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood updateToggles(); 925ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 935ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood } 945ed2c4ad43f2c3c85a025da04becd2eaa75927a1Mike Lockwood 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.security_settings); 99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils = new LockPatternUtils(getContentResolver()); 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project createPreferenceHierarchy(); 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mNetwork = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_NETWORK); 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mGps = (CheckBoxPreference) getPreferenceScreen().findPreference(LOCATION_GPS); 106f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation = (CheckBoxPreference) getPreferenceScreen().findPreference(USE_LOCATION); 107f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 108f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Vendor specific 109f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani try { 110f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocation != null 111f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani && getPackageManager().getPackageInfo(GSETTINGS_PROVIDER, 0) == null) { 112f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ((PreferenceGroup)findPreference(LOCATION_CATEGORY)) 113f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .removePreference(mUseLocation); 114f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 115f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } catch (NameNotFoundException nnfe) { 116f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith 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()); 126f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani boolean doneUseLocation = savedInstanceState != null 127f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani && savedInstanceState.getBoolean(KEY_DONE_USE_LOCATION, true); 128f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (getIntent().getBooleanExtra("SHOW_USE_LOCATION", false) && !doneUseLocation) { 129f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani showUseLocationDialog(true); 130f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private PreferenceScreen createPreferenceHierarchy() { 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Root 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen root = this.getPreferenceScreen(); 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Inline preferences 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory inlinePrefCat = new PreferenceCategory(this); 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.setTitle(R.string.lock_settings_title); 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(inlinePrefCat); 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // autolock toggle 143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled = new LockEnabledPref(this); 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setTitle(R.string.lockpattern_settings_enable_title); 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setSummary(R.string.lockpattern_settings_enable_summary); 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setKey(KEY_LOCK_ENABLED); 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mLockEnabled); 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // visible pattern 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern = new CheckBoxPreference(this); 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setKey(KEY_VISIBLE_PATTERN); 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setTitle(R.string.lockpattern_settings_enable_visible_pattern_title); 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mVisiblePattern); 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // tactile feedback 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback = new CheckBoxPreference(this); 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setKey(KEY_TACTILE_FEEDBACK_ENABLED); 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setTitle(R.string.lockpattern_settings_enable_tactile_feedback_title); 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mTactileFeedback); 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // change pattern lock 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent intent = new Intent(); 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.setClassName("com.android.settings", 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project "com.android.settings.ChooseLockPatternTutorial"); 165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mChoosePattern = getPreferenceManager().createPreferenceScreen(this); 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mChoosePattern.setIntent(intent); 167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project inlinePrefCat.addPreference(mChoosePattern); 168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceScreen simLockPreferences = getPreferenceManager() 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .createPreferenceScreen(this); 171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project simLockPreferences.setTitle(R.string.sim_lock_settings_category); 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Intent to launch SIM lock settings 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent = new Intent(); 174f9e024198d3b16454287888bd5d40fee23390d23Wink Saville intent.setClassName("com.android.settings", "com.android.settings.IccLockSettings"); 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project simLockPreferences.setIntent(intent); 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory simLockCat = new PreferenceCategory(this); 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project simLockCat.setTitle(R.string.sim_lock_settings_title); 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(simLockCat); 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project simLockCat.addPreference(simLockPreferences); 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Passwords 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project PreferenceCategory passwordsCat = new PreferenceCategory(this); 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.setTitle(R.string.security_passwords_title); 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project root.addPreference(passwordsCat); 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference showPassword = mShowPassword = new CheckBoxPreference(this); 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setKey("show_password"); 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setTitle(R.string.show_password); 190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setSummary(R.string.show_password_summary); 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showPassword.setPersistent(false); 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project passwordsCat.addPreference(showPassword); 193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1941617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan PreferenceScreen vpnPreferences = getPreferenceManager() 1951617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan .createPreferenceScreen(this); 19671e2d3bc3a85b86438ad5be1561b9ea3c967948eHung-ying Tyan vpnPreferences.setTitle(R.string.vpn_settings_title); 19771e2d3bc3a85b86438ad5be1561b9ea3c967948eHung-ying Tyan vpnPreferences.setSummary(R.string.vpn_settings_summary); 1981617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan vpnPreferences.setIntent(new VpnManager(this).createSettingsActivityIntent()); 1991617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan 2001617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan PreferenceCategory vpnCat = new PreferenceCategory(this); 20171e2d3bc3a85b86438ad5be1561b9ea3c967948eHung-ying Tyan vpnCat.setTitle(R.string.vpn_settings_category); 2021617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan root.addPreference(vpnCat); 2031617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan vpnCat.addPreference(vpnPreferences); 2041617706d2529b2182d1a7fe2348495fb8f40bb81Hung-ying Tyan 205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return root; 206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onResume() { 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean patternExists = mLockPatternUtils.savedPatternExists(); 213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setEnabled(patternExists); 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setEnabled(patternExists); 215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setEnabled(patternExists); 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockEnabled.setChecked(mLockPatternUtils.isLockPatternEnabled()); 218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mVisiblePattern.setChecked(mLockPatternUtils.isVisiblePatternEnabled()); 219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTactileFeedback.setChecked(mLockPatternUtils.isTactileFeedbackEnabled()); 220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int chooseStringRes = mLockPatternUtils.savedPatternExists() ? 222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project R.string.lockpattern_settings_change_lock_pattern : 223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project R.string.lockpattern_settings_choose_lock_pattern; 224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mChoosePattern.setTitle(chooseStringRes); 225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword 227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .setChecked(Settings.System.getInt(getContentResolver(), 228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TEXT_SHOW_PASSWORD, 1) != 0); 229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 232f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onPause() { 233f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocationDialog != null && mUseLocationDialog.isShowing()) { 234f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog.dismiss(); 235f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 236f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog = null; 237f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani super.onPause(); 238f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 239f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 240f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani @Override 241f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onSaveInstanceState(Bundle icicle) { 242f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocationDialog != null && mUseLocationDialog.isShowing()) { 243f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani icicle.putBoolean(KEY_DONE_USE_LOCATION, false); 244f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 245f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani super.onSaveInstanceState(icicle); 246f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 247f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 248f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani @Override 249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Preference preference) { 251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final String key = preference.getKey(); 252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (KEY_LOCK_ENABLED.equals(key)) { 254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setLockPatternEnabled(isToggled(preference)); 255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_VISIBLE_PATTERN.equals(key)) { 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); 257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (KEY_TACTILE_FEEDBACK_ENABLED.equals(key)) { 258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setTactileFeedbackEnabled(isToggled(preference)); 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mShowPassword) { 260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, 261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mShowPassword.isChecked() ? 1 : 0); 2624bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mNetwork) { 263d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 264d13308674b4ff614b6ade32efde0d7cff6d8dc2aMike Lockwood LocationManager.NETWORK_PROVIDER, mNetwork.isChecked()); 2654bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani } else if (preference == mGps) { 266074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood Settings.Secure.setLocationProviderEnabled(getContentResolver(), 267074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood LocationManager.GPS_PROVIDER, mGps.isChecked()); 268f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } else if (preference == mUseLocation) { 269f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani //normally called on the toggle click 270f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (mUseLocation.isChecked()) { 271f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani showUseLocationDialog(false); 272f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } else { 273f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani updateUseLocation(); 274f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2764bfdcd3e5fb344cad88feaf4172427f0be53ac2cAmith Yamasani 277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 280f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private void showPrivacyPolicy() { 281f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Intent intent = new Intent("android.settings.TERMS"); 282f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani startActivity(intent); 283f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 284f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 285f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private void showUseLocationDialog(boolean force) { 286f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Show a warning to the user that location data will be shared 287f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mOkClicked = false; 288f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (force) { 289f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation.setChecked(true); 290f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 291f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani /* 292f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Resources res = getResources(); 293f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani CharSequence msg = new SpannableString( 294f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res.getText(R.string.use_location_warning_message)); 295f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani SpannableString spannable = (SpannableString) msg; 296f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Annotation[] spans = spannable.getSpans(0, spannable.length(), Annotation.class); 297f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (spans != null && spans.length > 0) { 298f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani SpannableStringBuilder builder = new SpannableStringBuilder(spannable); 299f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani int start = spannable.getSpanStart(spans[0]); 300f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani int end = spannable.getSpanEnd(spans[0]); 301f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ClickableSpan link = new ClickableSpan() { 302f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani @Override 303f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onClick(View view) { 304f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani showPrivacyPolicy(); 305f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 306f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani }; 307f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani builder.setSpan(link, start, end, spannable.getSpanFlags(link)); 308f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani msg = builder; 309f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 310f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani */ 311f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani CharSequence msg = getResources().getText(R.string.use_location_warning_message); 312f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog = new AlertDialog.Builder(this).setMessage(msg) 313f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setTitle(R.string.use_location_title) 314f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setIcon(android.R.drawable.ic_dialog_alert) 315f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setPositiveButton(R.string.agree, this) 316f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setNegativeButton(R.string.disagree, this) 317f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .show(); 318f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ((TextView)mUseLocationDialog.findViewById(android.R.id.message)) 319f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani .setMovementMethod(LinkMovementMethod.getInstance()); 320f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocationDialog.setOnDismissListener(this); 321f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 322f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 323afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* 324afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Creates toggles for each available location provider 325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 326afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void updateToggles() { 327f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani ContentResolver res = getContentResolver(); 328074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood mNetwork.setChecked(Settings.Secure.isLocationProviderEnabled( 329f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res, LocationManager.NETWORK_PROVIDER)); 330074149da80d6b581b21abe32a68a025ecfd11868Mike Lockwood mGps.setChecked(Settings.Secure.isLocationProviderEnabled( 331f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani res, LocationManager.GPS_PROVIDER)); 332f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation.setChecked(Settings.Gservices.getInt(res, 333f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Settings.Gservices.USE_LOCATION_FOR_SERVICES, 2) == 1); 334afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean isToggled(Preference pref) { 337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return ((CheckBoxPreference) pref).isChecked(); 338afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 340f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani private void updateUseLocation() { 341f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani boolean use = mUseLocation.isChecked(); 342f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Settings.Gservices.putString(getContentResolver(), 343f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani Settings.Gservices.USE_LOCATION_FOR_SERVICES, use ? "1" : "0"); 344f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 345f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 346afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * For the user to disable keyguard, we first make them verify their 349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * existing pattern. 350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private class LockEnabledPref extends CheckBoxPreference { 352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public LockEnabledPref(Context context) { 354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super(context); 355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 357afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 358afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onClick() { 35972ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project if (mLockPatternUtils.savedPatternExists() && isChecked()) { 36072ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project confirmPatternThenDisableAndClear(); 361afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 362afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onClick(); 363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Launch screen to confirm the existing lock pattern. 369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * @see #onActivityResult(int, int, android.content.Intent) 370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 37172ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project private void confirmPatternThenDisableAndClear() { 372afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Intent intent = new Intent(); 373afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern"); 37472ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project startActivityForResult(intent, CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE); 375afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 376afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 377afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /** 37872ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project * @see #confirmPatternThenDisableAndClear 379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 381f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani protected void onActivityResult(int requestCode, int resultCode, Intent data) { 382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onActivityResult(requestCode, resultCode, data); 383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 384afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final boolean resultOk = resultCode == Activity.RESULT_OK; 385afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 386f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if ((requestCode == CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE) 387f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani && resultOk) { 388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mLockPatternUtils.setLockPatternEnabled(false); 38972ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project mLockPatternUtils.saveLockPattern(null); 390afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 391afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 392f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 393f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onClick(DialogInterface dialog, int which) { 394f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (which == DialogInterface.BUTTON_POSITIVE) { 395f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani //updateProviders(); 396f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mOkClicked = true; 397f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } else { 398f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Reset the toggle 399f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation.setChecked(false); 400f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 401f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani updateUseLocation(); 402f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 403f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani 404f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani public void onDismiss(DialogInterface dialog) { 405f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani // Assuming that onClick gets called first 406f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani if (!mOkClicked) { 407f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani mUseLocation.setChecked(false); 408f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 409f06d8698a4a2de1973a25df0c6563bdfcba4eb03Amith Yamasani } 410afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 411