DevelopmentSettings.java revision 24bd892bdeced9cadd0ee60bbd6a9dd9c035d54b
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 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
19b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.app.AlertDialog;
2024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasaniimport android.app.Dialog;
21b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.content.DialogInterface;
22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager;
23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties;
25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity;
27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers.
34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
35b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodpublic class DevelopmentSettings extends PreferenceActivity
36b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_ADB = "enable_adb";
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEEP_SCREEN_ON = "keep_screen_on";
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mEnableAdb;
43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mKeepScreenOn;
44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mAllowMockLocation;
45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
46b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    // To track whether Yes was clicked in the adb warning dialog
47b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    private boolean mOkClicked;
48b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
4924bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    private Dialog mOkDialog;
5024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onCreate(Bundle icicle) {
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.development_prefs);
56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB);
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON);
59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION);
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onResume() {
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mEnableAdb.setChecked(Settings.Secure.getInt(getContentResolver(),
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ADB_ENABLED, 0) != 0);
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mKeepScreenOn.setChecked(Settings.System.getInt(getContentResolver(),
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mAllowMockLocation.setChecked(Settings.Secure.getInt(getContentResolver(),
71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Those monkeys kept committing suicide, so we add this property
78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // to disable this functionality
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) {
80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mEnableAdb) {
84b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            if (mEnableAdb.isChecked()) {
85b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                mOkClicked = false;
8624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                if (mOkDialog != null) dismissDialog();
8724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                mOkDialog = new AlertDialog.Builder(this).setMessage(
88b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        getResources().getString(R.string.adb_warning_message))
89b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setTitle(R.string.adb_warning_title)
90b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setIcon(android.R.drawable.ic_dialog_alert)
91b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setPositiveButton(android.R.string.yes, this)
92b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                        .setNegativeButton(android.R.string.no, this)
9324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                        .show();
9424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani                mOkDialog.setOnDismissListener(this);
95b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            } else {
96b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood                Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 0);
97b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            }
98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mKeepScreenOn) {
99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Settings.System.putInt(getContentResolver(), Settings.System.STAY_ON_WHILE_PLUGGED_IN,
100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mKeepScreenOn.isChecked() ?
101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mAllowMockLocation) {
103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Settings.Secure.putInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION,
104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mAllowMockLocation.isChecked() ? 1 : 0);
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
10624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return false;
108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
109b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
11024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    private void dismissDialog() {
11124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        mOkDialog.dismiss();
11224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        mOkDialog = null;
11324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
11424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
115b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onClick(DialogInterface dialog, int which) {
116b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        if (which == DialogInterface.BUTTON_POSITIVE) {
117b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            mOkClicked = true;
118b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 1);
119b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        } else {
120b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            // Reset the toggle
121b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            mEnableAdb.setChecked(false);
122b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
123b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
124b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood
125b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    public void onDismiss(DialogInterface dialog) {
126b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        // Assuming that onClick gets called first
127b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        if (!mOkClicked) {
128b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood            mEnableAdb.setChecked(false);
129b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood        }
130b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood    }
13124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani
13224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    @Override
13324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    public void onDestroy() {
13424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        dismissDialog();
13524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani        super.onDestroy();
13624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani    }
137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
138