Merge "Add monochrome to wallpaper colors" into udc-dev
diff --git a/src/com/android/customization/model/color/ColorProvider.kt b/src/com/android/customization/model/color/ColorProvider.kt
index 6ce6f0b..6520b52 100644
--- a/src/com/android/customization/model/color/ColorProvider.kt
+++ b/src/com/android/customization/model/color/ColorProvider.kt
@@ -67,6 +67,10 @@
arrayOf(Style.TONAL_SPOT, Style.SPRITZ, Style.VIBRANT, Style.EXPRESSIVE)
else arrayOf(Style.TONAL_SPOT)
+ private val monochromeEnabled =
+ InjectorProvider.getInjector().getFlags().isMonochromaticThemeEnabled(mContext)
+ private var monochromeBundleName: String? = null
+
private val scope =
if (mContext is LifecycleOwner) {
mContext.lifecycleScope
@@ -177,6 +181,21 @@
}
if (shouldUseRevampedUi) {
+ // Insert monochrome in the second position if it is enabled and included in preset
+ // colors
+ if (monochromeEnabled) {
+ monochromeBundleName?.let {
+ bundles.add(
+ 1,
+ buildRevampedUIPreset(
+ it,
+ -1,
+ Style.MONOCHROMATIC,
+ ColorType.WALLPAPER_COLOR
+ )
+ )
+ }
+ }
bundles.addAll(
colorBundles?.filterNot {
(it as ColorOptionImpl).type == ColorType.WALLPAPER_COLOR
@@ -214,13 +233,13 @@
shouldUseRevampedUi: Boolean,
) {
// TODO(b/202145216): Measure time cost in the loop.
- for (style in styleList) {
- val lightColorScheme = ColorScheme(colorInt, /* darkTheme= */ false, style)
- val darkColorScheme = ColorScheme(colorInt, /* darkTheme= */ true, style)
- if (shouldUseRevampedUi) {
+ if (shouldUseRevampedUi) {
+ for (style in styleList) {
+ val lightColorScheme = ColorScheme(colorInt, /* darkTheme= */ false, style)
+ val darkColorScheme = ColorScheme(colorInt, /* darkTheme= */ true, style)
val builder = ColorOptionImpl.Builder()
- builder.lightColors = lightColorScheme.getRevampedUILightColorPreview()
- builder.darkColors = darkColorScheme.getRevampedUIDarkColorPreview()
+ builder.lightColors = getRevampedUILightColorPreview(lightColorScheme)
+ builder.darkColors = getRevampedUIDarkColorPreview(darkColorScheme)
builder.addOverlayPackage(
OVERLAY_CATEGORY_SYSTEM_PALETTE,
if (isDefault) "" else toColorString(colorInt)
@@ -232,7 +251,11 @@
builder.isDefault = isDefault
builder.type = ColorType.WALLPAPER_COLOR
bundles.add(builder.build())
- } else {
+ }
+ } else {
+ for (style in styleList) {
+ val lightColorScheme = ColorScheme(colorInt, /* darkTheme= */ false, style)
+ val darkColorScheme = ColorScheme(colorInt, /* darkTheme= */ true, style)
val builder = ColorSeedOption.Builder()
builder
.setLightColors(lightColorScheme.getLightColorPreview())
@@ -295,12 +318,12 @@
* order: top left, top right, bottom left, bottom right
*/
@ColorInt
- private fun ColorScheme.getRevampedUILightColorPreview(): IntArray {
+ private fun getRevampedUILightColorPreview(colorScheme: ColorScheme): IntArray {
return intArrayOf(
- setAlphaComponent(this.accent1.s600, ALPHA_MASK),
- setAlphaComponent(this.accent1.s600, ALPHA_MASK),
- setAlphaComponent(this.accent2.s100, ALPHA_MASK),
- ColorStateList.valueOf(this.accent3.s500).withLStar(59f).colors[0],
+ setAlphaComponent(colorScheme.accent1.s600, ALPHA_MASK),
+ setAlphaComponent(colorScheme.accent1.s600, ALPHA_MASK),
+ setAlphaComponent(colorScheme.accent2.s100, ALPHA_MASK),
+ ColorStateList.valueOf(colorScheme.accent3.s500).withLStar(59f).colors[0],
)
}
@@ -309,12 +332,12 @@
* order: top left, top right, bottom left, bottom right
*/
@ColorInt
- private fun ColorScheme.getRevampedUIDarkColorPreview(): IntArray {
+ private fun getRevampedUIDarkColorPreview(colorScheme: ColorScheme): IntArray {
return intArrayOf(
- setAlphaComponent(this.accent1.s200, ALPHA_MASK),
- setAlphaComponent(this.accent1.s200, ALPHA_MASK),
- setAlphaComponent(this.accent2.s700, ALPHA_MASK),
- setAlphaComponent(this.accent3.s100, ALPHA_MASK),
+ setAlphaComponent(colorScheme.accent1.s200, ALPHA_MASK),
+ setAlphaComponent(colorScheme.accent1.s200, ALPHA_MASK),
+ setAlphaComponent(colorScheme.accent2.s700, ALPHA_MASK),
+ setAlphaComponent(colorScheme.accent3.s100, ALPHA_MASK),
)
}
@@ -322,12 +345,12 @@
* Returns the Revamped UI preview of a preset ColorScheme based on this order: top left, top
* right, bottom left, bottom right
*/
- private fun ColorScheme.getRevampedUIPresetColorPreview(seed: Int): IntArray {
+ private fun getRevampedUIPresetColorPreview(colorScheme: ColorScheme, seed: Int): IntArray {
val colors =
- when (this.style) {
- Style.FRUIT_SALAD -> intArrayOf(seed, this.accent1.s100)
- Style.TONAL_SPOT -> intArrayOf(this.accentColor, this.accentColor)
- else -> intArrayOf(this.accent1.s100, this.accent1.s100)
+ when (colorScheme.style) {
+ Style.FRUIT_SALAD -> intArrayOf(seed, colorScheme.accent1.s100)
+ Style.TONAL_SPOT -> intArrayOf(colorScheme.accentColor, colorScheme.accentColor)
+ else -> intArrayOf(colorScheme.accent1.s100, colorScheme.accent1.s100)
}
return intArrayOf(
colors[0],
@@ -359,26 +382,12 @@
// Color option index value starts from 1.
var index = 1
val maxPresetColors = if (themeStyleEnabled) bundleNames.size else MAX_PRESET_COLORS
- for (bundleName in bundleNames.take(maxPresetColors)) {
- if (shouldUseRevampedUi) {
- val builder = ColorOptionImpl.Builder()
- builder.title = getItemStringFromStub(COLOR_BUNDLE_NAME_PREFIX, bundleName)
- builder.index = index
- builder.source = ColorOptionsProvider.COLOR_SOURCE_PRESET
- builder.type = ColorType.PRESET_COLOR
- val colorFromStub =
- getItemColorFromStub(COLOR_BUNDLE_MAIN_COLOR_PREFIX, bundleName)
- var darkColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ true)
- var lightColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ false)
- val lightColor = lightColorScheme.accentColor
- val darkColor = darkColorScheme.accentColor
- var lightColors = intArrayOf(lightColor, lightColor, lightColor, lightColor)
- var darkColors = intArrayOf(darkColor, darkColor, darkColor, darkColor)
- builder.addOverlayPackage(OVERLAY_CATEGORY_COLOR, toColorString(colorFromStub))
- builder.addOverlayPackage(
- OVERLAY_CATEGORY_SYSTEM_PALETTE,
- toColorString(colorFromStub)
- )
+
+ if (shouldUseRevampedUi) {
+ // keep track of whether monochrome is included in preset colors to determine
+ // inclusion in wallpaper colors
+ var hasMonochrome = false
+ for (bundleName in bundleNames.take(maxPresetColors)) {
if (themeStyleEnabled) {
val styleName =
try {
@@ -393,36 +402,26 @@
} catch (e: IllegalArgumentException) {
Style.TONAL_SPOT
}
- builder.style = style
- lightColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ false, style)
- darkColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ true, style)
-
- when (style) {
- Style.MONOCHROMATIC -> {
- if (
- !InjectorProvider.getInjector()
- .getFlags()
- .isMonochromaticThemeEnabled(mContext)
- ) {
- continue
- }
- darkColors = darkColorScheme.getRevampedUIDarkColorPreview()
- lightColors = lightColorScheme.getRevampedUILightColorPreview()
+ if (style == Style.MONOCHROMATIC) {
+ if (!monochromeEnabled) {
+ continue
}
- else -> {
- darkColors =
- darkColorScheme.getRevampedUIPresetColorPreview(colorFromStub)
- lightColors =
- lightColorScheme.getRevampedUIPresetColorPreview(colorFromStub)
- }
+ hasMonochrome = true
+ monochromeBundleName = bundleName
}
+ bundles.add(buildRevampedUIPreset(bundleName, index, style))
+ } else {
+ bundles.add(buildRevampedUIPreset(bundleName, index, null))
}
- builder.lightColors = lightColors
- builder.darkColors = darkColors
- bundles.add(builder.build())
- } else {
+ index++
+ }
+ if (!hasMonochrome) {
+ monochromeBundleName = null
+ }
+ } else {
+ for (bundleName in bundleNames.take(maxPresetColors)) {
val builder = ColorBundle.Builder()
builder.title = getItemStringFromStub(COLOR_BUNDLE_NAME_PREFIX, bundleName)
builder.setIndex(index)
@@ -446,12 +445,7 @@
Style.TONAL_SPOT
}
- if (
- style == Style.MONOCHROMATIC &&
- !InjectorProvider.getInjector()
- .getFlags()
- .isMonochromaticThemeEnabled(mContext)
- ) {
+ if (style == Style.MONOCHROMATIC && !monochromeEnabled) {
continue
}
@@ -470,10 +464,52 @@
}
bundles.add(builder.build(mContext))
+ index++
}
- index++
}
colorBundles = bundles
}
+
+ private fun buildRevampedUIPreset(
+ bundleName: String,
+ index: Int,
+ style: Style? = null,
+ type: ColorType = ColorType.PRESET_COLOR,
+ ): ColorOptionImpl {
+ val builder = ColorOptionImpl.Builder()
+ builder.title = getItemStringFromStub(COLOR_BUNDLE_NAME_PREFIX, bundleName)
+ builder.index = index
+ builder.source = ColorOptionsProvider.COLOR_SOURCE_PRESET
+ builder.type = type
+ val colorFromStub = getItemColorFromStub(COLOR_BUNDLE_MAIN_COLOR_PREFIX, bundleName)
+ var darkColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ true)
+ var lightColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ false)
+ val lightColor = lightColorScheme.accentColor
+ val darkColor = darkColorScheme.accentColor
+ var lightColors = intArrayOf(lightColor, lightColor, lightColor, lightColor)
+ var darkColors = intArrayOf(darkColor, darkColor, darkColor, darkColor)
+ builder.addOverlayPackage(OVERLAY_CATEGORY_COLOR, toColorString(colorFromStub))
+ builder.addOverlayPackage(OVERLAY_CATEGORY_SYSTEM_PALETTE, toColorString(colorFromStub))
+ if (style != null) {
+ builder.style = style
+
+ lightColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ false, style)
+ darkColorScheme = ColorScheme(colorFromStub, /* darkTheme= */ true, style)
+
+ when (style) {
+ Style.MONOCHROMATIC -> {
+ darkColors = getRevampedUIDarkColorPreview(darkColorScheme)
+ lightColors = getRevampedUILightColorPreview(lightColorScheme)
+ }
+ else -> {
+ darkColors = getRevampedUIPresetColorPreview(darkColorScheme, colorFromStub)
+ lightColors = getRevampedUIPresetColorPreview(lightColorScheme, colorFromStub)
+ }
+ }
+ }
+ builder.lightColors = lightColors
+ builder.darkColors = darkColors
+ return builder.build()
+ }
}