WallpaperColors caching and synchronization
Making sure that colors are being cached in
WallpaperManagerService and that sysui won't
force a new color extraction.
Fixes: 62958267
Test: manual, reboot, look at systrace
Test: runtest -x cts/tests/app/src/android/app/cts/WallpaperManagerTest.java
Change-Id: Ic079a8e3d4d4ad65947b718dcc544f795c16f152
diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java
index bb44123..776d076 100644
--- a/packages/SystemUI/src/com/android/systemui/Dependency.java
+++ b/packages/SystemUI/src/com/android/systemui/Dependency.java
@@ -268,6 +268,9 @@
mProviders.put(AccessibilityManagerWrapper.class,
() -> new AccessibilityManagerWrapper(mContext));
+ // Creating a new instance will trigger color extraction.
+ // Thankfully this only happens once - during boot - and WallpaperManagerService
+ // loads colors from cache.
mProviders.put(SysuiColorExtractor.class, () -> new SysuiColorExtractor(mContext));
mProviders.put(TunablePaddingService.class, () -> new TunablePaddingService());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index 754c344..0bd58df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -304,8 +304,8 @@
mNeedsDrawableColorUpdate = false;
if (mKeyguardShowing) {
// Always animate color changes if we're seeing the keyguard
- mScrimInFront.setColors(mLockColors);
- mScrimBehind.setColors(mLockColors);
+ mScrimInFront.setColors(mLockColors, true /* animated */);
+ mScrimBehind.setColors(mLockColors, true /* animated */);
} else {
// Only animate scrim color if the scrim view is actually visible
boolean animateScrimInFront = mScrimInFront.getViewAlpha() != 0;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index f6fab44..2118fbd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -4559,16 +4559,13 @@
.supportsDarkText();
// And wallpaper defines if QS should be light or dark.
boolean useDarkTheme = false;
- final WallpaperManager wallpaperManager = mContext.getSystemService(WallpaperManager.class);
- if (wallpaperManager != null) {
- WallpaperColors wallpaperColors = wallpaperManager
- .getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
- if (wallpaperColors != null) {
- final int mainColor = wallpaperColors.getPrimaryColor().toArgb();
- final float[] hsl = new float[3];
- ColorUtils.colorToHSL(mainColor, hsl);
- useDarkTheme = hsl[2] < 0.2f;
- }
+ final WallpaperColors systemColors =
+ mColorExtractor.getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
+ if (systemColors != null) {
+ int mainColor = systemColors.getPrimaryColor().toArgb();
+ float[] hsl = new float[3];
+ ColorUtils.colorToHSL(mainColor, hsl);
+ useDarkTheme = hsl[2] < 0.2f;
}
// Enable/disable dark UI.