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
This commit is contained in:
Lucas Dupin
2021-04-21 23:54:01 -07:00
parent 469e1b4942
commit 9c07bde873
2 changed files with 16 additions and 0 deletions

View File

@@ -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? "

View File

@@ -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