merge in mnc-release history after reset to mnc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0ffaf58..3bea360 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4593,7 +4593,8 @@
     <string name="backup_erase_dialog_title"></string>
     <!-- Dialog title for confirmation to erase backup data from server -->
     <string name="backup_erase_dialog_message">Stop backing up your Wi\u2011Fi passwords, bookmarks, other settings, and app data, plus erase all copies on Google servers?</string>
-
+    <!-- Dialog title for confirmation to erase full backup data from server -->
+    <string name="fullbackup_erase_dialog_message">Stop backing up device data (such as Wi-Fi passwords and call history) and app data (such as settings and files stored by apps), plus erase all copies on Google Drive?</string>
     <!-- Device admin settings screen --><skip />
     <!-- Device admin settings activity title -->
     <string name="device_admin_settings_title">Device administration settings</string>
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index dbbf6ba..1ef1dd9 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -190,7 +190,7 @@
 
     private static String DEFAULT_LOG_RING_BUFFER_SIZE_IN_BYTES = "262144"; // 256K
 
-    private static final int[] MOCK_LOCATOIN_APP_OPS = new int[] {AppOpsManager.OP_MOCK_LOCATION};
+    private static final int[] MOCK_LOCATION_APP_OPS = new int[] {AppOpsManager.OP_MOCK_LOCATION};
 
     private static final String MULTI_WINDOW_SYSTEM_PROPERTY = "persist.sys.debug.multi_window";
     private IWindowManager mWindowManager;
@@ -698,7 +698,7 @@
         AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
 
         // Disable the app op of the previous mock location app if such.
-        List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATOIN_APP_OPS);
+        List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATION_APP_OPS);
         if (packageOps != null) {
             // Should be one but in case we are in a bad state due to use of command line tools.
             for (PackageOps packageOp : packageOps) {
@@ -764,7 +764,7 @@
     private void updateMockLocation() {
         AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
 
-        List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATOIN_APP_OPS);
+        List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATION_APP_OPS);
         if (packageOps != null) {
             for (PackageOps packageOp : packageOps) {
                 if (packageOp.getOps().get(0).getMode() == AppOpsManager.MODE_ALLOWED) {
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
index 9ab714a..e2e6dbe 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
@@ -55,12 +55,23 @@
         new PartitionTask().execute();
     }
 
-    public class PartitionTask extends AsyncTask<Void, Void, Exception> {
+    public class PartitionTask extends AsyncTask<Void, Integer, Exception> {
         @Override
         protected Exception doInBackground(Void... params) {
             try {
                 if (mFormatPrivate) {
                     mStorage.partitionPrivate(mDisk.getId());
+                    publishProgress(40);
+
+                    final long internalBench = mStorage.benchmark(null);
+                    publishProgress(60);
+
+                    final VolumeInfo privateVol = findFirstVolume(VolumeInfo.TYPE_PRIVATE);
+                    final long privateBench = mStorage.benchmark(privateVol.id);
+
+                    // TODO: plumb through to user when below threshold
+                    final float pct = (float) internalBench / (float) privateBench;
+                    Log.d(TAG, "New volume is " + pct + "x the speed of internal");
                 } else {
                     mStorage.partitionPublic(mDisk.getId());
                 }
@@ -71,6 +82,11 @@
         }
 
         @Override
+        protected void onProgressUpdate(Integer... progress) {
+            setCurrentProgress(progress[0]);
+        }
+
+        @Override
         protected void onPostExecute(Exception e) {
             final Context context = StorageWizardFormatProgress.this;
             if (e == null) {
diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
index 1444ad5..2d200b5 100644
--- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
@@ -147,7 +147,7 @@
                 mSelectedAccessPoint = mDlgAccessPoint;
 
                 // Hide forget button if config editing is locked down
-                final boolean hideForgetButton = WifiSettings.isCreatorDeviceOwner(getActivity(),
+                final boolean hideForgetButton = WifiSettings.isEditabilityLockedDown(getActivity(),
                         mDlgAccessPoint.getConfig());
                 mDialog = new WifiDialog(getActivity(), this, mDlgAccessPoint,
                         false /* not editting */, true /* hide the submit button */,
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 0c28db3..97612a9 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -43,6 +43,7 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceScreen;
 import android.text.Spannable;
@@ -439,8 +440,8 @@
                 }
 
                 WifiConfiguration config = mSelectedAccessPoint.getConfig();
-                // Device Owner created configs are uneditable
-                if (isCreatorDeviceOwner(getActivity(), config)) {
+                // Some configs are ineditable
+                if (isEditabilityLockedDown(getActivity(), config)) {
                     return;
                 }
 
@@ -522,7 +523,7 @@
     private void showDialog(AccessPoint accessPoint, boolean edit) {
         if (accessPoint != null) {
             WifiConfiguration config = accessPoint.getConfig();
-            if (isCreatorDeviceOwner(getActivity(), config) && accessPoint.isActive()) {
+            if (isEditabilityLockedDown(getActivity(), config) && accessPoint.isActive()) {
                 final int userId = UserHandle.getUserId(config.creatorUid);
                 final PackageManager pm = getActivity().getPackageManager();
                 final IPackageManager ipm = AppGlobals.getPackageManager();
@@ -575,7 +576,7 @@
                 }
                 // If it's null, fine, it's for Add Network
                 mSelectedAccessPoint = ap;
-                final boolean hideForget = (ap == null || isCreatorDeviceOwner(getActivity(),
+                final boolean hideForget = (ap == null || isEditabilityLockedDown(getActivity(),
                         ap.getConfig()));
                 mDialog = new WifiDialog(getActivity(), this, ap, mDlgEdit,
                         /* no hide submit/connect */ false,
@@ -913,11 +914,11 @@
         };
 
     /**
-     * Returns the true if the app that created this config is the device owner of the device.
+     * Returns true if the config is not editable/removable except by its creating Device Owner.
      * @param config The WiFi config.
-     * @return creator package name or null if creator package is not device owner.
+     * @return true if the config is not editable/removable except by its creating Device Owner.
      */
-    static boolean isCreatorDeviceOwner(Context context, WifiConfiguration config) {
+    static boolean isEditabilityLockedDown(Context context, WifiConfiguration config) {
         if (config == null) {
             return false;
         }
@@ -927,6 +928,10 @@
         if (deviceOwnerPackageName == null) {
             return false;
         }
+        UserManager um = UserManager.get(context);
+        if (um.hasUserRestriction(UserManager.DISALLOW_CONFIG_WIFI)) {
+            return false;
+        }
         final PackageManager pm = context.getPackageManager();
         try {
             final int deviceOwnerUid = pm.getPackageUid(deviceOwnerPackageName,