diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c006ce3..2bba142 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1786,6 +1786,13 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".deviceinfo.UsbModeChooserActivity"
+                  android:excludeFromRecents="true"
+                  android:exported="true"
+                  android:permission="android.permission.MANAGE_USB"
+                  android:theme="@style/Transparent">
+        </activity>
+
         <activity android:name=".bluetooth.RequestPermissionHelperActivity"
                   android:label="@string/bluetooth_pairing_request"
                   android:excludeFromRecents="true"
diff --git a/res/drawable/ic_toc.xml b/res/drawable/ic_toc.xml
new file mode 100644
index 0000000..66c476b
--- /dev/null
+++ b/res/drawable/ic_toc.xml
@@ -0,0 +1,24 @@
+<!--
+    Copyright (C) 2015 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24.0dp"
+        android:height="24.0dp"
+        android:viewportWidth="48.0"
+        android:viewportHeight="48.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M6.0,18.0l28.0,0.0l0.0,-4.0L6.0,14.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,22.0l0.0,4.0zm0.0,8.0l28.0,0.0l0.0,-4.0L6.0,30.0l0.0,4.0zm32.0,0.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0zm0.0,-20.0l0.0,4.0l4.0,0.0l0.0,-4.0l-4.0,0.0zm0.0,12.0l4.0,0.0l0.0,-4.0l-4.0,0.0l0.0,4.0z"/>
+</vector>
diff --git a/res/menu/storage.xml b/res/menu/storage.xml
deleted file mode 100644
index 2e4c660..0000000
--- a/res/menu/storage.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:id="@+id/storage_usb"
-        android:title="@string/storage_menu_usb" />
-</menu>
diff --git a/res/menu/storage_volume.xml b/res/menu/storage_volume.xml
index b461f46..efa468c 100644
--- a/res/menu/storage_volume.xml
+++ b/res/menu/storage_volume.xml
@@ -30,7 +30,4 @@
     <item
         android:id="@+id/storage_migrate"
         android:title="@string/storage_menu_migrate" />
-    <item
-        android:id="@+id/storage_usb"
-        android:title="@string/storage_menu_usb" />
 </menu>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index d556b1b..1af15f9 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1365,4 +1365,12 @@
         <item>0</item>
     </string-array>
 
+    <!-- These values must match up with the code in UsbModeChooserActivity.java. -->
+    <string-array name="usb_available_functions">
+        <item>@string/usb_use_charging_only</item>
+        <item>@string/usb_use_file_transfers</item>
+        <item>@string/usb_use_photo_transfers</item>
+        <item>@string/usb_use_MIDI</item>
+    </string-array>
+
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4291581..c89aa17 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2293,8 +2293,6 @@
     <string name="storage_menu_migrate">Migrate data</string>
     <!-- Storage setting.  Menu option for forgetting a storage device [CHAR LIMIT=30]-->
     <string name="storage_menu_forget">Forget</string>
-    <!-- Storage setting.  Menu option for USB transfer settings [CHAR LIMIT=30]-->
-    <string name="storage_menu_usb">USB computer connection</string>
 
     <!-- Storage setting.  Title for USB transfer settings [CHAR LIMIT=30]-->
     <string name="storage_title_usb">USB computer connection</string>
@@ -6177,6 +6175,9 @@
     <!-- [CHAR LIMIT=20] Zen mode settings: Messages option -->
     <string name="zen_mode_messages">Messages</string>
 
+    <!-- [CHAR LIMIT=50] Zen mode settings: Selected messages summary -->
+    <string name="zen_mode_selected_messages">Selected messages</string>
+
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone -->
     <string name="zen_mode_from_anyone">From anyone</string>
 
@@ -6596,4 +6597,31 @@
     <!-- Turn on settings for system ui tuner [CHAR LIMIT=40] -->
     <string name="system_ui_settings">Show SystemUI Tuner</string>
 
