summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-05-16 23:09:19 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-05-16 23:09:19 +0000
commitc912ad84b5f5c593f549583ca7af600b8d971476 (patch)
treedfb5e7329970559763f64eeddeccb3e641b10cfe
parentee1b4d021f7dc3f0d427e45c0e0815ad2475b51a (diff)
parent40f6700c52a2cb7c35fc6db60e1dfe138122ff45 (diff)
Merge "Move optimization to later part of pipeline" into tm-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java44
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java12
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 c6a8445d2443..094490ba7adc 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;
@@ -475,10 +476,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
@@ -538,19 +535,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() {
@@ -623,6 +629,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 68818f610fb7..b7f38f1433ff 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
@@ -733,6 +733,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());