diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java index 329cd71deda74..9bdd8c009531f 100644 --- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java +++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java @@ -151,6 +151,10 @@ public class ThemeOverlayController extends SystemUI implements Dumpable { + wallpaperColors); mDeferredThemeEvaluation = true; return; + } else if (mDeferredThemeEvaluation) { + Log.i(TAG, "Wallpaper color event received, but we already were deferring eval: " + + wallpaperColors); + return; } else { if (DEBUG) { Log.i(TAG, "During user setup, but allowing first color event: had? " 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 60e70d01edc86..2d9d7154d229b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java @@ -228,6 +228,18 @@ public class ThemeOverlayControllerTest extends SysuiTestCase { mColorsListener.getValue().onColorsChanged(mainColors, WallpaperManager.FLAG_SYSTEM); verify(mThemeOverlayApplier).applyCurrentUserOverlays(any(), any(), anyInt(), any()); + + // Regression test: null events should not reset the internal state and allow colors to be + // applied again. + clearInvocations(mThemeOverlayApplier); + mBroadcastReceiver.getValue().onReceive(null, new Intent(Intent.ACTION_WALLPAPER_CHANGED)); + mColorsListener.getValue().onColorsChanged(null, WallpaperManager.FLAG_SYSTEM); + verify(mThemeOverlayApplier, never()).applyCurrentUserOverlays(any(), any(), anyInt(), + any()); + mColorsListener.getValue().onColorsChanged(new WallpaperColors(Color.valueOf(Color.GREEN), + null, null), WallpaperManager.FLAG_SYSTEM); + verify(mThemeOverlayApplier, never()).applyCurrentUserOverlays(any(), any(), anyInt(), + any()); } @Test