+    <!-- Label for button that leads to more permissions [CHAR LIMIT=40] -->
+    <string name="additional_permissions">Additional permissions</string>
+
+    <!-- Description of how many more permissions to view on next page [CHAR LIMIT=30] -->
+    <string name="additional_permissions_more"><xliff:g id="count" example="2">%1$d</xliff:g> more</string>
+
+    <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user
+         select what the USB connection for this device should be used for. This choice
+         is for charging only. -->
+    <string name="usb_use_charging_only">Charging only</string>
+    <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user
+         select what the USB connection for this device should be used for. This choice
+         is for transferring files via MTP. -->
+    <string name="usb_use_file_transfers">Transfer files (MTP)</string>
+    <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user
+         select what the USB connection for this device should be used for. This choice
+         is for transferring photos via PTP. -->
+    <string name="usb_use_photo_transfers">Transfer photos (PTP)</string>
+    <!-- One of the choices in a dialog (with title defined in usb_use) that lets the user
+         select what the USB connection for this device should be used for. This choice
+         is for entering MIDI mode. -->
+    <string name="usb_use_MIDI">MIDI</string>
+    <!-- The title used in a dialog which lets the user select what the USB connection
+         for this device should be used for. Choices are usb_use_charging_only,
+         usb_use_file_transfer, use_use_photo_transfer, and usb_use_MIDI -->
+    <string name="usb_use">Use USB for</string>
+
 </resources>
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 5148e1a..a647dcc 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -1355,7 +1355,7 @@
 
     private void writeUsbConfigurationOption(Object newValue) {
         UsbManager manager = (UsbManager)getActivity().getSystemService(Context.USB_SERVICE);
-        manager.setCurrentFunction(newValue.toString(), false);
+        manager.setCurrentFunction(newValue.toString());
     }
 
     private void updateCpuUsageOptions() {
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index aa492f3..7ce581f 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -87,7 +87,6 @@
 import com.android.settings.deviceinfo.PrivateVolumeSettings;
 import com.android.settings.deviceinfo.PublicVolumeSettings;
 import com.android.settings.deviceinfo.StorageSettings;
-import com.android.settings.deviceinfo.UsbSettings;
 import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageDetail;
 import com.android.settings.fuelgauge.PowerUsageSummary;
@@ -318,7 +317,6 @@
             PrivateVolumeSettings.class.getName(),
             PublicVolumeSettings.class.getName(),
             DevelopmentSettings.class.getName(),
-            UsbSettings.class.getName(),
             AndroidBeam.class.getName(),
             WifiDisplaySettings.class.getName(),
             PowerUsageSummary.class.getName(),
diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java
index 5e8d2f4..268bc5b 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -135,8 +135,8 @@
     public void onPermissionLoadComplete() {
         Activity activity = getActivity();
         if (activity == null) return;
-        mAppPermsPreference.setSummary(activity.getString(R.string.app_permissions_summary,
-                mPermissionsInfo.getRuntimePermAppsGrantedCount(),
-                mPermissionsInfo.getRuntimePermAppsCount()));
+//        mAppPermsPreference.setSummary(activity.getString(R.string.app_permissions_summary,
+//                mPermissionsInfo.getRuntimePermAppsGrantedCount(),
+//                mPermissionsInfo.getRuntimePermAppsCount()));
     }
 }
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 14ef433..5b510eb 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -446,7 +446,7 @@
         // Update the preference summaries.
         Activity context = getActivity();
         mStoragePreference.setSummary(AppStorageSettings.getSummary(mAppEntry, context));
