diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 4c48c6b3167..1f436f40a34 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1283,4 +1283,29 @@
- @color/red_500
- @color/orange_500
+
+
+
+ - MTP (Media Transfer Protocol)
+ - PTP (Picture Transfer Protocol)
+ - RNDIS (USB Ethernet)
+ - Audio Source
+
+
+
+
+
+ - mtp
+
+ - ptp
+
+ - rndis
+
+ - audio_source
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f467e99cc88..3117f8b8bfb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3419,6 +3419,10 @@
Logger buffer sizes
Select Logger sizes per log buffer
+
+ Select USB Configuration
+
+ Select USB Configuration
Allow mock locations
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 128aa5f554d..22c39116a1c 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -130,6 +130,13 @@
android:entries="@array/select_logd_size_titles"
android:entryValues="@array/select_logd_size_values" />
+
+
0) {
+ currentValue = currentValue.substring(0, adbIndex);
+ }
+
+ String[] values = getResources().getStringArray(R.array.usb_configuration_values);
+ String[] titles = getResources().getStringArray(R.array.usb_configuration_titles);
+ int index = 1; // punt to second entry if not found
+ for (int i = 0; i < titles.length; i++) {
+ if (currentValue.equals(values[i])) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ mUsbConfiguration.setValue(values[index]);
+ mUsbConfiguration.setSummary(titles[index]);
+ } else {
+ mUsbConfiguration.setValue("");
+ mUsbConfiguration.setSummary("");
+ }
+ mUsbConfiguration.setOnPreferenceChangeListener(this);
+ }
+ }
+
+ private void writeUsbConfigurationOption(Object newValue) {
+ UsbManager manager = (UsbManager)getActivity().getSystemService(Context.USB_SERVICE);
+ manager.setCurrentFunction(newValue.toString(), false);
+ }
+
private void updateCpuUsageOptions() {
updateCheckBox(mShowCpuUsage, Settings.Global.getInt(getActivity().getContentResolver(),
Settings.Global.SHOW_PROCESSES, 0) != 0);
@@ -1437,6 +1481,9 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
} else if (preference == mLogdSize) {
writeLogdSizeOption(newValue);
return true;
+ } else if (preference == mUsbConfiguration) {
+ writeUsbConfigurationOption(newValue);
+ return true;
} else if (preference == mWindowAnimationScale) {
writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
return true;
@@ -1551,6 +1598,13 @@ public class DevelopmentSettings extends SettingsPreferenceFragment
}
}
+ private BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ updateUsbConfigurationValues();
+ }
+ };
+
static class SystemPropPoker extends AsyncTask {
@Override
protected Void doInBackground(Void... params) {