Loading packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.colorextraction; package com.android.systemui.colorextraction; import android.annotation.ColorInt; import android.app.WallpaperColors; import android.app.WallpaperColors; import android.app.WallpaperManager; import android.app.WallpaperManager; import android.content.Context; import android.content.Context; Loading Loading @@ -113,7 +114,11 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, super.onColorsChanged(colors, which); super.onColorsChanged(colors, which); if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { @ColorInt int oldColor = mWpHiddenColors.getMainColor(); updateDefaultGradients(colors); updateDefaultGradients(colors); if (oldColor != mWpHiddenColors.getMainColor()) { triggerColorsChanged(WallpaperManager.FLAG_SYSTEM); } } } } } Loading @@ -121,6 +126,7 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, public void onUiModeChanged() { public void onUiModeChanged() { WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM); WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM); updateDefaultGradients(systemColors); updateDefaultGradients(systemColors); triggerColorsChanged(WallpaperManager.FLAG_SYSTEM); } } /** /** Loading packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java +44 −36 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.colorextraction; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.reset; Loading @@ -36,8 +37,10 @@ import com.android.internal.colorextraction.types.Tonal; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; import org.junit.Before; import org.junit.Test; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; /** /** * Tests color extraction generation. * Tests color extraction generation. Loading @@ -54,62 +57,68 @@ public class SysuiColorExtractorTests extends SysuiTestCase { ColorExtractor.TYPE_DARK, ColorExtractor.TYPE_DARK, ColorExtractor.TYPE_EXTRA_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 @Test public void getColors_usesGreyIfWallpaperNotVisible() { public void getColors_usesGreyIfWallpaperNotVisible() { ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); simulateEvent(mColorExtractor); colors.setMainColor(Color.RED); mColorExtractor.setWallpaperVisible(false); colors.setSecondaryColor(Color.RED); SysuiColorExtractor extractor = getTestableExtractor(colors); ColorExtractor.GradientColors fallbackColors = mColorExtractor.getNeutralColors(); simulateEvent(extractor); extractor.setWallpaperVisible(false); ColorExtractor.GradientColors fallbackColors = extractor.getNeutralColors(); for (int type : sTypes) { for (int type : sTypes) { assertEquals("Not using fallback!", 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.", assertNotEquals("Wallpaper visibility event should not affect lock wallpaper.", extractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); mColorExtractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); } } } } @Test @Test public void getColors_doesntUseFallbackIfVisible() { public void getColors_doesntUseFallbackIfVisible() { ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); mColors.setMainColor(Color.RED); colors.setMainColor(Color.RED); mColors.setSecondaryColor(Color.RED); colors.setSecondaryColor(Color.RED); SysuiColorExtractor extractor = getTestableExtractor(colors); simulateEvent(mColorExtractor); simulateEvent(extractor); mColorExtractor.setWallpaperVisible(true); extractor.setWallpaperVisible(true); for (int which : sWhich) { for (int which : sWhich) { for (int type : sTypes) { for (int type : sTypes) { assertEquals("Not using extracted colors!", assertEquals("Not using extracted colors!", extractor.getColors(which, type), colors); mColorExtractor.getColors(which, type), mColors); } } } } } } @Test @Test public void getColors_fallbackWhenMediaIsVisible() { public void getColors_fallbackWhenMediaIsVisible() { ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); simulateEvent(mColorExtractor); colors.setMainColor(Color.RED); mColorExtractor.setWallpaperVisible(true); colors.setSecondaryColor(Color.RED); 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) { for (int type : sTypes) { assertEquals("Not using fallback!", 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.", assertNotEquals("Media visibility should not affect system wallpaper.", extractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); } } } } Loading @@ -126,14 +135,13 @@ public class SysuiColorExtractorTests extends SysuiTestCase { verify(tonal).applyFallback(any(), any()); verify(tonal).applyFallback(any(), any()); } } private SysuiColorExtractor getTestableExtractor(ColorExtractor.GradientColors colors) { @Test return new SysuiColorExtractor(getContext(), public void onUiModeChanged_notifiesListener() { (inWallpaperColors, outGradientColorsNormal, outGradientColorsDark, ColorExtractor.OnColorsChangedListener listener = mock( outGradientColorsExtraDark) -> { ColorExtractor.OnColorsChangedListener.class); outGradientColorsNormal.set(colors); mColorExtractor.addOnColorsChangedListener(listener); outGradientColorsDark.set(colors); mColorExtractor.onUiModeChanged(); outGradientColorsExtraDark.set(colors); verify(listener).onColorsChanged(any(), anyInt()); }, mock(ConfigurationController.class), false); } } private void simulateEvent(SysuiColorExtractor extractor) { private void simulateEvent(SysuiColorExtractor extractor) { Loading Loading
packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.colorextraction; package com.android.systemui.colorextraction; import android.annotation.ColorInt; import android.app.WallpaperColors; import android.app.WallpaperColors; import android.app.WallpaperManager; import android.app.WallpaperManager; import android.content.Context; import android.content.Context; Loading Loading @@ -113,7 +114,11 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, super.onColorsChanged(colors, which); super.onColorsChanged(colors, which); if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { @ColorInt int oldColor = mWpHiddenColors.getMainColor(); updateDefaultGradients(colors); updateDefaultGradients(colors); if (oldColor != mWpHiddenColors.getMainColor()) { triggerColorsChanged(WallpaperManager.FLAG_SYSTEM); } } } } } Loading @@ -121,6 +126,7 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, public void onUiModeChanged() { public void onUiModeChanged() { WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM); WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM); updateDefaultGradients(systemColors); updateDefaultGradients(systemColors); triggerColorsChanged(WallpaperManager.FLAG_SYSTEM); } } /** /** Loading
packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java +44 −36 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.colorextraction; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.reset; Loading @@ -36,8 +37,10 @@ import com.android.internal.colorextraction.types.Tonal; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; import org.junit.Before; import org.junit.Test; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; /** /** * Tests color extraction generation. * Tests color extraction generation. Loading @@ -54,62 +57,68 @@ public class SysuiColorExtractorTests extends SysuiTestCase { ColorExtractor.TYPE_DARK, ColorExtractor.TYPE_DARK, ColorExtractor.TYPE_EXTRA_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 @Test public void getColors_usesGreyIfWallpaperNotVisible() { public void getColors_usesGreyIfWallpaperNotVisible() { ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); simulateEvent(mColorExtractor); colors.setMainColor(Color.RED); mColorExtractor.setWallpaperVisible(false); colors.setSecondaryColor(Color.RED); SysuiColorExtractor extractor = getTestableExtractor(colors); ColorExtractor.GradientColors fallbackColors = mColorExtractor.getNeutralColors(); simulateEvent(extractor); extractor.setWallpaperVisible(false); ColorExtractor.GradientColors fallbackColors = extractor.getNeutralColors(); for (int type : sTypes) { for (int type : sTypes) { assertEquals("Not using fallback!", 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.", assertNotEquals("Wallpaper visibility event should not affect lock wallpaper.", extractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); mColorExtractor.getColors(WallpaperManager.FLAG_LOCK, type), fallbackColors); } } } } @Test @Test public void getColors_doesntUseFallbackIfVisible() { public void getColors_doesntUseFallbackIfVisible() { ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); mColors.setMainColor(Color.RED); colors.setMainColor(Color.RED); mColors.setSecondaryColor(Color.RED); colors.setSecondaryColor(Color.RED); SysuiColorExtractor extractor = getTestableExtractor(colors); simulateEvent(mColorExtractor); simulateEvent(extractor); mColorExtractor.setWallpaperVisible(true); extractor.setWallpaperVisible(true); for (int which : sWhich) { for (int which : sWhich) { for (int type : sTypes) { for (int type : sTypes) { assertEquals("Not using extracted colors!", assertEquals("Not using extracted colors!", extractor.getColors(which, type), colors); mColorExtractor.getColors(which, type), mColors); } } } } } } @Test @Test public void getColors_fallbackWhenMediaIsVisible() { public void getColors_fallbackWhenMediaIsVisible() { ColorExtractor.GradientColors colors = new ColorExtractor.GradientColors(); simulateEvent(mColorExtractor); colors.setMainColor(Color.RED); mColorExtractor.setWallpaperVisible(true); colors.setSecondaryColor(Color.RED); 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) { for (int type : sTypes) { assertEquals("Not using fallback!", 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.", assertNotEquals("Media visibility should not affect system wallpaper.", extractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); mColorExtractor.getColors(WallpaperManager.FLAG_SYSTEM, type), fallbackColors); } } } } Loading @@ -126,14 +135,13 @@ public class SysuiColorExtractorTests extends SysuiTestCase { verify(tonal).applyFallback(any(), any()); verify(tonal).applyFallback(any(), any()); } } private SysuiColorExtractor getTestableExtractor(ColorExtractor.GradientColors colors) { @Test return new SysuiColorExtractor(getContext(), public void onUiModeChanged_notifiesListener() { (inWallpaperColors, outGradientColorsNormal, outGradientColorsDark, ColorExtractor.OnColorsChangedListener listener = mock( outGradientColorsExtraDark) -> { ColorExtractor.OnColorsChangedListener.class); outGradientColorsNormal.set(colors); mColorExtractor.addOnColorsChangedListener(listener); outGradientColorsDark.set(colors); mColorExtractor.onUiModeChanged(); outGradientColorsExtraDark.set(colors); verify(listener).onColorsChanged(any(), anyInt()); }, mock(ConfigurationController.class), false); } } private void simulateEvent(SysuiColorExtractor extractor) { private void simulateEvent(SysuiColorExtractor extractor) { Loading