Merge "Add COLOR_FIDELITY flag" into udc-qpr-dev

This commit is contained in:
Hawkwood Glazier
2023-07-27 23:34:18 +00:00
committed by Android (Google) Code Review
4 changed files with 77 additions and 68 deletions

View File

@@ -382,6 +382,9 @@ object Flags {
// 804 - monochromatic themes
@JvmField val MONOCHROMATIC_THEME = releasedFlag(804, "monochromatic")
// TODO(b/293380347): Tracking Bug
@JvmField val COLOR_FIDELITY = unreleasedFlag(805, "color_fidelity")
// 900 - media
// TODO(b/254512697): Tracking Bug
val MEDIA_TAP_TO_TRANSFER = releasedFlag(900, "media_tap_to_transfer")

View File

@@ -22,83 +22,86 @@ import com.google.ux.material.libmonet.dynamiccolor.MaterialDynamicColors
class DynamicColors {
companion object {
private val MDC = MaterialDynamicColors()
@JvmField
val ALL_DYNAMIC_COLORS_MAPPED: List<Pair<String, DynamicColor>> =
arrayListOf(
Pair.create("primary_container", MDC.primaryContainer()),
Pair.create("on_primary_container", MDC.onPrimaryContainer()),
Pair.create("primary", MDC.primary()),
Pair.create("on_primary", MDC.onPrimary()),
Pair.create("secondary_container", MDC.secondaryContainer()),
Pair.create("on_secondary_container", MDC.onSecondaryContainer()),
Pair.create("secondary", MDC.secondary()),
Pair.create("on_secondary", MDC.onSecondary()),
Pair.create("tertiary_container", MDC.tertiaryContainer()),
Pair.create("on_tertiary_container", MDC.onTertiaryContainer()),
Pair.create("tertiary", MDC.tertiary()),
Pair.create("on_tertiary", MDC.onTertiary()),
Pair.create("background", MDC.background()),
Pair.create("on_background", MDC.onBackground()),
Pair.create("surface", MDC.surface()),
Pair.create("on_surface", MDC.onSurface()),
Pair.create("surface_container_low", MDC.surfaceContainerLow()),
Pair.create("surface_container_lowest", MDC.surfaceContainerLowest()),
Pair.create("surface_container", MDC.surfaceContainer()),
Pair.create("surface_container_high", MDC.surfaceContainerHigh()),
Pair.create("surface_container_highest", MDC.surfaceContainerHighest()),
Pair.create("surface_bright", MDC.surfaceBright()),
Pair.create("surface_dim", MDC.surfaceDim()),
Pair.create("surface_variant", MDC.surfaceVariant()),
Pair.create("on_surface_variant", MDC.onSurfaceVariant()),
Pair.create("outline", MDC.outline()),
Pair.create("outline_variant", MDC.outlineVariant()),
Pair.create("error", MDC.error()),
Pair.create("on_error", MDC.onError()),
Pair.create("error_container", MDC.errorContainer()),
Pair.create("on_error_container", MDC.onErrorContainer()),
Pair.create("control_activated", MDC.controlActivated()),
Pair.create("control_normal", MDC.controlNormal()),
Pair.create("control_highlight", MDC.controlHighlight()),
Pair.create("text_primary_inverse", MDC.textPrimaryInverse()),
@JvmStatic
fun allDynamicColorsMapped(isExtendedFidelity: Boolean): List<Pair<String, DynamicColor>> {
val mdc = MaterialDynamicColors(isExtendedFidelity)
return arrayListOf(
Pair.create("primary_container", mdc.primaryContainer()),
Pair.create("on_primary_container", mdc.onPrimaryContainer()),
Pair.create("primary", mdc.primary()),
Pair.create("on_primary", mdc.onPrimary()),
Pair.create("secondary_container", mdc.secondaryContainer()),
Pair.create("on_secondary_container", mdc.onSecondaryContainer()),
Pair.create("secondary", mdc.secondary()),
Pair.create("on_secondary", mdc.onSecondary()),
Pair.create("tertiary_container", mdc.tertiaryContainer()),
Pair.create("on_tertiary_container", mdc.onTertiaryContainer()),
Pair.create("tertiary", mdc.tertiary()),
Pair.create("on_tertiary", mdc.onTertiary()),
Pair.create("background", mdc.background()),
Pair.create("on_background", mdc.onBackground()),
Pair.create("surface", mdc.surface()),
Pair.create("on_surface", mdc.onSurface()),
Pair.create("surface_container_low", mdc.surfaceContainerLow()),
Pair.create("surface_container_lowest", mdc.surfaceContainerLowest()),
Pair.create("surface_container", mdc.surfaceContainer()),
Pair.create("surface_container_high", mdc.surfaceContainerHigh()),
Pair.create("surface_container_highest", mdc.surfaceContainerHighest()),
Pair.create("surface_bright", mdc.surfaceBright()),
Pair.create("surface_dim", mdc.surfaceDim()),
Pair.create("surface_variant", mdc.surfaceVariant()),
Pair.create("on_surface_variant", mdc.onSurfaceVariant()),
Pair.create("outline", mdc.outline()),
Pair.create("outline_variant", mdc.outlineVariant()),
Pair.create("error", mdc.error()),
Pair.create("on_error", mdc.onError()),
Pair.create("error_container", mdc.errorContainer()),
Pair.create("on_error_container", mdc.onErrorContainer()),
Pair.create("control_activated", mdc.controlActivated()),
Pair.create("control_normal", mdc.controlNormal()),
Pair.create("control_highlight", mdc.controlHighlight()),
Pair.create("text_primary_inverse", mdc.textPrimaryInverse()),
Pair.create(
"text_secondary_and_tertiary_inverse",
MDC.textSecondaryAndTertiaryInverse()
mdc.textSecondaryAndTertiaryInverse()
),
Pair.create(
"text_primary_inverse_disable_only",
MDC.textPrimaryInverseDisableOnly()
mdc.textPrimaryInverseDisableOnly()
),
Pair.create(
"text_secondary_and_tertiary_inverse_disabled",
MDC.textSecondaryAndTertiaryInverseDisabled()
mdc.textSecondaryAndTertiaryInverseDisabled()
),
Pair.create("text_hint_inverse", MDC.textHintInverse()),
Pair.create("palette_key_color_primary", MDC.primaryPaletteKeyColor()),
Pair.create("palette_key_color_secondary", MDC.secondaryPaletteKeyColor()),
Pair.create("palette_key_color_tertiary", MDC.tertiaryPaletteKeyColor()),
Pair.create("palette_key_color_neutral", MDC.neutralPaletteKeyColor()),
Pair.create("text_hint_inverse", mdc.textHintInverse()),
Pair.create("palette_key_color_primary", mdc.primaryPaletteKeyColor()),
Pair.create("palette_key_color_secondary", mdc.secondaryPaletteKeyColor()),
Pair.create("palette_key_color_tertiary", mdc.tertiaryPaletteKeyColor()),
Pair.create("palette_key_color_neutral", mdc.neutralPaletteKeyColor()),
Pair.create(
"palette_key_color_neutral_variant",
MDC.neutralVariantPaletteKeyColor()
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()),
@JvmStatic
fun getFixedColorsMapped(isExtendedFidelity: Boolean): List<Pair<String, DynamicColor>> {
val mdc = MaterialDynamicColors(isExtendedFidelity)
return 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()),
)
}
}
}

View File

@@ -130,6 +130,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
private final boolean mIsMonochromaticEnabled;
private final Context mContext;
private final boolean mIsMonetEnabled;
private final boolean mIsFidelityEnabled;
private final UserTracker mUserTracker;
private final DeviceProvisionedController mDeviceProvisionedController;
private final Resources mResources;
@@ -398,6 +399,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
mContext = context;
mIsMonochromaticEnabled = featureFlags.isEnabled(Flags.MONOCHROMATIC_THEME);
mIsMonetEnabled = featureFlags.isEnabled(Flags.MONET);
mIsFidelityEnabled = featureFlags.isEnabled(Flags.COLOR_FIDELITY);
mDeviceProvisionedController = deviceProvisionedController;
mBroadcastDispatcher = broadcastDispatcher;
mUserManager = userManager;
@@ -632,7 +634,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
private void assignDynamicPaletteToOverlay(FabricatedOverlay overlay, boolean isDark) {
String suffix = isDark ? "dark" : "light";
DynamicScheme scheme = isDark ? mDynamicSchemeDark : mDynamicSchemeLight;
DynamicColors.ALL_DYNAMIC_COLORS_MAPPED.forEach(p -> {
DynamicColors.allDynamicColorsMapped(mIsFidelityEnabled).forEach(p -> {
String resourceName = "android:color/system_" + p.first + "_" + suffix;
int colorValue = p.second.getArgb(scheme);
overlay.setResourceValue(resourceName, TYPE_INT_COLOR_ARGB8, colorValue,
@@ -641,7 +643,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
}
private void assignFixedColorsToOverlay(FabricatedOverlay overlay) {
DynamicColors.FIXED_COLORS_MAPPED.forEach(p -> {
DynamicColors.getFixedColorsMapped(mIsFidelityEnabled).forEach(p -> {
String resourceName = "android:color/system_" + p.first;
int colorValue = p.second.getArgb(mDynamicSchemeLight);
overlay.setResourceValue(resourceName, TYPE_INT_COLOR_ARGB8, colorValue,
@@ -660,7 +662,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
Resources res = userHandle.isSystem()
? mResources : mContext.createContextAsUser(userHandle, 0).getResources();
Resources.Theme theme = mContext.getTheme();
MaterialDynamicColors dynamicColors = new MaterialDynamicColors();
MaterialDynamicColors dynamicColors = new MaterialDynamicColors(mIsFidelityEnabled);
if (!(res.getColor(android.R.color.system_accent1_500, theme)
== mColorScheme.getAccent1().getS500()
&& res.getColor(android.R.color.system_accent2_500, theme)
@@ -819,6 +821,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
pw.println("mNeutralOverlay=" + mNeutralOverlay);
pw.println("mDynamicOverlay=" + mDynamicOverlay);
pw.println("mIsMonetEnabled=" + mIsMonetEnabled);
pw.println("mIsFidelityEnabled=" + mIsFidelityEnabled);
pw.println("mColorScheme=" + mColorScheme);
pw.println("mNeedsOverlayCreation=" + mNeedsOverlayCreation);
pw.println("mAcceptColorEvents=" + mAcceptColorEvents);

View File

@@ -959,8 +959,8 @@ public class ThemeOverlayControllerTest extends SysuiTestCase {
// 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())
DynamicColors.allDynamicColorsMapped(false).size() * 2
+ DynamicColors.getFixedColorsMapped(false).size())
).setResourceValue(any(String.class), eq(TYPE_INT_COLOR_ARGB8), anyInt(), eq(null));
}
}