From a6986e7ed235ce28964c84fbd398c09631ec7563 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 8 Mar 2017 09:24:45 -0800 Subject: [PATCH] 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 --- res/values/themes.xml | 2 + .../android/settings/SettingsActivity.java | 77 +++++++++---------- .../settings/SettingsActivityTest.java | 1 + .../HardwareInfoDialogFragmentTest.java | 7 +- 4 files changed, 44 insertions(+), 43 deletions(-) diff --git a/res/values/themes.xml b/res/values/themes.xml index d6df2abbdaf..f49ea2ca315 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -102,8 +102,10 @@ diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index ffc051eeb42..7d6cf77a8e3 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -32,7 +32,6 @@ import android.content.pm.PackageManager; 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 @@ public class SettingsActivity extends SettingsDrawerActivity @Override protected void onPause() { super.onPause(); + mDevelopmentPreferences.unregisterOnSharedPreferenceChangeListener( + mDevelopmentPreferencesListener); + mDevelopmentPreferencesListener = null; unregisterReceiver(mBatteryInfoReceiver); if (!mSearchFeatureProvider.isEnabled(this)) { unregisterReceiver(mUserAddRemoveReceiver); @@ -670,15 +672,6 @@ public class SettingsActivity extends SettingsDrawerActivity } } - @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); @@ -895,32 +888,32 @@ public class SettingsActivity extends SettingsDrawerActivity 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 @@ public class SettingsActivity extends SettingsDrawerActivity && 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 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 @@ public class SettingsActivity extends SettingsDrawerActivity 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 68ca8906edb..7822d831d15 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.FragmentManager; 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 e3dec76eb5d..245d7d6013f 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.Robolectric; 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; @@ -54,8 +55,12 @@ public class HardwareInfoDialogFragmentTest { final HardwareInfoDialogFragment fragment = spy(HardwareInfoDialogFragment.newInstance()); 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()); } }