Merge "Fix lingering theme color reset on reboot issue" into tm-qpr-dev am: f5283b48dc am: b6bfa1a73c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20105513
Change-Id: I935b9db98c47c176937b8d40a66e019cbea46d62
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
index adef182..a345d99 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
@@ -171,6 +171,10 @@
@Override
public void onColorsChanged(WallpaperColors wallpaperColors, int which, int userId) {
+ WallpaperColors currentColors = mCurrentColors.get(userId);
+ if (wallpaperColors != null && wallpaperColors.equals(currentColors)) {
+ return;
+ }
boolean currentUser = userId == mUserTracker.getUserId();
if (currentUser && !mAcceptColorEvents
&& mWakefulnessLifecycle.getWakefulness() != WAKEFULNESS_ASLEEP) {
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 50259b5..2a93fff 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java
@@ -885,4 +885,31 @@
assertThat(themeOverlays.getValue().get(OVERLAY_CATEGORY_SYSTEM_PALETTE))
.isEqualTo(new OverlayIdentifier("ff00ff00"));
}
+
+ // Regression test for b/234603929, where a reboot would generate a wallpaper colors changed
+ // event for the already-set colors that would then set the theme incorrectly on screen sleep.
+ @Test
+ public void onWallpaperColorsSetToSame_keepsTheme() {
+ // Set initial colors and verify.
+ WallpaperColors startingColors = new WallpaperColors(Color.valueOf(Color.RED),
+ Color.valueOf(Color.BLUE), null);
+ WallpaperColors sameColors = new WallpaperColors(Color.valueOf(Color.RED),
+ Color.valueOf(Color.BLUE), null);
+ mColorsListener.getValue().onColorsChanged(startingColors, WallpaperManager.FLAG_SYSTEM,
+ USER_SYSTEM);
+ verify(mThemeOverlayApplier)
+ .applyCurrentUserOverlays(any(), any(), anyInt(), any());
+ clearInvocations(mThemeOverlayApplier);
+
+ // Set to the same colors.
+ mColorsListener.getValue().onColorsChanged(sameColors, WallpaperManager.FLAG_SYSTEM,
+ USER_SYSTEM);
+ verify(mThemeOverlayApplier, never())
+ .applyCurrentUserOverlays(any(), any(), anyInt(), any());
+
+ // Verify that no change resulted.
+ mWakefulnessLifecycleObserver.getValue().onFinishedGoingToSleep();
+ verify(mThemeOverlayApplier, never()).applyCurrentUserOverlays(any(), any(), anyInt(),
+ any());
+ }
}