From 9c07bde8738672abbf7687128fed26d32cfb6fd7 Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Wed, 21 Apr 2021 23:54:01 -0700 Subject: [PATCH] Fix issue where theme would be accepted in SUW An event passing null would cause the internal state of ThemeOverlayController to be reset, accepting future theming events. Test: atest ThemeOverlayControllerTest Bug: 182560740 Change-Id: Ie619ff5ae73b97e6a26cc90227bcad1c6277b30b --- .../systemui/theme/ThemeOverlayController.java | 4 ++++ .../systemui/theme/ThemeOverlayControllerTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java index fdd929cae17d1..5c5052d4d0d7c 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 ddf39d1e7c6e7..1d1411ad2ec1b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java @@ -212,6 +212,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