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/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;