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

Commit 866745da authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Do not add suffix to fixed colors

Fixed colors only exist once. They need special logic when being
assigned to overlays.

Fixes: 280128998
Test: Change colors, look at bouncer
Test: atest ThemeOverlayControllerTest
Change-Id: I001f7cf7987702de787ce29592985b990668d89d
parent de6724e2
Loading
Loading
Loading
Loading
+18 −13
Original line number Diff line number Diff line
@@ -56,18 +56,6 @@ class DynamicColors {
                Pair.create("on_error", MDC.onError()),
                Pair.create("error_container", MDC.errorContainer()),
                Pair.create("on_error_container", MDC.onErrorContainer()),
                Pair.create("primary_fixed", MDC.primaryFixed()),
                Pair.create("primary_fixed_dim", MDC.primaryFixedDim()),
                Pair.create("on_primary_fixed", MDC.onPrimaryFixed()),
                Pair.create("on_primary_fixed_variant", MDC.onPrimaryFixedVariant()),
                Pair.create("secondary_fixed", MDC.secondaryFixed()),
                Pair.create("secondary_fixed_dim", MDC.secondaryFixedDim()),
                Pair.create("on_secondary_fixed", MDC.onSecondaryFixed()),
                Pair.create("on_secondary_fixed_variant", MDC.onSecondaryFixedVariant()),
                Pair.create("tertiary_fixed", MDC.tertiaryFixed()),
                Pair.create("tertiary_fixed_dim", MDC.tertiaryFixedDim()),
                Pair.create("on_tertiary_fixed", MDC.onTertiaryFixed()),
                Pair.create("on_tertiary_fixed_variant", MDC.onTertiaryFixedVariant()),
                Pair.create("control_activated", MDC.controlActivated()),
                Pair.create("control_normal", MDC.controlNormal()),
                Pair.create("control_highlight", MDC.controlHighlight()),
@@ -92,7 +80,24 @@ class DynamicColors {
                Pair.create(
                    "palette_key_color_neutral_variant",
                    MDC.neutralVariantPaletteKeyColor()
                ),
            )

        @JvmField
        val FIXED_COLORS_MAPPED: List<Pair<String, DynamicColor>> =
            arrayListOf(
                Pair.create("primary_fixed", MDC.primaryFixed()),
                Pair.create("primary_fixed_dim", MDC.primaryFixedDim()),
                Pair.create("on_primary_fixed", MDC.onPrimaryFixed()),
                Pair.create("on_primary_fixed_variant", MDC.onPrimaryFixedVariant()),
                Pair.create("secondary_fixed", MDC.secondaryFixed()),
                Pair.create("secondary_fixed_dim", MDC.secondaryFixedDim()),
                Pair.create("on_secondary_fixed", MDC.onSecondaryFixed()),
                Pair.create("on_secondary_fixed_variant", MDC.onSecondaryFixedVariant()),
                Pair.create("tertiary_fixed", MDC.tertiaryFixed()),
                Pair.create("tertiary_fixed_dim", MDC.tertiaryFixedDim()),
                Pair.create("on_tertiary_fixed", MDC.onTertiaryFixed()),
                Pair.create("on_tertiary_fixed_variant", MDC.onTertiaryFixedVariant()),
            )
    }
}
+13 −1
Original line number Diff line number Diff line
@@ -624,6 +624,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
        FabricatedOverlay overlay = newFabricatedOverlay("dynamic");
        assignDynamicPaletteToOverlay(overlay, true /* isDark */);
        assignDynamicPaletteToOverlay(overlay, false /* isDark */);
        assignFixedColorsToOverlay(overlay);
        return overlay;
    }

@@ -638,6 +639,15 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
        });
    }

    private void assignFixedColorsToOverlay(FabricatedOverlay overlay) {
        DynamicColors.FIXED_COLORS_MAPPED.forEach(p -> {
            String resourceName = "android:color/system_" + p.first;
            int colorValue = p.second.getArgb(mDynamicSchemeLight);
            overlay.setResourceValue(resourceName, TYPE_INT_COLOR_ARGB8, colorValue,
                    null /* configuration */);
        });
    }

    /**
     * Checks if the color scheme in mColorScheme matches the current system palettes.
     * @param managedProfiles List of managed profiles for this user.
@@ -666,7 +676,9 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
                    && res.getColor(android.R.color.system_primary_container_dark, theme)
                    == MaterialDynamicColors.primaryContainer().getArgb(mDynamicSchemeDark)
                    && res.getColor(android.R.color.system_primary_container_light, theme)
                    == MaterialDynamicColors.primaryContainer().getArgb(mDynamicSchemeLight))) {
                    == MaterialDynamicColors.primaryContainer().getArgb(mDynamicSchemeLight)
                    && res.getColor(android.R.color.system_primary_fixed, theme)
                    == MaterialDynamicColors.primaryFixed().getArgb(mDynamicSchemeLight))) {
                return false;
            }
        }
+37 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.theme;

import static android.util.TypedValue.TYPE_INT_COLOR_ARGB8;

import static com.android.systemui.keyguard.WakefulnessLifecycle.WAKEFULNESS_AWAKE;
import static com.android.systemui.theme.ThemeOverlayApplier.OVERLAY_CATEGORY_ACCENT_COLOR;
import static com.android.systemui.theme.ThemeOverlayApplier.OVERLAY_CATEGORY_SYSTEM_PALETTE;
@@ -29,6 +31,7 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
@@ -926,4 +929,38 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
        verify(mThemeOverlayApplier, never()).applyCurrentUserOverlays(any(), any(), anyInt(),
                any());
    }

    @Test
    public void createDynamicOverlay_addsAllDynamicColors() {
        // Trigger new wallpaper colors to generate an overlay
        WallpaperColors mainColors = new WallpaperColors(Color.valueOf(Color.RED),
                Color.valueOf(Color.BLUE), null);
        mColorsListener.getValue().onColorsChanged(mainColors, WallpaperManager.FLAG_SYSTEM,
                USER_SYSTEM);
        ArgumentCaptor<FabricatedOverlay[]> themeOverlays =
                ArgumentCaptor.forClass(FabricatedOverlay[].class);

        verify(mThemeOverlayApplier)
                .applyCurrentUserOverlays(any(), themeOverlays.capture(), anyInt(), any());

        FabricatedOverlay[] overlays = themeOverlays.getValue();
        FabricatedOverlay accents = overlays[0];
        FabricatedOverlay neutrals = overlays[1];
        FabricatedOverlay dynamic = overlays[2];

        final int colorsPerPalette = 12;

        // Color resources were added for all 3 accent palettes
        verify(accents, times(colorsPerPalette * 3))
                .setResourceValue(any(String.class), eq(TYPE_INT_COLOR_ARGB8), anyInt(), eq(null));
        // Color resources were added for all 2 neutral palettes
        verify(neutrals, times(colorsPerPalette * 2))
                .setResourceValue(any(String.class), eq(TYPE_INT_COLOR_ARGB8), anyInt(), eq(null));
        // All dynamic colors were added twice: light and dark them
        // All fixed colors were added once
        verify(dynamic, times(
                DynamicColors.ALL_DYNAMIC_COLORS_MAPPED.size() * 2
                        + DynamicColors.FIXED_COLORS_MAPPED.size())
        ).setResourceValue(any(String.class), eq(TYPE_INT_COLOR_ARGB8), anyInt(), eq(null));
    }
}