-        mPermissionsPreference.setSummary(AppPermissionSettings.getSummary(mAppEntry, context));
+//        mPermissionsPreference.setSummary(AppPermissionSettings.getSummary(mAppEntry, context));
         mLaunchPreference.setSummary(Utils.getLaunchByDeafaultSummary(mAppEntry, mUsbManager,
                 mPm, context));
         mNotificationPreference.setSummary(getNotificationSummary(mAppEntry, context,
diff --git a/src/com/android/settings/applications/ManagePermissions.java b/src/com/android/settings/applications/ManagePermissions.java
index e8f9d0f..35356e5 100644
--- a/src/com/android/settings/applications/ManagePermissions.java
+++ b/src/com/android/settings/applications/ManagePermissions.java
@@ -15,16 +15,22 @@
  */
 package com.android.settings.applications;
 
+import android.app.Activity;
+import android.app.FragmentTransaction;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceScreen;
 import android.util.Log;
+import android.view.View;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.settings.AppHeader;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settingslib.applications.PermissionsInfo;
@@ -33,12 +39,16 @@
 import java.util.List;
 
 public class ManagePermissions extends SettingsPreferenceFragment
-        implements PermissionsInfo.Callback, OnPreferenceClickListener {
+        implements PermissionsInfo.Callback {
 
     private static final String TAG = "ManagePermissions";
 
+    private static final String OS_PKG = "android";
+
     private PermissionsInfo mPermissionsInfo;
 
+    private PreferenceScreen mExtraScreen;
+
     @Override
     public void onResume() {
         super.onResume();
@@ -54,25 +64,66 @@
     }
 
     private void refreshUi() {
+        Activity activity = getActivity();
         PreferenceScreen screen = getPreferenceScreen();
         if (screen == null) {
-            screen = getPreferenceManager().createPreferenceScreen(getActivity());
+            screen = getPreferenceManager().createPreferenceScreen(activity);
             setPreferenceScreen(screen);
         } else {
             screen.removeAll();
+            if (mExtraScreen != null) {
+                mExtraScreen.removeAll();
+            }
         }
         final int count = screen.getPreferenceCount();
         if (count == 0) {
+            final Preference extraScreenPreference = new Preference(activity);
+            extraScreenPreference.setIcon(R.drawable.ic_toc);
+            extraScreenPreference.setTitle(R.string.additional_permissions);
             List<PermissionGroup> groups = mPermissionsInfo.getGroups();
             for (PermissionGroup group : groups) {
                 if (group.possibleApps.size() == 0) continue;
-                PermissionPreference pref = new PermissionPreference(getActivity(), group);
+                PermissionPreference pref = new PermissionPreference(activity, group);
                 pref.refreshUi();
-                screen.addPreference(pref);
+                if (group.packageName.equals(OS_PKG)) {
+                    screen.addPreference(pref);
+                } else {
+                    if (mExtraScreen == null) {
+                        mExtraScreen = getPreferenceManager().createPreferenceScreen(activity);
+                    }
+                    mExtraScreen.addPreference(pref);
+                }
+            }
+            if (mExtraScreen != null) {
+                extraScreenPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+                    @Override
+                    public boolean onPreferenceClick(Preference preference) {
+                        AdditionalPermissionsFragment frag = new AdditionalPermissionsFragment();
+                        frag.setTargetFragment(ManagePermissions.this, 0);
+                        FragmentTransaction ft = getFragmentManager().beginTransaction();
+                        ft.replace(R.id.main_content, frag);
+                        ft.addToBackStack("AdditionalPerms");
+                        ft.commit();
+                        return true;
+                    }
+                });
+                extraScreenPreference.setSummary(getString(R.string.additional_permissions_more,
+                        mExtraScreen.getPreferenceCount()));
+                screen.addPreference(extraScreenPreference);
             }
         } else {
-            for (int i = 0; i < count; i++) {
-                ((PermissionPreference) screen.getPreference(i)).refreshUi();
+            updatePrefs(screen);
+            if (mExtraScreen != null) {
+                updatePrefs(mExtraScreen);
+            }
+        }
+    }
+
+    private void updatePrefs(PreferenceScreen screen) {
+        for (int i = 0; i < screen.getPreferenceCount(); i++) {
+            Preference pref = screen.getPreference(i);
+            if (pref instanceof PermissionPreference) {
+                ((PermissionPreference) pref).refreshUi();
             }
         }
     }
@@ -83,11 +134,6 @@
     }
 
     @Override
-    public boolean onPreferenceClick(Preference preference) {
-        return true;
-    }
-
-    @Override
     protected int getMetricsCategory() {
         return MetricsLogger.MANAGE_PERMISSIONS;
     }
@@ -104,8 +150,8 @@
         public void refreshUi() {
             setTitle(mGroup.label);
             setIcon(mGroup.icon);
-            setSummary(getContext().getString(R.string.app_permissions_group_summary,
-                    mGroup.grantedApps.size(), mGroup.possibleApps.size()));
+//            setSummary(getContext().getString(R.string.app_permissions_group_summary,
+//                    mGroup.grantedApps.size(), mGroup.possibleApps.size()));
         }
 
         @Override
@@ -121,4 +167,26 @@
         }
     }
 
