Move the main interesting DevTools settings into the main settings app.

These are in the "development" section of the settings app, expanding
on ADB and other stuff that is already there.

Change-Id: I61a4955df0c548dcf1f39be46d21e8b8d02e454a
This commit is contained in:
Dianne Hackborn
2011-07-01 18:56:09 -07:00
parent f5f40108ad
commit eddc4fe89c
4 changed files with 386 additions and 0 deletions

View File

@@ -613,6 +613,66 @@
<item>Always use HDCP checking</item> <item>Always use HDCP checking</item>
</string-array> </string-array>
<!-- Titles for window animation scale preference. [CHAR LIMIT=35] -->
<string-array name="window_animation_scale_entries">
<item>Animation off</item>
<item>Animation scale .5x</item>
<item>Animation scale 1x</item>
<item>Animation scale 1.5x</item>
<item>Animation scale 2x</item>
<item>Animation scale 5x</item>
<item>Animation scale 10x</item>
</string-array>
<!-- Values for window animation scale preference. -->
<string-array name="window_animation_scale_values" translatable="false" >
<item>0</item>
<item>.5</item>
<item>1</item>
<item>1.5</item>
<item>2</item>
<item>5</item>
<item>10</item>
</string-array>
<!-- Titles for transition animation scale preference. [CHAR LIMIT=35] -->
<string-array name="transition_animation_scale_entries">
<item>Animation off</item>
<item>Animation scale .5x</item>
<item>Animation scale 1x</item>
<item>Animation scale 1.5x</item>
<item>Animation scale 2x</item>
<item>Animation scale 5x</item>
<item>Animation scale 10x</item>
</string-array>
<!-- Values for transition animation scale preference. -->
<string-array name="transition_animation_scale_values" translatable="false" >
<item>0</item>
<item>.5</item>
<item>1</item>
<item>1.5</item>
<item>2</item>
<item>5</item>
<item>10</item>
</string-array>
<!-- Titles for app process limit preference. [CHAR LIMIT=35] -->
<string-array name="app_process_limit_entries">
<item>No app process limit</item>
<item>Max 1 app process</item>
<item>Max 2 app processes</item>
<item>Max 3 app processes</item>
</string-array>
<!-- Values for app process limit preference. -->
<string-array name="app_process_limit_values" translatable="false" >
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<!-- Match this with the constants in VpnProfile. --> <skip /> <!-- Match this with the constants in VpnProfile. --> <skip />
<!-- Short names for each VPN type, not really translatable. [CHAR LIMIT=20] --> <!-- Short names for each VPN type, not really translatable. [CHAR LIMIT=20] -->
<string-array name="vpn_types" translatable="false"> <string-array name="vpn_types" translatable="false">

View File

@@ -3408,6 +3408,48 @@ found in the list of installed applications.</string>
<!-- HDCP checking dialog title, used for debug purposes only. [CHAR LIMIT=25] --> <!-- HDCP checking dialog title, used for debug purposes only. [CHAR LIMIT=25] -->
<string name="hdcp_checking_dialog_title">Set HDCP checking behavior</string> <string name="hdcp_checking_dialog_title">Set HDCP checking behavior</string>
<!-- Preference category for user interface debugging development settings. [CHAR LIMIT=25] -->
<string name="debug_ui_category">User interface</string>
<!-- UI debug setting: always enable strict mode? [CHAR LIMIT=25] -->
<string name="strict_mode">Strict mode enabled</string>
<!-- UI debug setting: show strict mode summary [CHAR LIMIT=50] -->
<string name="strict_mode_summary">Flash screen when apps do long operations
on main thread</string>
<!-- UI debug setting: show pointer location? [CHAR LIMIT=25] -->
<string name="pointer_location">Pointer location</string>
<!-- UI debug setting: show pointer location summary [CHAR LIMIT=50] -->
<string name="pointer_location_summary">Screen overlay showing current touch data</string>
<!-- UI debug setting: show where screen updates happen? [CHAR LIMIT=25] -->
<string name="show_screen_updates">Show screen updates</string>
<!-- UI debug setting: show screen updates summary [CHAR LIMIT=50] -->
<string name="show_screen_updates_summary">Flash areas of screen when they update</string>
<!-- UI debug setting: show how CPU is being used? [CHAR LIMIT=25] -->
<string name="show_cpu_usage">Show CPU usage</string>
<!-- UI debug setting: show cpu usage summary [CHAR LIMIT=50] -->
<string name="show_cpu_usage_summary">Screen overlay showing current CPU usage</string>
<!-- UI debug setting: scaling factor for window animations [CHAR LIMIT=25] -->
<string name="window_animation_scale_title">Window animation scale</string>
<!-- UI debug setting: scaling factor for transition animations [CHAR LIMIT=25] -->
<string name="transition_animation_scale_title">Transition animation scale</string>
<!-- Preference category for application debugging development settings. [CHAR LIMIT=25] -->
<string name="debug_applications_category">Applications</string>
<!-- UI debug setting: immediately destroy activities? [CHAR LIMIT=25] -->
<string name="immediately_destroy_activities">Immediately destroy activities</string>
<!-- UI debug setting: immediately destroy activities summary [CHAR LIMIT=50] -->
<string name="immediately_destroy_activities_summary">Destroy every activity as soon as
the user leaves it</string>
<!-- UI debug setting: limit number of running application processes [CHAR LIMIT=25] -->
<string name="app_process_limit_title">Application process limit</string>
<!-- Activity title for network data usage summary. [CHAR LIMIT=25] --> <!-- Activity title for network data usage summary. [CHAR LIMIT=25] -->
<string name="data_usage_summary_title">Data usage</string> <string name="data_usage_summary_title">Data usage</string>
<!-- Title for option to pick visible time range from a list available usage periods. [CHAR LIMIT=25] --> <!-- Title for option to pick visible time range from a list available usage periods. [CHAR LIMIT=25] -->

