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