+    public static class AdditionalPermissionsFragment extends SettingsPreferenceFragment {
+        @Override
+        public void onCreate(Bundle icicle) {
+            super.onCreate(icicle);
+            setPreferenceScreen(((ManagePermissions) getTargetFragment()).mExtraScreen);
+        }
+
+        @Override
+        public void onViewCreated(View view, Bundle savedInstanceState) {
+            super.onViewCreated(view, savedInstanceState);
+            Resources resources = getResources();
+            Theme theme = getActivity().getTheme();
+            AppHeader.createAppHeader(this, resources.getDrawable(R.drawable.ic_toc, theme),
+                    getString(R.string.additional_permissions), null, android.R.color.white);
+        }
+
+        @Override
+        protected int getMetricsCategory() {
+            return MetricsLogger.MANAGE_PERMISSIONS;
+        }
+    }
+
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 9ec4be1..cf06fe7 100755
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -136,7 +136,7 @@
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        mInitialScanStarted = (savedInstanceState != null);    // don't auto start scan after rotation
+        mInitialScanStarted = false;
         mInitiateDiscoverable = true;
 
         mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index e5f50dd..7cefe4a 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -273,7 +273,6 @@
         final MenuItem unmount = menu.findItem(R.id.storage_unmount);
         final MenuItem format = menu.findItem(R.id.storage_format);
         final MenuItem migrate = menu.findItem(R.id.storage_migrate);
-        final MenuItem usb = menu.findItem(R.id.storage_usb);
 
         // Actions live in menu for non-internal private volumes; they're shown
         // as preference items for public volumes.
@@ -293,9 +292,6 @@
         final VolumeInfo privateVol = getActivity().getPackageManager()
                 .getPrimaryStorageCurrentVolume();
         migrate.setVisible(!Objects.equals(mVolume, privateVol));
-
-        // TODO: show usb if we jumped past first screen
-        usb.setVisible(false);
     }
 
     @Override
@@ -324,10 +320,6 @@
                 intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
                 startActivity(intent);
                 return true;
-            case R.id.storage_usb:
-                startFragment(this, UsbSettings.class.getCanonicalName(),
-                        R.string.storage_title_usb, 0, null);
-                return true;
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index 4c03d8f..b5b3841 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -149,29 +149,6 @@
     }
 
     @Override
