diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java | 44 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java | 12 |
2 files changed, 40 insertions, 16 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java index 7920d388c670..fa906c489f4a 100644 --- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java @@ -48,6 +48,7 @@ import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; import android.util.ArrayMap; +import android.util.ArraySet; import android.util.Log; import android.util.SparseArray; import android.util.SparseIntArray; @@ -474,10 +475,6 @@ public class ThemeOverlayController extends CoreStartable implements Dumpable { mThemeStyle = fetchThemeStyleFromSetting(); mSecondaryOverlay = getOverlay(mMainWallpaperColor, ACCENT, mThemeStyle); mNeutralOverlay = getOverlay(mMainWallpaperColor, NEUTRAL, mThemeStyle); - if (colorSchemeIsApplied()) { - Log.d(TAG, "Skipping overlay creation. Theme was already: " + mColorScheme); - return; - } mNeedsOverlayCreation = true; if (DEBUG) { Log.d(TAG, "fetched overlays. accent: " + mSecondaryOverlay @@ -537,19 +534,28 @@ public class ThemeOverlayController extends CoreStartable implements Dumpable { /** * Checks if the color scheme in mColorScheme matches the current system palettes. + * @param managedProfiles List of managed profiles for this user. */ - private boolean colorSchemeIsApplied() { - return mResources.getColor( - android.R.color.system_accent1_500, mContext.getTheme()) - == mColorScheme.getAccent1().get(6) - && mResources.getColor(android.R.color.system_accent2_500, mContext.getTheme()) - == mColorScheme.getAccent2().get(6) - && mResources.getColor(android.R.color.system_accent3_500, mContext.getTheme()) - == mColorScheme.getAccent3().get(6) - && mResources.getColor(android.R.color.system_neutral1_500, mContext.getTheme()) - == mColorScheme.getNeutral1().get(6) - && mResources.getColor(android.R.color.system_neutral2_500, mContext.getTheme()) - == mColorScheme.getNeutral2().get(6); + private boolean colorSchemeIsApplied(Set<UserHandle> managedProfiles) { + final ArraySet<UserHandle> allProfiles = new ArraySet<>(managedProfiles); + allProfiles.add(UserHandle.SYSTEM); + for (UserHandle userHandle : allProfiles) { + Resources res = userHandle.isSystem() + ? mResources : mContext.createContextAsUser(userHandle, 0).getResources(); + if (!(res.getColor(android.R.color.system_accent1_500, mContext.getTheme()) + == mColorScheme.getAccent1().get(6) + && res.getColor(android.R.color.system_accent2_500, mContext.getTheme()) + == mColorScheme.getAccent2().get(6) + && res.getColor(android.R.color.system_accent3_500, mContext.getTheme()) + == mColorScheme.getAccent3().get(6) + && res.getColor(android.R.color.system_neutral1_500, mContext.getTheme()) + == mColorScheme.getNeutral1().get(6) + && res.getColor(android.R.color.system_neutral2_500, mContext.getTheme()) + == mColorScheme.getNeutral2().get(6))) { + return false; + } + } + return true; } private void updateThemeOverlays() { @@ -622,6 +628,12 @@ public class ThemeOverlayController extends CoreStartable implements Dumpable { managedProfiles.add(userInfo.getUserHandle()); } } + + if (colorSchemeIsApplied(managedProfiles)) { + Log.d(TAG, "Skipping overlay creation. Theme was already: " + mColorScheme); + return; + } + if (DEBUG) { Log.d(TAG, "Applying overlays: " + categoryToPackage.keySet().stream() .map(key -> key + " -> " + categoryToPackage.get(key)).collect( diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java index 3dfc94bcd5b6..c625dc7d4b50 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java @@ -729,6 +729,18 @@ public class ThemeOverlayControllerTest extends SysuiTestCase { mColorsListener.getValue().onColorsChanged(mainColors, WallpaperManager.FLAG_SYSTEM, USER_SYSTEM); + reset(mResources); + when(mResources.getColor(eq(android.R.color.system_accent1_500), any())) + .thenReturn(mThemeOverlayController.mColorScheme.getAccent1().get(6)); + when(mResources.getColor(eq(android.R.color.system_accent2_500), any())) + .thenReturn(mThemeOverlayController.mColorScheme.getAccent2().get(6)); + when(mResources.getColor(eq(android.R.color.system_accent3_500), any())) + .thenReturn(mThemeOverlayController.mColorScheme.getAccent3().get(6)); + when(mResources.getColor(eq(android.R.color.system_neutral1_500), any())) + .thenReturn(mThemeOverlayController.mColorScheme.getNeutral1().get(6)); + when(mResources.getColor(eq(android.R.color.system_neutral2_500), any())) + .thenReturn(mThemeOverlayController.mColorScheme.getNeutral2().get(6)); + // Defers event because we already have initial colors. verify(mThemeOverlayApplier, never()) .applyCurrentUserOverlays(any(), any(), anyInt(), any()); |