Misc fix for secondary user

- Theme fix: action bar and status bar color now have enough contrast
  for SUW theme.
- Fix a ConcurrentModificationError when switching between users
  quickly.

Change-Id: If31f88e36f1d4c5d7f90bc9d128041f0e0a81ff9
Fix: 35948464
Test: make RunSettingsRoboTests
diff --git a/res/values/themes.xml b/res/values/themes.xml
index d6df2ab..f49ea2c 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -102,8 +102,10 @@
 
     <!-- Accessibility portion of Setup Wizard -->
     <style name="SetupWizardAccessibilityTheme" parent="Theme.SettingsBase">
+        <item name="android:windowLightStatusBar">false</item>
         <item name="android:colorPrimary">@color/material_blue_700</item>
         <item name="android:colorPrimaryDark">@color/material_blue_700</item>
+        <item name="android:actionBarTheme">@android:style/ThemeOverlay.Material.Dark.ActionBar</item>
         <item name="preferenceTheme">@style/PreferenceTheme</item>
         <item name="switchBarTheme">@style/SetupWizardAccessibilitySwitchBarTheme</item>
     </style>
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index ffc051e..7d6cf77 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -32,7 +32,6 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
 import android.nfc.NfcAdapter;
@@ -661,6 +660,9 @@
     @Override
     protected void onPause() {
         super.onPause();
+        mDevelopmentPreferences.unregisterOnSharedPreferenceChangeListener(
+                mDevelopmentPreferencesListener);
+        mDevelopmentPreferencesListener = null;
         unregisterReceiver(mBatteryInfoReceiver);
         if (!mSearchFeatureProvider.isEnabled(this)) {
             unregisterReceiver(mUserAddRemoveReceiver);
@@ -671,15 +673,6 @@
     }
 
     @Override
-    public void onDestroy() {
-        super.onDestroy();
-
-        mDevelopmentPreferences.unregisterOnSharedPreferenceChangeListener(
-                mDevelopmentPreferencesListener);
-        mDevelopmentPreferencesListener = null;
-    }
-
-    @Override
     public void setTaskDescription(ActivityManager.TaskDescription taskDescription) {
         final Bitmap icon = getBitmapFromXmlResource(R.drawable.ic_launcher_settings);
         taskDescription.setIcon(icon);
@@ -895,32 +888,32 @@
                 pm.hasSystemFeature(PackageManager.FEATURE_WIFI), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.BluetoothSettingsActivity.class.getName()),
+                        Settings.BluetoothSettingsActivity.class.getName()),
                 pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.DataUsageSummaryActivity.class.getName()),
+                        Settings.DataUsageSummaryActivity.class.getName()),
                 Utils.isBandwidthControlEnabled(), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.SimSettingsActivity.class.getName()),
+                        Settings.SimSettingsActivity.class.getName()),
                 Utils.showSimCardTile(this), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.PowerUsageSummaryActivity.class.getName()),
+                        Settings.PowerUsageSummaryActivity.class.getName()),
                 mBatteryPresent, isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.UserSettingsActivity.class.getName()),
+                        Settings.UserSettingsActivity.class.getName()),
                 UserHandle.MU_ENABLED && UserManager.supportsMultipleUsers()
-                && !Utils.isMonkeyRunning(), isAdmin);
+                        && !Utils.isMonkeyRunning(), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.NetworkDashboardActivity.class.getName()),
+                        Settings.NetworkDashboardActivity.class.getName()),
                 !UserManager.isDeviceInDemoMode(this), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.ConnectedDeviceDashboardActivity.class.getName()),
+                        Settings.ConnectedDeviceDashboardActivity.class.getName()),
                 !UserManager.isDeviceInDemoMode(this), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
@@ -934,42 +927,46 @@
                         && adapter != null && adapter.isEnabled(), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                Settings.PrintSettingsActivity.class.getName()),