-    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        inflater.inflate(R.menu.storage, menu);
-    }
-
-    @Override
-    public void onPrepareOptionsMenu(Menu menu) {
-        final MenuItem usb = menu.findItem(R.id.storage_usb);
-
-        usb.setVisible(!mUserManager.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER));
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.storage_usb:
-                startFragment(this, UsbSettings.class.getCanonicalName(),
-                        R.string.storage_title_usb, 0, null);
-                return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference pref) {
         final String volId = pref.getKey();
         final VolumeInfo vol = mStorageManager.findVolumeById(volId);
diff --git a/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java b/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
new file mode 100644
index 0000000..76b2fd1
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/UsbModeChooserActivity.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.deviceinfo;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.hardware.usb.UsbManager;
+import android.os.Bundle;
+import android.util.Log;
+import com.android.settings.R;
+
+/**
+ * UI for the USB chooser dialog.
+ *
+ * TODO: Don't show some UI elements if UserManager.DISALLOW_USB_FILE_TRANSFER is disabled.
+ */
+public class UsbModeChooserActivity extends Activity {
+
+    private UsbManager mUsbManager;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
+        final AlertDialog levelDialog;
+        AlertDialog.Builder builder = new AlertDialog.Builder(this);
+        builder.setTitle(R.string.usb_use);
+        builder.setSingleChoiceItems(R.array.usb_available_functions, getCurrentFunction(),
+                new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        setCurrentFunction(which);
+                        dialog.dismiss();
+                        UsbModeChooserActivity.this.finish();
+                    }
+                });
+        builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
+            @Override
+            public void onDismiss(DialogInterface dialog) {
+                UsbModeChooserActivity.this.finish();
+            }
+        });
+        builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                UsbModeChooserActivity.this.finish();
+            }
+        });
+        levelDialog = builder.create();
+        levelDialog.show();
+    }
+
+    /*
+     * If you change the numbers here, you also need to change R.array.usb_available_functions
+     * so that everything matches.
+     */
+    private int getCurrentFunction() {
+        if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MTP)) {
+            return 1;
+        } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_PTP)) {
+            return 2;
+        } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MIDI)) {
+            return 3;
+        }
+        return 0;
+    }
+
+    /*
+     * If you change the numbers here, you also need to change R.array.usb_available_functions
+     * so that everything matches.
+     */
+    private void setCurrentFunction(int which) {
+        switch (which) {
+            case 0:
+                mUsbManager.setCurrentFunction("none");
+                break;
+            case 1:
+                mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MTP);
+                break;
+            case 2:
+                mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_PTP);
+                break;
+            case 3:
+                mUsbManager.setCurrentFunction(UsbManager.USB_FUNCTION_MIDI);
+                break;
+        }
+    }
+}
diff --git a/src/com/android/settings/deviceinfo/UsbSettings.java b/src/com/android/settings/deviceinfo/UsbSettings.java
deleted file mode 100644
index d8a675c..0000000
--- a/src/com/android/settings/deviceinfo/UsbSettings.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.deviceinfo;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.hardware.usb.UsbManager;
-import android.os.Bundle;
-import android.os.UserManager;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.PreferenceScreen;
-import android.util.Log;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.Utils;
-
-/**
- * USB storage settings.
- */
-public class UsbSettings extends SettingsPreferenceFragment {
-
-    private static final String TAG = "UsbSettings";
-
-    private static final String KEY_MTP = "usb_mtp";
-    private static final String KEY_PTP = "usb_ptp";
-    private static final String KEY_MIDI = "usb_midi";
-
-    private UsbManager mUsbManager;
-    private CheckBoxPreference mMtp;
-    private CheckBoxPreference mPtp;
-    private CheckBoxPreference mMidi;
-    private boolean mUsbAccessoryMode;
-
-    private final BroadcastReceiver mStateReceiver = new BroadcastReceiver() {
-        public void onReceive(Context content, Intent intent) {
-            String action = intent.getAction();
-            if (action.equals(UsbManager.ACTION_USB_STATE)) {
-               mUsbAccessoryMode = intent.getBooleanExtra(UsbManager.USB_FUNCTION_ACCESSORY, false);
-               Log.e(TAG, "UsbAccessoryMode " + mUsbAccessoryMode);
-            }
-            updateToggles(mUsbManager.getDefaultFunction());
-        }
-    };
-
-    private PreferenceScreen createPreferenceHierarchy() {
-        PreferenceScreen root = getPreferenceScreen();
-        if (root != null) {
-            root.removeAll();
-        }
-        addPreferencesFromResource(R.xml.usb_settings);
-        root = getPreferenceScreen();
-
-        mMtp = (CheckBoxPreference)root.findPreference(KEY_MTP);
-        mPtp = (CheckBoxPreference)root.findPreference(KEY_PTP);
-        mMidi = (CheckBoxPreference)root.findPreference(KEY_MIDI);
-
-        UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
-        if (um.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
-            mMtp.setEnabled(false);
-            mPtp.setEnabled(false);
-        }
-
-        return root;
-    }
-
-    @Override
-    protected int getMetricsCategory() {
-        return MetricsLogger.DEVICEINFO_USB;
-    }
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        getActivity().unregisterReceiver(mStateReceiver);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        // Make sure we reload the preference hierarchy since some of these settings
-        // depend on others...
-        createPreferenceHierarchy();
-
-        // ACTION_USB_STATE is sticky so this will call updateToggles
-        getActivity().registerReceiver(mStateReceiver,
-                new IntentFilter(UsbManager.ACTION_USB_STATE));
-    }
-
-    private void updateToggles(String function) {
-        if (UsbManager.USB_FUNCTION_MTP.equals(function)) {
-            mMtp.setChecked(true);
-            mPtp.setChecked(false);
-            mMidi.setChecked(false);
-        } else if (UsbManager.USB_FUNCTION_PTP.equals(function)) {
-            mMtp.setChecked(false);
-            mPtp.setChecked(true);
-            mMidi.setChecked(false);
-        } else if (UsbManager.USB_FUNCTION_MIDI.equals(function)) {
-            mMtp.setChecked(false);
-            mPtp.setChecked(false);
-            mMidi.setChecked(true);
-        } else  {
-            mMtp.setChecked(false);
-            mPtp.setChecked(false);
-            mMidi.setChecked(false);
-        }
-        UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
-        if (um.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
-            Log.e(TAG, "USB is locked down");
-            mMtp.setEnabled(false);
-            mPtp.setEnabled(false);
-            mMidi.setEnabled(true);
-        } else if (!mUsbAccessoryMode) {
-            //Enable MTP and PTP switch while USB is not in Accessory Mode, otherwise disable it
-            Log.e(TAG, "USB Normal Mode");
-            mMtp.setEnabled(true);
-            mPtp.setEnabled(true);
-            mMidi.setEnabled(true);
-        } else {
-            Log.e(TAG, "USB Accessory Mode");
-            mMtp.setEnabled(false);
-            mPtp.setEnabled(false);
-            mMidi.setEnabled(false);
-        }
-    }
-
-    @Override
-    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-
-        // Don't allow any changes to take effect as the USB host will be disconnected, killing
-        // the monkeys
-        if (Utils.isMonkeyRunning()) {
-            return true;
-        }
-        // If this user is disallowed from using USB, don't handle their attempts to change the
-        // setting.
-        UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
-        if (um.hasUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER)) {
-            return true;
-        }
-
-        String function = "none";
-        if (preference == mMtp && mMtp.isChecked()) {
-            function = UsbManager.USB_FUNCTION_MTP;
-        } else if (preference == mPtp && mPtp.isChecked()) {
-            function = UsbManager.USB_FUNCTION_PTP;
-        } else if (preference == mMidi && mMidi.isChecked()) {
-            function = UsbManager.USB_FUNCTION_MIDI;
-        }
-
-        mUsbManager.setCurrentFunction(function, true);
-        updateToggles(function);
-
-        return true;
-    }
-}
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 22a203c..f76ee38 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -82,7 +82,7 @@
         s = appendLowercase(s, mConfig.allowReminders, R.string.zen_mode_reminders);
         s = appendLowercase(s, mConfig.allowEvents, R.string.zen_mode_events);
         s = appendLowercase(s, callers, R.string.zen_mode_selected_callers);
