Merge "More migration to Global settings." into jb-mr1-dev
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 6b1c3f9a..14e1fc8 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -670,6 +670,22 @@
<item>1280x720/213;1920x1080/320</item>
</string-array>
+ <!-- Titles for OpenGL traces preference. [CHAR LIMIT=35] -->
+ <string-array name="enable_opengl_traces_entries">
+ <item>None</item>
+ <item>Logcat</item>
+ <item>Systrace (Graphics)</item>
+ <item>Call stack on glGetError</item>
+ </string-array>
+
+ <!-- Values for OpenGL traces preference. -->
+ <string-array name="enable_opengl_traces_values" translatable="false" >
+ <item>0</item>
+ <item>1</item>
+ <item>systrace</item>
+ <item>error</item>
+ </string-array>
+
<!-- Titles for app process limit preference. [CHAR LIMIT=35] -->
<string-array name="app_process_limit_entries">
<item>Standard limit</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5310c7b..2a60dd1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3954,6 +3954,9 @@
<!-- UI debug setting: enable low-level traces, all enabled summary [CHAR LIMIT=NONE] -->
<string name="enable_traces_summary_all">All traces currently enabled</string>
+ <!-- UI debug setting: enable various types of OpenGL traces [CHAR LIMIT=25] -->
+ <string name="enable_opengl_traces_title">Enable OpenGL traces</string>
+
<!-- UI debug setting: show layout bounds information [CHAR LIMIT=25] -->
<string name="debug_layout">Show layout bounds</string>
<!-- UI debug setting: show layout bounds information summary [CHAR LIMIT=50] -->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 1f08eaa..e67aad1 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -188,6 +188,13 @@
android:title="@string/track_frame_time"
android:summary="@string/track_frame_time_summary"/>
+ <ListPreference
+ android:key="enable_opengl_traces"
+ android:title="@string/enable_opengl_traces_title"
+ android:persistent="false"
+ android:entries="@array/enable_opengl_traces_entries"
+ android:entryValues="@array/enable_opengl_traces_values" />
+
<MultiCheckPreference
android:key="enable_traces"
android:title="@string/enable_traces_title"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 80e756e..e490aa6 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -95,6 +95,7 @@
private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
private static final String MSAA_PROPERTY = "debug.egl.force_msaa";
private static final String BUGREPORT_IN_POWER_KEY = "bugreport_in_power";
+ private static final String OPENGL_TRACES_PROPERTY = "debug.egl.trace";
private static final String DEBUG_APP_KEY = "debug_app";
private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
@@ -117,6 +118,7 @@
private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category";
+ private static final String OPENGL_TRACES_KEY = "enable_opengl_traces";
private static final String ENABLE_TRACES_KEY = "enable_traces";
@@ -170,6 +172,7 @@
private ListPreference mTransitionAnimationScale;
private ListPreference mAnimatorDurationScale;
private ListPreference mOverlayDisplayDevices;
+ private ListPreference mOpenGLTraces;
private MultiCheckPreference mEnableTracesPref;
private CheckBoxPreference mImmediatelyDestroyActivities;
@@ -245,6 +248,9 @@
mOverlayDisplayDevices = (ListPreference) findPreference(OVERLAY_DISPLAY_DEVICES_KEY);
mAllPrefs.add(mOverlayDisplayDevices);
mOverlayDisplayDevices.setOnPreferenceChangeListener(this);
+ mOpenGLTraces = (ListPreference) findPreference(OPENGL_TRACES_KEY);
+ mAllPrefs.add(mOpenGLTraces);
+ mOpenGLTraces.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++) {
@@ -405,6 +411,7 @@
updateDebugLayoutOptions();
updateAnimationScaleOptions();
updateOverlayDisplayDevicesOptions();
+ updateOpenGLTracesOptions();
updateEnableTracesOptions();
updateImmediatelyDestroyActivitiesOptions();
updateAppProcessLimitOptions();
@@ -811,6 +818,30 @@
updateOverlayDisplayDevicesOptions();
}
+ private void updateOpenGLTracesOptions() {
+ String value = SystemProperties.get(OPENGL_TRACES_PROPERTY);
+ if (value == null) {
+ value = "";
+ }
+
+ CharSequence[] values = mOpenGLTraces.getEntryValues();
+ for (int i = 0; i < values.length; i++) {
+ if (value.contentEquals(values[i])) {
+ mOpenGLTraces.setValueIndex(i);
+ mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[i]);
+ return;
+ }
+ }
+ mOpenGLTraces.setValueIndex(0);
+ mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[0]);
+ }
+
+ private void writeOpenGLTracesOptions(Object newValue) {
+ SystemProperties.set(OPENGL_TRACES_PROPERTY, newValue == null ? "" : newValue.toString());
+ pokeSystemProperties();
+ updateOpenGLTracesOptions();
+ }
+
private void updateAppProcessLimitOptions() {
try {
int limit = ActivityManagerNative.getDefault().getProcessLimit();
@@ -1037,6 +1068,9 @@
} else if (preference == mOverlayDisplayDevices) {
writeOverlayDisplayDevicesOptions(newValue);
return true;
+ } else if (preference == mOpenGLTraces) {
+ writeOpenGLTracesOptions(newValue);
+ return true;
} else if (preference == mEnableTracesPref) {
writeEnableTracesOptions();
return true;
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index 7ef0695..df13eef 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -37,13 +37,15 @@
public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener {
private final Context mContext;
private Switch mSwitch;
-
+ private boolean mValidListener;
private final LocalBluetoothAdapter mLocalAdapter;
private final IntentFilter mIntentFilter;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
+ // Broadcast receiver is always running on the UI thread here,
+ // so we don't need consider thread synchronization.
int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
handleStateChanged(state);
}
@@ -52,6 +54,7 @@
public BluetoothEnabler(Context context, Switch switch_) {
mContext = context;
mSwitch = switch_;
+ mValidListener = false;
LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
if (manager == null) {
@@ -75,6 +78,7 @@
mContext.registerReceiver(mReceiver, mIntentFilter);
mSwitch.setOnCheckedChangeListener(this);
+ mValidListener = true;
}
public void pause() {
@@ -84,19 +88,20 @@
mContext.unregisterReceiver(mReceiver);
mSwitch.setOnCheckedChangeListener(null);
+ mValidListener = false;
}
public void setSwitch(Switch switch_) {
if (mSwitch == switch_) return;
mSwitch.setOnCheckedChangeListener(null);
mSwitch = switch_;
- mSwitch.setOnCheckedChangeListener(this);
+ mSwitch.setOnCheckedChangeListener(mValidListener ? this : null);
int bluetoothState = BluetoothAdapter.STATE_OFF;
if (mLocalAdapter != null) bluetoothState = mLocalAdapter.getBluetoothState();
boolean isOn = bluetoothState == BluetoothAdapter.STATE_ON;
boolean isOff = bluetoothState == BluetoothAdapter.STATE_OFF;
- mSwitch.setChecked(isOn);
+ setChecked(isOn);
mSwitch.setEnabled(isOn || isOff);
}
@@ -121,19 +126,33 @@
mSwitch.setEnabled(false);
break;
case BluetoothAdapter.STATE_ON:
- mSwitch.setChecked(true);
+ setChecked(true);
mSwitch.setEnabled(true);
break;
case BluetoothAdapter.STATE_TURNING_OFF:
mSwitch.setEnabled(false);
break;
case BluetoothAdapter.STATE_OFF:
- mSwitch.setChecked(false);
+ setChecked(false);
mSwitch.setEnabled(true);
break;
default:
- mSwitch.setChecked(false);
+ setChecked(false);
mSwitch.setEnabled(true);
}
}
+
+ private void setChecked(boolean isChecked) {
+ if (isChecked != mSwitch.isChecked()) {
+ // set listener to null, so onCheckedChanged won't be called
+ // if the checked status on Switch isn't changed by user click
+ if (mValidListener) {
+ mSwitch.setOnCheckedChangeListener(null);
+ }
+ mSwitch.setChecked(isChecked);
+ if (mValidListener) {
+ mSwitch.setOnCheckedChangeListener(this);
+ }
+ }
+ }
}