Refresh after clearing, tweak warn threshold.

Refresh UI after clearing cache.  Hide user header on single-user
devices to match UX spec.  Refine adopted storage warning threshold
based on experiments with various devices.

For example, a typical internal storage device runs the benchmark
in about 600ms.  Very fast SD cards take about 1700ms, moderate speed
SD cards take about 3800ms, and slow SD cards take about 6800ms.

Bug: 22345902, 22487370
Change-Id: I6066f3b78dbb32277ae94b79e325500724f83c7e
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 58e050b..4f9b33b 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -192,8 +192,8 @@
         for (int userIndex = 0; userIndex < userCount; ++userIndex) {
             final UserInfo userInfo = allUsers.get(userIndex);
             if (isProfileOf(mCurrentUser, userInfo)) {
-                PreferenceCategory details = addCategory(screen,
-                        showHeaders ? userInfo.name : null);
+                final PreferenceGroup details = showHeaders ?
+                        addCategory(screen, userInfo.name) : screen;
                 addDetailItems(details, showShared, userInfo.id);
                 ++addedUserCount;
             }
@@ -201,7 +201,7 @@
 
         // Add rest of users
         if (userCount - addedUserCount > 0) {
-            PreferenceCategory otherUsers = addCategory(screen,
+            PreferenceGroup otherUsers = addCategory(screen,
                     getText(R.string.storage_other_users));
             for (int userIndex = 0; userIndex < userCount; ++userIndex) {
                 final UserInfo userInfo = allUsers.get(userIndex);
@@ -253,7 +253,7 @@
         return category;
     }
 
-    private void addDetailItems(PreferenceCategory category, boolean showShared, int userId) {
+    private void addDetailItems(PreferenceGroup category, boolean showShared, int userId) {
         final int[] itemsToAdd = (showShared ? ITEMS_SHOW_SHARED : ITEMS_NO_SHOW_SHARED);
         for (int i = 0; i < itemsToAdd.length; ++i) {
             addItem(category, itemsToAdd[i], null, userId);
@@ -719,7 +719,12 @@
         public void onRemoveCompleted(final String packageName, final boolean succeeded) {
             synchronized (this) {
                 if (--mRemaining == 0) {
-                    mTarget.update();
+                    mTarget.getActivity().runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            mTarget.update();
+                        }
+                    });
                 }
             }
         }
diff --git a/src/com/android/settings/deviceinfo/StorageWizardBase.java b/src/com/android/settings/deviceinfo/StorageWizardBase.java
index e508cd1..a32109c 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardBase.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardBase.java
@@ -176,6 +176,10 @@
         }
     }
 
+    protected void setKeepScreenOn(boolean keepScreenOn) {
+        getSetupWizardLayout().setKeepScreenOn(keepScreenOn);
+    }
+
     public void onNavigateNext() {
         throw new UnsupportedOperationException();
     }
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
index a18bca3..1a5a70c 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
@@ -27,7 +27,6 @@
 import android.content.pm.IPackageMoveObserver;
 import android.os.AsyncTask;
 import android.os.Bundle;
-import android.os.RemoteException;
 import android.os.storage.DiskInfo;
 import android.os.storage.StorageManager;
 import android.os.storage.VolumeInfo;
@@ -55,6 +54,7 @@
             return;
         }
         setContentView(R.layout.storage_wizard_progress);
+        setKeepScreenOn(true);
 
         mFormatPrivate = getIntent().getBooleanExtra(
                 StorageWizardFormatConfirm.EXTRA_FORMAT_PRIVATE, false);
@@ -144,13 +144,19 @@
                 return;
             }
 
-            final float pct = (float) mInternalBench / (float) mPrivateBench;
-            Log.d(TAG, "New volume is " + pct + "x the speed of internal");
+            if (activity.mFormatPrivate) {
+                final float pct = (float) mInternalBench / (float) mPrivateBench;
+                Log.d(TAG, "New volume is " + pct + "x the speed of internal");
 
-            // TODO: refine this warning threshold
-            if (mPrivateBench > 2000000000) {
-                final SlowWarningFragment dialog = new SlowWarningFragment();
-                dialog.show(activity.getFragmentManager(), TAG_SLOW_WARNING);
+                // To help set user expectations around device performance, we
+                // warn if the adopted media is 0.25x the speed of internal
+                // storage or slower.
+                if (Float.isNaN(pct) || pct < 0.25) {
+                    final SlowWarningFragment dialog = new SlowWarningFragment();
+                    dialog.show(activity.getFragmentManager(), TAG_SLOW_WARNING);
+                } else {
+                    activity.onFormatFinished();
+                }
             } else {
                 activity.onFormatFinished();
             }