From 995fe77ddeaf2d4182772b0e6cd9038a71dcb4fc Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Fri, 31 May 2019 11:42:26 -0700 Subject: [PATCH] Fix issue where scrim color event would be skipped Test: adb shell service call uimode 4 i32 1 Test: adb shell service call uimode 4 i32 2 Test: atest SysuiColorExtractorTests Fixes: 134019682 Change-Id: I8617683a2f0d9b04e6f799d20b8ebe9d218a7033 --- .../colorextraction/SysuiColorExtractor.java | 6 ++ .../SysuiColorExtractorTests.java | 80 ++++++++++--------- 2 files changed, 50 insertions(+), 36 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java index 05665b5ae4a2d..835ffc976e9f7 100644 --- a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java +++ b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java @@ -16,6 +16,7 @@ package com.android.systemui.colorextraction; +import android.annotation.ColorInt; import android.app.WallpaperColors; import android.app.WallpaperManager; import android.content.Context; @@ -113,7 +114,11 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, super.onColorsChanged(colors, which); if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { + @ColorInt int oldColor = mWpHiddenColors.getMainColor(); updateDefaultGradients(colors); + if (oldColor != mWpHiddenColors.getMainColor()) { + triggerColorsChanged(WallpaperManager.FLAG_SYSTEM); + } } } @@ -121,6 +126,7 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, public void onUiModeChanged() { WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM); updateDefaultGradients(systemColors); + triggerColorsChanged(WallpaperManager.FLAG_SYSTEM); } /** diff --git a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java index 67df60a3dcfc1..9c2c822571739 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java +++ b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java @@ -19,6 +19,7 @@ package com.android.systemui.colorextraction; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; @@ -36,8 +37,10 @@ import com.android.internal.colorextraction.types.Tonal; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.policy.ConfigurationController; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; /** * Tests color extraction generation. @@ -54,62 +57,68 @@ public class SysuiColorExtractorTests extends SysuiTestCase { ColorExtractor.TYPE_DARK, ColorExtractor.TYPE_EXTRA_DARK}; + private ColorExtractor.GradientColors mColors; + private SysuiColorExtractor mColorExtractor; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mColors = new ColorExtractor.GradientColors(); + mColors.setMainColor(Color.RED); + mColors.setSecondaryColor(Color.RED); + mColorExtractor = new SysuiColorExtractor(getContext(), + (inWallpaperColors, outGradientColorsNormal, outGradientColorsDark, + outGradientColorsExtraDark) -> { + outGradientColorsNormal.set(mColors); + outGradientColorsDark.set(mColors); + outGradientColorsExtraDark.set(mColors); + }, mock(ConfigurationController.class), false); + } + @Test public void getColors_usesGreyIfWallpaperNotVisible() { - ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); - colors.setMainColor(Color.RED); - colors.setSecondaryColor(Color.RED); + simulateEvent(mColorExtractor); + mColorExtractor.setWallpaperVisible(false); - SysuiColorExtractor extractor = getTestableExtractor(colors); - simulateEvent(extractor); - extractor.setWallpaperVisible(false); - - ColorExtractor.GradientColors fallbackColors = extractor.getNeutralColors(); + ColorExtractor.GradientColors fallbackColors = mColorExtractor.getNeutralColors(); for (int type : sTypes) { assertEquals("Not using fallback!", - extractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); + mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); assertNotEquals("Wallpaper visibility event should not affect lock wallpaper.", - extractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); + mColorExtractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); } } @Test public void getColors_doesntUseFallbackIfVisible() { - ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); - colors.setMainColor(Color.RED); - colors.setSecondaryColor(Color.RED); + mColors.setMainColor(Color.RED); + mColors.setSecondaryColor(Color.RED); - SysuiColorExtractor extractor = getTestableExtractor(colors); - simulateEvent(extractor); - extractor.setWallpaperVisible(true); + simulateEvent(mColorExtractor); + mColorExtractor.setWallpaperVisible(true); for (int which : sWhich) { for (int type : sTypes) { assertEquals("Not using extracted colors!", - extractor.getColors(which, type), colors); + mColorExtractor.getColors(which, type), mColors); } } } @Test public void getColors_fallbackWhenMediaIsVisible() { - ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); - colors.setMainColor(Color.RED); - colors.setSecondaryColor(Color.RED); + simulateEvent(mColorExtractor); + mColorExtractor.setWallpaperVisible(true); + mColorExtractor.setHasBackdrop(true); - SysuiColorExtractor extractor = getTestableExtractor(colors); - simulateEvent(extractor); - extractor.setWallpaperVisible(true); - extractor.setHasBackdrop(true); - - ColorExtractor.GradientColors fallbackColors = extractor.getNeutralColors(); + ColorExtractor.GradientColors fallbackColors = mColorExtractor.getNeutralColors(); for (int type : sTypes) { assertEquals("Not using fallback!", - extractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); + mColorExtractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); assertNotEquals("Media visibility should not affect system wallpaper.", - extractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); + mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); } } @@ -126,14 +135,13 @@ public class SysuiColorExtractorTests extends SysuiTestCase { verify(tonal).applyFallback(any(), any()); } - private SysuiColorExtractor getTestableExtractor(ColorExtractor.GradientColors colors) { - return new SysuiColorExtractor(getContext(), - (inWallpaperColors, outGradientColorsNormal, outGradientColorsDark, - outGradientColorsExtraDark) -> { - outGradientColorsNormal.set(colors); - outGradientColorsDark.set(colors); - outGradientColorsExtraDark.set(colors); - }, mock(ConfigurationController.class), false); + @Test + public void onUiModeChanged_notifiesListener() { + ColorExtractor.OnColorsChangedListener listener = mock( + ColorExtractor.OnColorsChangedListener.class); + mColorExtractor.addOnColorsChangedListener(listener); + mColorExtractor.onUiModeChanged(); + verify(listener).onColorsChanged(any(), anyInt()); } private void simulateEvent(SysuiColorExtractor extractor) {