-        s = appendLowercase(s, mConfig.allowMessages, R.string.zen_mode_messages);
+        s = appendLowercase(s, mConfig.allowMessages, R.string.zen_mode_selected_messages);
         mPrioritySettings.setSummary(s);
     }
 
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index e1eec5f..93e0948 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -34,7 +34,6 @@
 import com.android.settings.applications.ManageDefaultApps;
 import com.android.settings.bluetooth.BluetoothSettings;
 import com.android.settings.deviceinfo.StorageSettings;
-import com.android.settings.deviceinfo.UsbSettings;
 import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
@@ -131,7 +130,6 @@
 
         // Storage
         sRankMap.put(StorageSettings.class.getName(), RANK_STORAGE);
-        sRankMap.put(UsbSettings.class.getName(), RANK_STORAGE);
 
         // Battery
         sRankMap.put(PowerUsageSummary.class.getName(), RANK_POWER_USAGE);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index a3d2ddc..4d28d4a 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -36,7 +36,6 @@
 import com.android.settings.applications.ManageDefaultApps;
 import com.android.settings.bluetooth.BluetoothSettings;
 import com.android.settings.deviceinfo.StorageSettings;
-import com.android.settings.deviceinfo.UsbSettings;
 import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
@@ -178,13 +177,6 @@
                         StorageSettings.class.getName(),
                         R.drawable.ic_settings_storage));
 
-        sResMap.put(UsbSettings.class.getName(),
-                new SearchIndexableResource(
-                        Ranking.getRankForClassName(UsbSettings.class.getName()),
-                        R.xml.usb_settings,
-                        UsbSettings.class.getName(),
-                        R.drawable.ic_settings_storage));
-
         sResMap.put(PowerUsageSummary.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(PowerUsageSummary.class.getName()),