+                        Settings.PrintSettingsActivity.class.getName()),
                 pm.hasSystemFeature(PackageManager.FEATURE_PRINTING), isAdmin);
 
         final boolean showDev = mDevelopmentPreferences.getBoolean(
-                    DevelopmentSettings.PREF_SHOW, android.os.Build.TYPE.equals("eng"))
+                DevelopmentSettings.PREF_SHOW, android.os.Build.TYPE.equals("eng"))
                 && !um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
         setTileEnabled(new ComponentName(packageName,
                         Settings.DevelopmentSettingsActivity.class.getName()),
                 showDev, isAdmin);
 
+        // Enable/disable backup settings depending on whether the user is admin.
+        setTileEnabled(new ComponentName(packageName,
+                        BackupSettingsActivity.class.getName()), true,
+                isAdmin || Utils.isCarrierDemoUser(this));
+
+        setTileEnabled(new ComponentName(packageName,
+                        Settings.EnterprisePrivacySettingsActivity.class.getName()),
+                FeatureFactory.getFactory(this).getEnterprisePrivacyFeatureProvider(this)
+                        .hasDeviceOwner(), isAdmin);
+
         if (UserHandle.MU_ENABLED && !isAdmin) {
+
             // When on restricted users, disable all extra categories (but only the settings ones).
             final List<DashboardCategory> categories = mDashboardFeatureProvider.getAllCategories();
-
-            for (DashboardCategory category : categories) {
-                for (Tile tile : category.tiles) {
-                    ComponentName component = tile.intent.getComponent();
-                    final String name = component.getClassName();
-                    final boolean isEnabledForRestricted = ArrayUtils.contains(
-                            SettingsGateway.SETTINGS_FOR_RESTRICTED, name);
-                    if (packageName.equals(component.getPackageName()) && !isEnabledForRestricted) {
-                        setTileEnabled(component, false, isAdmin);
+            synchronized (categories) {
+                for (DashboardCategory category : categories) {
+                    for (Tile tile : category.tiles) {
+                        ComponentName component = tile.intent.getComponent();
+                        final String name = component.getClassName();
+                        final boolean isEnabledForRestricted = ArrayUtils.contains(
+                                SettingsGateway.SETTINGS_FOR_RESTRICTED, name);
+                        if (packageName.equals(component.getPackageName())
+                                && !isEnabledForRestricted) {
+                            setTileEnabled(component, false, isAdmin);
+                        }
                     }
                 }
             }
         }
 
-        // Enable/disable backup settings depending on whether the user is admin.
-        setTileEnabled(new ComponentName(packageName,
-                BackupSettingsActivity.class.getName()), true,
-                isAdmin || Utils.isCarrierDemoUser(this));
-
-        setTileEnabled(new ComponentName(packageName,
-                Settings.EnterprisePrivacySettingsActivity.class.getName()),
-                FeatureFactory.getFactory(this).getEnterprisePrivacyFeatureProvider(this)
-                        .hasDeviceOwner(), isAdmin);
         // Final step, refresh categories.
         updateCategories();
     }
@@ -1099,10 +1096,6 @@
         return mResultIntentData;
     }
 
-    public void setResultIntentData(Intent resultIntentData) {
-        mResultIntentData = resultIntentData;
-    }
-
     public void startSuggestion(Intent intent) {
         if (intent == null || ActivityManager.isUserAMonkey()) {
             return;
diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
index 68ca890..7822d83 100644
--- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
@@ -21,6 +21,7 @@
 import android.app.FragmentTransaction;
 import android.content.Intent;
 import android.graphics.Bitmap;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
index e3dec76..245d7d6 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
@@ -31,6 +31,7 @@
 import org.robolectric.annotation.Config;
 
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
@@ -55,7 +56,11 @@
         fragment.show(mActivity.getFragmentManager(), HardwareInfoDialogFragment.TAG);
 
         verify(fragment).setText(
+                any(View.class), eq(R.id.model_label), eq(R.id.model_value),
+                anyString());
+
+        verify(fragment).setText(
                 any(View.class), eq(R.id.hardware_rev_label), eq(R.id.hardware_rev_value),
-                eq(TEST_HARDWARE_REV));
+                anyString());
     }
 }