DevelopmentSettings.java revision f3b325f54dadb482d73111ab17cf6a51784de11a
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; 21ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.content.ContentResolver; 22b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwoodimport android.content.DialogInterface; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.BatteryManager; 24f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.Build; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 26f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.os.SystemProperties; 27f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.CheckBoxPreference; 28f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.ListPreference; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 30ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornimport android.preference.PreferenceFragment; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 32f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasaniimport android.preference.Preference.OnPreferenceChangeListener; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Displays preferences for application developers. 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 38ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackbornpublic class DevelopmentSettings extends PreferenceFragment 39f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener, 40f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani OnPreferenceChangeListener { 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String ENABLE_ADB = "enable_adb"; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEEP_SCREEN_ON = "keep_screen_on"; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String ALLOW_MOCK_LOCATION = "allow_mock_location"; 45f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani private static final String HDCP_CHECKING_KEY = "hdcp_checking"; 46f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking"; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mEnableAdb; 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mKeepScreenOn; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private CheckBoxPreference mAllowMockLocation; 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 52b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood // To track whether Yes was clicked in the adb warning dialog 53b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood private boolean mOkClicked; 54b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood 5524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani private Dialog mOkDialog; 5624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 58ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn public void onCreate(Bundle icicle) { 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.development_prefs); 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB); 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON); 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION); 66f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani 67f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani removeHdcpOptionsForProduction(); 68f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 69f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani 70f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani private void removeHdcpOptionsForProduction() { 71f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani if ("user".equals(Build.TYPE)) { 72f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY); 73f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani if (hdcpChecking != null) { 74f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani // Remove the preference 75f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani getPreferenceScreen().removePreference(hdcpChecking); 76f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 77f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 81ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn public void onResume() { 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 8350cb76f58554dbccc51a754a73abef2debd8b721Ying Wang 84ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn final ContentResolver cr = getActivity().getContentResolver(); 85ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mEnableAdb.setChecked(Settings.Secure.getInt(cr, 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.ADB_ENABLED, 0) != 0); 87ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mKeepScreenOn.setChecked(Settings.System.getInt(cr, 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0); 89ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mAllowMockLocation.setChecked(Settings.Secure.getInt(cr, 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0); 91f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani updateHdcpValues(); 92f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 93f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani 94f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani private void updateHdcpValues() { 95f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values 96f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY); 97f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani if (hdcpChecking != null) { 98f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY); 99f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani String[] values = getResources().getStringArray(R.array.hdcp_checking_values); 100f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries); 101f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani for (int i = 0; i < values.length; i++) { 102f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani if (currentValue.equals(values[i])) { 103f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani index = i; 104f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani break; 105f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 106f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 107f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani hdcpChecking.setValue(values[index]); 108f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani hdcpChecking.setSummary(summaries[index]); 109f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani hdcpChecking.setOnPreferenceChangeListener(this); 110f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 116a718832e28095219a897c6e95e903c1a3fe57c12Ying Wang if (Utils.isMonkeyRunning()) { 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference == mEnableAdb) { 121b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood if (mEnableAdb.isChecked()) { 122b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood mOkClicked = false; 12324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani if (mOkDialog != null) dismissDialog(); 124ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn mOkDialog = new AlertDialog.Builder(getActivity()).setMessage( 125ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn getActivity().getResources().getString(R.string.adb_warning_message)) 126b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood .setTitle(R.string.adb_warning_title) 127b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood .setIcon(android.R.drawable.ic_dialog_alert) 128b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood .setPositiveButton(android.R.string.yes, this) 129b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood .setNegativeButton(android.R.string.no, this) 13024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani .show(); 13124bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani mOkDialog.setOnDismissListener(this); 132b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood } else { 133ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.Secure.putInt(getActivity().getContentResolver(), 134ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.Secure.ADB_ENABLED, 0); 135b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood } 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mKeepScreenOn) { 137ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.System.putInt(getActivity().getContentResolver(), 138ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.System.STAY_ON_WHILE_PLUGGED_IN, 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mKeepScreenOn.isChecked() ? 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0); 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mAllowMockLocation) { 142ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.Secure.putInt(getActivity().getContentResolver(), 143ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.Secure.ALLOW_MOCK_LOCATION, 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mAllowMockLocation.isChecked() ? 1 : 0); 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 14624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 149b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood 15024bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani private void dismissDialog() { 1518ccb9e0d33dcba1bd9f26e54d7066397e47a74a9Amith Yamasani if (mOkDialog == null) return; 15224bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani mOkDialog.dismiss(); 15324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani mOkDialog = null; 15424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani } 15524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani 156b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood public void onClick(DialogInterface dialog, int which) { 157b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood if (which == DialogInterface.BUTTON_POSITIVE) { 158b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood mOkClicked = true; 159ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.Secure.putInt(getActivity().getContentResolver(), 160ee2937941d4e9a4d2cd94d504ddaa9685bcca090Dianne Hackborn Settings.Secure.ADB_ENABLED, 1); 161b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood } else { 162b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood // Reset the toggle 163b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood mEnableAdb.setChecked(false); 164b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood } 165b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood } 166b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood 167b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood public void onDismiss(DialogInterface dialog) { 168b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood // Assuming that onClick gets called first 169b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood if (!mOkClicked) { 170b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood mEnableAdb.setChecked(false); 171b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood } 172b7e46e89d77574dbb51855144ea3d46fcf220bbbMike Lockwood } 17324bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani 17424bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani @Override 17524bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani public void onDestroy() { 17624bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani dismissDialog(); 17724bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani super.onDestroy(); 17824bd892bdeced9cadd0ee60bbd6a9dd9c035d54bAmith Yamasani } 179f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani 180f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani @Override 181f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani public boolean onPreferenceChange(Preference preference, Object newValue) { 182f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani if (HDCP_CHECKING_KEY.equals(preference.getKey())) { 183f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString()); 184f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani updateHdcpValues(); 185f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani return true; 186f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 187f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani return false; 188f3b325f54dadb482d73111ab17cf6a51784de11aAmith Yamasani } 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 190