Merge "Settings to control traces." into jb-dev

This commit is contained in:
Dianne Hackborn
2012-05-08 18:55:30 -07:00
committed by Android (Google) Code Review
3 changed files with 182 additions and 63 deletions

View File

@@ -39,8 +39,10 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.StrictMode;
import android.os.SystemProperties;
import android.os.Trace;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.MultiCheckPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
@@ -85,6 +87,8 @@ public class DevelopmentSettings extends PreferenceFragment
private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
private static final String ENABLE_TRACES_KEY = "enable_traces";
private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
= "immediately_destroy_activities";
private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
@@ -98,6 +102,7 @@ public class DevelopmentSettings extends PreferenceFragment
private Switch mEnabledSwitch;
private boolean mLastEnabledState;
private boolean mHaveDebugSettings;
private CheckBoxPreference mEnableAdb;
private CheckBoxPreference mKeepScreenOn;
@@ -121,6 +126,7 @@ public class DevelopmentSettings extends PreferenceFragment
private ListPreference mWindowAnimationScale;
private ListPreference mTransitionAnimationScale;
private ListPreference mAnimatorDurationScale;
private MultiCheckPreference mEnableTracesPref;
private CheckBoxPreference mImmediatelyDestroyActivities;
private ListPreference mAppProcessLimit;
@@ -174,6 +180,15 @@ public class DevelopmentSettings extends PreferenceFragment
mAnimatorDurationScale = (ListPreference) findPreference(ANIMATOR_DURATION_SCALE_KEY);
mAllPrefs.add(mAnimatorDurationScale);
mAnimatorDurationScale.setOnPreferenceChangeListener(this);
mEnableTracesPref = (MultiCheckPreference)findPreference(ENABLE_TRACES_KEY);
String[] traceValues = new String[Trace.TRACE_TAGS.length];
for (int i=Trace.TRACE_FLAGS_START_BIT; i<traceValues.length; i++) {
traceValues[i] = Integer.toString(1<<i);
}
mEnableTracesPref.setEntries(Trace.TRACE_TAGS);
mEnableTracesPref.setEntryValues(traceValues);
mAllPrefs.add(mEnableTracesPref);
mEnableTracesPref.setOnPreferenceChangeListener(this);
mImmediatelyDestroyActivities = (CheckBoxPreference) findPreference(
IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
@@ -265,15 +280,32 @@ public class DevelopmentSettings extends PreferenceFragment
Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
mEnabledSwitch.setChecked(mLastEnabledState);
setPrefsEnabledState(mLastEnabledState);
if (mHaveDebugSettings && !mLastEnabledState) {
// Overall debugging is disabled, but there are some debug
// settings that are enabled. This is an invalid state. Switch
// to debug settings being enabled, so the user knows there is
// stuff enabled and can turn it all off if they want.
Settings.Secure.putInt(getActivity().getContentResolver(),
Settings.Secure.DEVELOPMENT_SETTINGS_ENABLED, 1);
mLastEnabledState = true;
setPrefsEnabledState(mLastEnabledState);
}
}
void updateCheckBox(CheckBoxPreference checkBox, boolean value) {
checkBox.setChecked(value);
mHaveDebugSettings |= value;
}
private void updateAllOptions() {
final ContentResolver cr = getActivity().getContentResolver();
mEnableAdb.setChecked(Settings.Secure.getInt(cr,
mHaveDebugSettings = false;
updateCheckBox(mEnableAdb, Settings.Secure.getInt(cr,
Settings.Secure.ADB_ENABLED, 0) != 0);
mKeepScreenOn.setChecked(Settings.System.getInt(cr,
updateCheckBox(mKeepScreenOn, Settings.System.getInt(cr,
Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
mAllowMockLocation.setChecked(Settings.Secure.getInt(cr,
updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
updateHdcpValues();
updatePasswordSummary();
@@ -288,6 +320,7 @@ public class DevelopmentSettings extends PreferenceFragment
updateShowHwScreenUpdatesOptions();
updateDebugLayoutOptions();
updateAnimationScaleOptions();
updateEnableTracesOptions();
updateImmediatelyDestroyActivitiesOptions();
updateAppProcessLimitOptions();
updateShowAllANRsOptions();
@@ -305,7 +338,9 @@ public class DevelopmentSettings extends PreferenceFragment
writeAnimationScaleOption(0, mWindowAnimationScale, null);
writeAnimationScaleOption(1, mTransitionAnimationScale, null);
writeAnimationScaleOption(2, mAnimatorDurationScale, null);
writeEnableTracesOptions(0);
writeAppProcessLimitOptions(null);
mHaveDebugSettings = false;
updateAllOptions();
}
@@ -359,7 +394,7 @@ public class DevelopmentSettings extends PreferenceFragment
private void updateDebuggerOptions() {
mDebugApp = Settings.System.getString(
getActivity().getContentResolver(), Settings.System.DEBUG_APP);
mWaitForDebugger.setChecked(Settings.System.getInt(
updateCheckBox(mWaitForDebugger, Settings.System.getInt(
getActivity().getContentResolver(), Settings.System.WAIT_FOR_DEBUGGER, 0) != 0);
if (mDebugApp != null && mDebugApp.length() > 0) {
String label;
@@ -373,6 +408,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
mWaitForDebugger.setEnabled(true);
mHaveDebugSettings = true;
} else {
mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
mWaitForDebugger.setEnabled(false);
@@ -401,7 +437,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateStrictModeVisualOptions() {
mStrictMode.setChecked(currentStrictModeActiveIndex() == 1);
updateCheckBox(mStrictMode, currentStrictModeActiveIndex() == 1);
}
private void writePointerLocationOptions() {
@@ -410,7 +446,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updatePointerLocationOptions() {
mPointerLocation.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
updateCheckBox(mPointerLocation, Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.POINTER_LOCATION, 0) != 0);
}
@@ -420,7 +456,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateShowTouchesOptions() {
mShowTouches.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
updateCheckBox(mShowTouches, Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.SHOW_TOUCHES, 0) != 0);
}
@@ -438,11 +474,11 @@ public class DevelopmentSettings extends PreferenceFragment
@SuppressWarnings("unused")
int enableGL = reply.readInt();
int showUpdates = reply.readInt();
mShowScreenUpdates.setChecked(showUpdates != 0);
updateCheckBox(mShowScreenUpdates, showUpdates != 0);
@SuppressWarnings("unused")
int showBackground = reply.readInt();
int disableOverlays = reply.readInt();
mDisableOverlays.setChecked(disableOverlays != 0);
updateCheckBox(mDisableOverlays, disableOverlays != 0);
reply.recycle();
data.recycle();
}
@@ -485,7 +521,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateHardwareUiOptions() {
mForceHardwareUi.setChecked(SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
updateCheckBox(mForceHardwareUi, SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
}
private void writeHardwareUiOptions() {
@@ -493,7 +529,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateTrackFrameTimeOptions() {
mTrackFrameTime.setChecked(
updateCheckBox(mTrackFrameTime,
SystemProperties.getBoolean(HardwareRenderer.PROFILE_PROPERTY, false));
}
@@ -503,7 +539,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateShowHwScreenUpdatesOptions() {
mShowHwScreenUpdates.setChecked(
updateCheckBox(mShowHwScreenUpdates,
SystemProperties.getBoolean(HardwareRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
}
@@ -513,7 +549,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateDebugLayoutOptions() {
mDebugLayout.setChecked(
updateCheckBox(mDebugLayout,
SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
}
@@ -523,7 +559,7 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateCpuUsageOptions() {
mShowCpuUsage.setChecked(Settings.System.getInt(getActivity().getContentResolver(),
updateCheckBox(mShowCpuUsage, Settings.System.getInt(getActivity().getContentResolver(),
Settings.System.SHOW_PROCESSES, 0) != 0);
}
@@ -549,13 +585,16 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateImmediatelyDestroyActivitiesOptions() {
mImmediatelyDestroyActivities.setChecked(Settings.System.getInt(
updateCheckBox(mImmediatelyDestroyActivities, 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);
if (scale != 1) {
mHaveDebugSettings = true;
}
CharSequence[] values = pref.getEntryValues();
for (int i=0; i<values.length; i++) {
float val = Float.parseFloat(values[i].toString());
@@ -593,6 +632,9 @@ public class DevelopmentSettings extends PreferenceFragment
for (int i=0; i<values.length; i++) {
int val = Integer.parseInt(values[i].toString());
if (val >= limit) {
if (i != 0) {
mHaveDebugSettings = true;
}
mAppProcessLimit.setValueIndex(i);
mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
return;
@@ -620,10 +662,51 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateShowAllANRsOptions() {
mShowAllANRs.setChecked(Settings.Secure.getInt(
updateCheckBox(mShowAllANRs, Settings.Secure.getInt(
getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
}
private void updateEnableTracesOptions() {
String strValue = SystemProperties.get(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS);
long flags = SystemProperties.getLong(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS, 0);
String[] values = mEnableTracesPref.getEntryValues();
int numSet = 0;
for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
boolean set = (flags&(1<<i)) != 0;
mEnableTracesPref.setValue(i-Trace.TRACE_FLAGS_START_BIT, set);
if (set) {
numSet++;
}
}
if (numSet == 0) {
mEnableTracesPref.setSummary(R.string.enable_traces_summary_none);
} else if (numSet == values.length) {
mHaveDebugSettings = true;
mEnableTracesPref.setSummary(R.string.enable_traces_summary_all);
} else {
mHaveDebugSettings = true;
mEnableTracesPref.setSummary(getString(R.string.enable_traces_summary_num, numSet));
}
}
private void writeEnableTracesOptions() {
long value = 0;
String[] values = mEnableTracesPref.getEntryValues();
for (int i=Trace.TRACE_FLAGS_START_BIT; i<values.length; i++) {
if (mEnableTracesPref.getValue(i-Trace.TRACE_FLAGS_START_BIT)) {
value |= 1<<i;
}
}
writeEnableTracesOptions(value);
// Make sure summary is updated.
updateEnableTracesOptions();
}
private void writeEnableTracesOptions(long value) {
SystemProperties.set(Trace.PROPERTY_TRACE_TAG_ENABLEFLAGS,
"0x" + Long.toString(value, 16));
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView == mEnabledSwitch) {
@@ -744,6 +827,9 @@ public class DevelopmentSettings extends PreferenceFragment
} else if (preference == mAnimatorDurationScale) {
writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
return true;
} else if (preference == mEnableTracesPref) {
writeEnableTracesOptions();
return true;
} else if (preference == mAppProcessLimit) {
writeAppProcessLimitOptions(newValue);
return true;