Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a288fae7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix issue where scrim color event would be skipped" into qt-dev

parents b7a1ea9a 995fe77d
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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);
    }

    /**
+44 −36
Original line number Diff line number Diff line
@@ -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);

        SysuiColorExtractor extractor = getTestableExtractor(colors);
        simulateEvent(extractor);
        extractor.setWallpaperVisible(true);
        extractor.setHasBackdrop(true);
        simulateEvent(mColorExtractor);
        mColorExtractor.setWallpaperVisible(true);
        mColorExtractor.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) {