summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/DevelopmentSettings.java
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2012-02-02 11:44:08 -0800
committerDianne Hackborn <hackbod@google.com>2012-02-02 15:03:36 -0800
commit14dc2d4b84f544c4006646615d8d352f6346111a (patch)
tree78a8047210920351cffe6859a06047c42fb9895c /src/com/android/settings/DevelopmentSettings.java
parentb29e7870de4238cbfa8eb7f3709bed7b49eeacdb (diff)
downloadpackages_apps_settings-14dc2d4b84f544c4006646615d8d352f6346111a.zip
packages_apps_settings-14dc2d4b84f544c4006646615d8d352f6346111a.tar.gz
packages_apps_settings-14dc2d4b84f544c4006646615d8d352f6346111a.tar.bz2
New switch to enable/disable all developer settings.
Turning the switch on shows a dialog warning the user to not do this. Turning the switch off resets all development settings. Change-Id: I052b16e6d220fa60298799ace02e69a8a1a02ef2
Diffstat (limited to 'src/com/android/settings/DevelopmentSettings.java')
-rw-r--r--src/com/android/settings/DevelopmentSettings.java212
1 files changed, 188 insertions, 24 deletions
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 4a292c4..394cf82 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -16,6 +16,10 @@
package com.android.settings;
+import java.util.ArrayList;
+
+import android.app.ActionBar;
+import android.app.Activity;
import android.app.ActivityManagerNative;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -38,19 +42,23 @@ import android.os.SystemProperties;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
+import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener;
import android.provider.Settings;
import android.text.TextUtils;
+import android.view.Gravity;
import android.view.IWindowManager;
+import android.widget.CompoundButton;
+import android.widget.Switch;
/*
* Displays preferences for application developers.
*/
public class DevelopmentSettings extends PreferenceFragment
implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
- OnPreferenceChangeListener {
+ OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
private static final String ENABLE_ADB = "enable_adb";
@@ -81,6 +89,9 @@ public class DevelopmentSettings extends PreferenceFragment
private IWindowManager mWindowManager;
private IBackupManager mBackupManager;
+ private Switch mEnabledSwitch;
+ private boolean mLastEnabledState;
+
private CheckBoxPreference mEnableAdb;
private CheckBoxPreference mKeepScreenOn;
private CheckBoxPreference mAllowMockLocation;
@@ -101,10 +112,14 @@ public class DevelopmentSettings extends PreferenceFragment
private CheckBoxPreference mShowAllANRs;
- // To track whether Yes was clicked in the adb warning dialog
- private boolean mOkClicked;
+ private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
+ private final ArrayList<CheckBoxPreference> mResetCbPrefs
+ = new ArrayList<CheckBoxPreference>();
- private Dialog mOkDialog;
+ // To track whether a confirmation dialog was clicked.
+ private boolean mDialogClicked;
+ private Dialog mEnableDialog;
+ private Dialog mAdbDialog;
@Override
public void onCreate(Bundle icicle) {
@@ -117,30 +132,58 @@ public class DevelopmentSettings extends PreferenceFragment
addPreferencesFromResource(R.xml.development_prefs);
mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB);
+ mAllPrefs.add(mEnableAdb);
+ mResetCbPrefs.add(mEnableAdb);
mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON);
+ mAllPrefs.add(mKeepScreenOn);
+ mResetCbPrefs.add(mKeepScreenOn);
mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION);
+ mAllPrefs.add(mAllowMockLocation);
+ mResetCbPrefs.add(mAllowMockLocation);
mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
+ mAllPrefs.add(mPassword);
mStrictMode = (CheckBoxPreference) findPreference(STRICT_MODE_KEY);
+ mAllPrefs.add(mStrictMode);
+ mResetCbPrefs.add(mStrictMode);
+ mResetCbPrefs.add(mAllowMockLocation);
mPointerLocation = (CheckBoxPreference) findPreference(POINTER_LOCATION_KEY);
+ mAllPrefs.add(mPointerLocation);
+ mResetCbPrefs.add(mPointerLocation);
mShowTouches = (CheckBoxPreference) findPreference(SHOW_TOUCHES_KEY);
+ mAllPrefs.add(mShowTouches);
+ mResetCbPrefs.add(mShowTouches);
mShowScreenUpdates = (CheckBoxPreference) findPreference(SHOW_SCREEN_UPDATES_KEY);
+ mAllPrefs.add(mShowScreenUpdates);
+ mResetCbPrefs.add(mShowScreenUpdates);
mShowCpuUsage = (CheckBoxPreference) findPreference(SHOW_CPU_USAGE_KEY);
+ mAllPrefs.add(mShowCpuUsage);
+ mResetCbPrefs.add(mShowCpuUsage);
mForceHardwareUi = (CheckBoxPreference) findPreference(FORCE_HARDWARE_UI_KEY);
+ mAllPrefs.add(mForceHardwareUi);
+ mResetCbPrefs.add(mForceHardwareUi);
mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
+ mAllPrefs.add(mWindowAnimationScale);
mWindowAnimationScale.setOnPreferenceChangeListener(this);
mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
+ mAllPrefs.add(mTransitionAnimationScale);
mTransitionAnimationScale.setOnPreferenceChangeListener(this);
mAnimatorDurationScale = (ListPreference) findPreference(ANIMATOR_DURATION_SCALE_KEY);
+ mAllPrefs.add(mAnimatorDurationScale);
mAnimatorDurationScale.setOnPreferenceChangeListener(this);
mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
+ mAllPrefs.add(mImmediatelyDestroyActivities);
+ mResetCbPrefs.add(mImmediatelyDestroyActivities);
mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
+ mAllPrefs.add(mAppProcessLimit);
mAppProcessLimit.setOnPreferenceChangeListener(this);
mShowAllANRs = (CheckBoxPreference) findPreference(
SHOW_ALL_ANRS_KEY);
+ mAllPrefs.add(mShowAllANRs);
+ mResetCbPrefs.add(mShowAllANRs);
final Preference verifierDeviceIdentifier = findPreference(VERIFIER_DEVICE_IDENTIFIER);
final PackageManager pm = getActivity().getPackageManager();
@@ -149,24 +192,77 @@ public class DevelopmentSettings extends PreferenceFragment
verifierDeviceIdentifier.setSummary(verifierIndentity.toString());
}
+ Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
+ if (hdcpChecking != null) {
+ mAllPrefs.add(hdcpChecking);
+ }
removeHdcpOptionsForProduction();
}
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ final Activity activity = getActivity();
+ mEnabledSwitch = new Switch(activity);
+
+ final int padding = activity.getResources().getDimensionPixelSize(
+ R.dimen.action_bar_switch_padding);
+ mEnabledSwitch.setPadding(0, 0, padding, 0);
+ mEnabledSwitch.setOnCheckedChangeListener(this);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ final Activity activity = getActivity();
+ activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
+ ActionBar.DISPLAY_SHOW_CUSTOM);
+ activity.getActionBar().setCustomView(mEnabledSwitch, new ActionBar.LayoutParams(
+ ActionBar.LayoutParams.WRAP_CONTENT,
+ ActionBar.LayoutParams.WRAP_CONTENT,
+ Gravity.CENTER_VERTICAL | Gravity.RIGHT));
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ final Activity activity = getActivity();
+ activity.getActionBar().setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM);
+ activity.getActionBar().setCustomView(null);
+ }
+
private void removeHdcpOptionsForProduction() {
if ("user".equals(Build.TYPE)) {
Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
if (hdcpChecking != null) {
// Remove the preference
getPreferenceScreen().removePreference(hdcpChecking);
+ mAllPrefs.remove(hdcpChecking);
}
}
}
+ private void setPrefsEnabledState(boolean enabled) {
+ for (int i=0; i<mAllPrefs.size(); i++) {
+ mAllPrefs.get(i).setEnabled(enabled);
+ }
+ }
+
@Override
public void onResume() {
super.onResume();
final ContentResolver cr = getActivity().getContentResolver();
+ mLastEnabledState = Settings.Secure.getInt(cr,
+ Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+ mEnabledSwitch.setChecked(mLastEnabledState);
+ setPrefsEnabledState(mLastEnabledState);
+ updateAllOptions();
+ }
+
+ private void updateAllOptions() {
+ final ContentResolver cr = getActivity().getContentResolver();
mEnableAdb.setChecked(Settings.Secure.getInt(cr,
Settings.Secure.ADB_ENABLED, 0) != 0);
mKeepScreenOn.setChecked(Settings.System.getInt(cr,
@@ -187,6 +283,21 @@ public class DevelopmentSettings extends PreferenceFragment
updateShowAllANRsOptions();
}
+ private void resetDangerousOptions() {
+ for (int i=0; i<mResetCbPrefs.size(); i++) {
+ CheckBoxPreference cb = mResetCbPrefs.get(i);
+ if (cb.isChecked()) {
+ cb.setChecked(false);
+ onPreferenceTreeClick(null, cb);
+ }
+ }
+ writeAnimationScaleOption(0, mWindowAnimationScale, null);
+ writeAnimationScaleOption(1, mTransitionAnimationScale, null);
+ writeAnimationScaleOption(2, mAnimatorDurationScale, null);
+ writeAppProcessLimitOptions(null);
+ updateAllOptions();
+ }
+
private void updateHdcpValues() {
int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
@@ -368,7 +479,7 @@ public class DevelopmentSettings extends PreferenceFragment
private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
try {
- float scale = Float.parseFloat(newValue.toString());
+ float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
mWindowManager.setAnimationScale(which, scale);
updateAnimationScaleValue(which, pref);
} catch (RemoteException e) {
@@ -395,7 +506,7 @@ public class DevelopmentSettings extends PreferenceFragment
private void writeAppProcessLimitOptions(Object newValue) {
try {
- int limit = Integer.parseInt(newValue.toString());
+ int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
ActivityManagerNative.getDefault().setProcessLimit(limit);
updateAppProcessLimitOptions();
} catch (RemoteException e) {
@@ -414,6 +525,33 @@ public class DevelopmentSettings extends PreferenceFragment
}
@Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ if (buttonView == mEnabledSwitch) {
+ if (isChecked != mLastEnabledState) {
+ if (isChecked) {
+ mDialogClicked = false;
+ if (mEnableDialog != null) dismissDialogs();
+ mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
+ getActivity().getResources().getString(
+ R.string.dev_settings_warning_message))
+ .setTitle(R.string.dev_settings_warning_title)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setPositiveButton(android.R.string.yes, this)
+ .setNegativeButton(android.R.string.no, this)
+ .show();
+ mEnableDialog.setOnDismissListener(this);
+ } else {
+ resetDangerousOptions();
+ Settings.Secure.putInt(getActivity().getContentResolver(),
+ Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 0);
+ mLastEnabledState = isChecked;
+ setPrefsEnabledState(mLastEnabledState);
+ }
+ }
+ }
+ }
+
+ @Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (Utils.isMonkeyRunning()) {
@@ -422,16 +560,16 @@ public class DevelopmentSettings extends PreferenceFragment
if (preference == mEnableAdb) {
if (mEnableAdb.isChecked()) {
- mOkClicked = false;
- if (mOkDialog != null) dismissDialog();
- mOkDialog = new AlertDialog.Builder(getActivity()).setMessage(
+ mDialogClicked = false;
+ if (mAdbDialog != null) dismissDialogs();
+ mAdbDialog = new AlertDialog.Builder(getActivity()).setMessage(
getActivity().getResources().getString(R.string.adb_warning_message))
.setTitle(R.string.adb_warning_title)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, this)
.setNegativeButton(android.R.string.no, this)
.show();
- mOkDialog.setOnDismissListener(this);
+ mAdbDialog.setOnDismissListener(this);
} else {
Settings.Secure.putInt(getActivity().getContentResolver(),
Settings.Secure.ADB_ENABLED, 0);
@@ -488,33 +626,59 @@ public class DevelopmentSettings extends PreferenceFragment
return false;
}
- private void dismissDialog() {
- if (mOkDialog == null) return;
- mOkDialog.dismiss();
- mOkDialog = null;
+ private void dismissDialogs() {
+ if (mAdbDialog != null) {
+ mAdbDialog.dismiss();
+ mAdbDialog = null;
+ }
+ if (mEnableDialog != null) {
+ mEnableDialog.dismiss();
+ mEnableDialog = null;
+ }
}
public void onClick(DialogInterface dialog, int which) {
- if (which == DialogInterface.BUTTON_POSITIVE) {
- mOkClicked = true;
- Settings.Secure.putInt(getActivity().getContentResolver(),
- Settings.Secure.ADB_ENABLED, 1);
- } else {
- // Reset the toggle
- mEnableAdb.setChecked(false);
+ if (dialog == mAdbDialog) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ mDialogClicked = true;
+ Settings.Secure.putInt(getActivity().getContentResolver(),
+ Settings.Secure.ADB_ENABLED, 1);
+ } else {
+ // Reset the toggle
+ mEnableAdb.setChecked(false);
+ }
+ } else if (dialog == mEnableDialog) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ mDialogClicked = true;
+ Settings.Secure.putInt(getActivity().getContentResolver(),
+ Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 1);
+ mLastEnabledState = true;
+ setPrefsEnabledState(mLastEnabledState);
+ } else {
+ // Reset the toggle
+ mEnabledSwitch.setChecked(false);
+ }
}
}
public void onDismiss(DialogInterface dialog) {
// Assuming that onClick gets called first
- if (!mOkClicked) {
- mEnableAdb.setChecked(false);
+ if (dialog == mAdbDialog) {
+ if (!mDialogClicked) {
+ mEnableAdb.setChecked(false);
+ }
+ mAdbDialog = null;
+ } else if (dialog == mEnableDialog) {
+ if (!mDialogClicked) {
+ mEnabledSwitch.setChecked(false);
+ }
+ mEnableDialog = null;
}
}
@Override
public void onDestroy() {
- dismissDialog();
+ dismissDialogs();
super.onDestroy();
}
}