View File

@@ -38,4 +38,61 @@
android:dialogTitle="@string/hdcp_checking_dialog_title" android:dialogTitle="@string/hdcp_checking_dialog_title"
android:entries="@array/hdcp_checking_titles" android:entries="@array/hdcp_checking_titles"
android:entryValues="@array/hdcp_checking_values" /> android:entryValues="@array/hdcp_checking_values" />
<PreferenceCategory android:key="debug_ui_category"
android:title="@string/debug_ui_category">
<CheckBoxPreference
android:key="strict_mode"
android:title="@string/strict_mode"
android:summary="@string/strict_mode_summary"/>
<CheckBoxPreference
android:key="pointer_location"
android:title="@string/pointer_location"
android:summary="@string/pointer_location_summary"/>
<CheckBoxPreference
android:key="show_screen_updates"
android:title="@string/show_screen_updates"
android:summary="@string/show_screen_updates_summary"/>
<CheckBoxPreference
android:key="show_cpu_usage"
android:title="@string/show_cpu_usage"
android:summary="@string/show_cpu_usage_summary"/>
<ListPreference
android:key="window_animation_scale"
android:title="@string/window_animation_scale_title"
android:persistent="false"
android:entries="@array/window_animation_scale_entries"
android:entryValues="@array/window_animation_scale_values" />
<ListPreference
android:key="transition_animation_scale"
android:title="@string/transition_animation_scale_title"
android:persistent="false"
android:entries="@array/transition_animation_scale_entries"
android:entryValues="@array/transition_animation_scale_values" />
</PreferenceCategory>
<PreferenceCategory android:key="debug_applications_category"
android:title="@string/debug_applications_category">
<CheckBoxPreference
android:key="immediately_destroy_activities"
android:title="@string/immediately_destroy_activities"
android:summary="@string/immediately_destroy_activities_summary"/>
<ListPreference
android:key="app_process_limit"
android:title="@string/app_process_limit_title"
android:persistent="false"
android:entries="@array/app_process_limit_entries"
android:entryValues="@array/app_process_limit_values" />
</PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -16,13 +16,20 @@
package com.android.settings; package com.android.settings;
import android.app.ActivityManagerNative;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.StrictMode;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.ListPreference; import android.preference.ListPreference;
@@ -31,6 +38,8 @@ import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceChangeListener;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils;
import android.view.IWindowManager;
/* /*
* Displays preferences for application developers. * Displays preferences for application developers.
@@ -45,10 +54,33 @@ public class DevelopmentSettings extends PreferenceFragment
private static final String HDCP_CHECKING_KEY = "hdcp_checking"; private static final String HDCP_CHECKING_KEY = "hdcp_checking";
private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking"; private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
private static final String STRICT_MODE_KEY = "strict_mode";
private static final String POINTER_LOCATION_KEY = "pointer_location";
private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
= "immediately_destroy_activities";
private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
private IWindowManager mWindowManager;
private CheckBoxPreference mEnableAdb; private CheckBoxPreference mEnableAdb;
private CheckBoxPreference mKeepScreenOn; private CheckBoxPreference mKeepScreenOn;
private CheckBoxPreference mAllowMockLocation; private CheckBoxPreference mAllowMockLocation;
private CheckBoxPreference mStrictMode;
private CheckBoxPreference mPointerLocation;
private CheckBoxPreference mShowScreenUpdates;
private CheckBoxPreference mShowCpuUsage;
private ListPreference mWindowAnimationScale;
private ListPreference mTransitionAnimationScale;
private CheckBoxPreference mImmediatelyDestroyActivities;
private ListPreference mAppProcessLimit;
// To track whether Yes was clicked in the adb warning dialog // To track whether Yes was clicked in the adb warning dialog
private boolean mOkClicked; private boolean mOkClicked;
@@ -58,12 +90,25 @@ public class DevelopmentSettings extends PreferenceFragment
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
addPreferencesFromResource(R.xml.development_prefs); addPreferencesFromResource(R.xml.development_prefs);
mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB); mEnableAdb = (CheckBoxPreference) findPreference(ENABLE_ADB);
mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON); mKeepScreenOn = (CheckBoxPreference) findPreference(KEEP_SCREEN_ON);
mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION); mAllowMockLocation = (CheckBoxPreference) findPreference(ALLOW_MOCK_LOCATION);
mStrictMode = (CheckBoxPreference) findPreference(STRICT_MODE_KEY);
mPointerLocation = (CheckBoxPreference) findPreference(POINTER_LOCATION_KEY);
mShowScreenUpdates = (CheckBoxPreference) findPreference(SHOW_SCREEN_UPDATES_KEY);
mShowCpuUsage = (CheckBoxPreference) findPreference(SHOW_CPU_USAGE_KEY);
mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
mTransitionAnimationScale = (ListPreference) findPreference(TRANSITION_ANIMATION_SCALE_KEY);
mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
mAppProcessLimit = (ListPreference) findPreference(APP_PROCESS_LIMIT_KEY);
removeHdcpOptionsForProduction(); removeHdcpOptionsForProduction();
} }
@@ -89,6 +134,13 @@ public class DevelopmentSettings extends PreferenceFragment
mAllowMockLocation.setChecked(Settings.Secure.getInt(cr, mAllowMockLocation.setChecked(Settings.Secure.getInt(cr,
Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0); Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
updateHdcpValues(); updateHdcpValues();
updateStrictModeVisualOptions();
updatePointerLocationOptions();
updateFlingerOptions();
updateCpuUsageOptions();
updateAnimationScaleOptions();
updateImmediatelyDestroyActivitiesOptions();
updateAppProcessLimitOptions();
} }
private void updateHdcpValues() { private void updateHdcpValues() {
@@ -110,6 +162,165 @@ public class DevelopmentSettings extends PreferenceFragment
} }
} }
// Returns the current state of the system property that controls
// strictmode flashes. One of:
// 0: not explicitly set one way or another
// 1: on
// 2: off
private int currentStrictModeActiveIndex() {
if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
return 0;
}
boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
return enabled ? 1 : 2;
}
private void writeStrictModeVisualOptions() {
try {
mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
? "1" : "");
} catch (RemoteException e) {
}
}
private void updateStrictModeVisualOptions() {
mStrictMode.setChecked(currentStrictModeActiveIndex() == 1);
}
private void writePointerLocationOptions() {
Settings.System.putInt(getActivity().getContentResolver(),
Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
}
private void updatePointerLocationOptions() {
mPointerLocation.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.POINTER_LOCATION, 0) != 0);
}
private void updateFlingerOptions() {
// magic communication with surface flinger.
try {
IBinder flinger = ServiceManager.getService("SurfaceFlinger");
if (flinger != null) {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken("android.ui.ISurfaceComposer");
flinger.transact(1010, data, reply, 0);
@SuppressWarnings("unused")
int showCpu = reply.readInt();
@SuppressWarnings("unused")
int enableGL = reply.readInt();
int showUpdates = reply.readInt();
mShowScreenUpdates.setChecked(showUpdates != 0);
@SuppressWarnings("unused")
int showBackground = reply.readInt();
reply.recycle();
data.recycle();
}
} catch (RemoteException ex) {
}
}
private void writeFlingerOptions() {
try {
IBinder flinger = ServiceManager.getService("SurfaceFlinger");
if (flinger != null) {
Parcel data = Parcel.obtain();
data.writeInterfaceToken("android.ui.ISurfaceComposer");
data.writeInt(mShowScreenUpdates.isChecked() ? 1 : 0);
flinger.transact(1002, data, null, 0);
data.recycle();
updateFlingerOptions();
}
} catch (RemoteException ex) {
}
}
private void updateCpuUsageOptions() {
mShowCpuUsage.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.SHOW_PROCESSES, 0) != 0);
}
private void writeCpuUsageOptions() {
boolean value = mShowCpuUsage.isChecked();
Settings.System.putInt(getActivity().getContentResolver(),
Settings.System.SHOW_PROCESSES, value ? 1 : 0);
Intent service = (new Intent())
.setClassName("android", "com.android.server.LoadAverageService");
if (value) {
getActivity().startService(service);
} else {
getActivity().stopService(service);
}
}
private void writeImmediatelyDestroyActivitiesOptions() {
try {
ActivityManagerNative.getDefault().setAlwaysFinish(
mImmediatelyDestroyActivities.isChecked());
} catch (RemoteException ex) {
}
}
private void updateImmediatelyDestroyActivitiesOptions() {
mImmediatelyDestroyActivities.setChecked(Settings.System.getInt(
getActivity().getContentResolver(), Settings.System.ALWAYS_FINISH_ACTIVITIES, 0) != 0);
}
private void updateAnimationScaleValue(int which, ListPreference pref) {
try {
float scale = mWindowManager.getAnimationScale(which);
CharSequence[] values = pref.getEntryValues();
for (int i=0; i<values.length; i++) {
float val = Float.parseFloat(values[i].toString());
if (scale <= val) {
pref.setValueIndex(i);
return;
}
}
pref.setValueIndex(values.length-1);
} catch (RemoteException e) {
}
}
private void updateAnimationScaleOptions() {
updateAnimationScaleValue(0, mWindowAnimationScale);
updateAnimationScaleValue(1, mTransitionAnimationScale);
}
private void writeAnimationScaleOption(int which, ListPreference pref) {
try {
float scale = Float.parseFloat(pref.getValue().toString());
mWindowManager.setAnimationScale(which, scale);
} catch (RemoteException e) {
}
}
private void updateAppProcessLimitOptions() {
try {
int limit = ActivityManagerNative.getDefault().getProcessLimit();
CharSequence[] values = mAppProcessLimit.getEntryValues();
for (int i=0; i<values.length; i++) {
int val = Integer.parseInt(values[i].toString());
if (val >= limit) {
mAppProcessLimit.setValueIndex(i);
return;
}
}
mAppProcessLimit.setValueIndex(0);
} catch (RemoteException e) {
}
}
private void writeAppProcessLimitOptions() {
try {
int limit = Integer.parseInt(mAppProcessLimit.getValue().toString());
ActivityManagerNative.getDefault().setProcessLimit(limit);
} catch (RemoteException e) {
}
}
@Override @Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
@@ -142,6 +353,22 @@ public class DevelopmentSettings extends PreferenceFragment
Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.putInt(getActivity().getContentResolver(),
Settings.Secure.ALLOW_MOCK_LOCATION, Settings.Secure.ALLOW_MOCK_LOCATION,
mAllowMockLocation.isChecked() ? 1 : 0); mAllowMockLocation.isChecked() ? 1 : 0);
} else if (preference == mStrictMode) {
writeStrictModeVisualOptions();
} else if (preference == mPointerLocation) {
writePointerLocationOptions();
} else if (preference == mShowScreenUpdates) {
writeFlingerOptions();
} else if (preference == mShowCpuUsage) {
writeCpuUsageOptions();
} else if (preference == mWindowAnimationScale) {
writeAnimationScaleOption(0, mWindowAnimationScale);
} else if (preference == mTransitionAnimationScale) {
writeAnimationScaleOption(1, mTransitionAnimationScale);
} else if (preference == mImmediatelyDestroyActivities) {
writeImmediatelyDestroyActivitiesOptions();
} else if (preference == mAppProcessLimit) {
writeAppProcessLimitOptions();
} }
return false; return false;