Loading packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt +18 −13 Original line number Diff line number Diff line Loading @@ -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()), Loading @@ -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()), ) } } packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java +13 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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. Loading Loading @@ -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; } } Loading packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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)); } } Loading
packages/SystemUI/src/com/android/systemui/theme/DynamicColors.kt +18 −13 Original line number Diff line number Diff line Loading @@ -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()), Loading @@ -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()), ) } }
packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java +13 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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. Loading Loading @@ -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; } } Loading
packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayControllerTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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)); } }