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