diff options
| author | 2024-12-18 22:13:18 -0800 | |
|---|---|---|
| committer | 2024-12-18 22:13:18 -0800 | |
| commit | feefc3db5590bd444abe7bcf7b7a4e64fa9decac (patch) | |
| tree | f191571d212d3a92057e3bde908b6c73db8c8fa1 | |
| parent | 2bdcb10b5e1a7f802b078eba55cdf5378d79beea (diff) | |
| parent | d09fcee855a0c322388a0bd194b6f9f4456e2d13 (diff) | |
Merge "[Expressive design] support material color extraction" into main
2 files changed, 109 insertions, 47 deletions
diff --git a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java index adc4f316aca9..bc4f1f942dc0 100644 --- a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java +++ b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/IllustrationPreference.java @@ -167,6 +167,7 @@ public class IllustrationPreference extends Preference implements GroupSectionDi if (mLottieDynamicColor) { LottieColorUtils.applyDynamicColors(getContext(), illustrationView); } + LottieColorUtils.applyMaterialColor(getContext(), illustrationView); if (mOnBindListener != null) { mOnBindListener.onBind(illustrationView); diff --git a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java index 98a72909b276..4421424c0e39 100644 --- a/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java +++ b/packages/SettingsLib/IllustrationPreference/src/com/android/settingslib/widget/LottieColorUtils.java @@ -21,14 +21,14 @@ import android.content.res.Configuration; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; -import com.android.settingslib.color.R; +import androidx.annotation.NonNull; + +import com.android.settingslib.widget.theme.R; import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieProperty; import com.airbnb.lottie.model.KeyPath; -import java.util.Collections; -import java.util.HashMap; import java.util.Map; /** @@ -37,52 +37,97 @@ import java.util.Map; */ public class LottieColorUtils { private static final Map<String, Integer> DARK_TO_LIGHT_THEME_COLOR_MAP; + private static final Map<String, Integer> MATERIAL_COLOR_MAP; static { - HashMap<String, Integer> map = new HashMap<>(); - map.put( - ".grey200", - R.color.settingslib_color_grey800); - map.put( - ".grey600", - R.color.settingslib_color_grey400); - map.put( - ".grey800", - R.color.settingslib_color_grey300); - map.put( - ".grey900", - R.color.settingslib_color_grey50); - map.put( - ".red100", - R.color.settingslib_color_red500); - map.put( - ".red200", - R.color.settingslib_color_red500); - map.put( - ".red400", - R.color.settingslib_color_red600); - map.put( - ".black", - android.R.color.white); - map.put( - ".blue200", - R.color.settingslib_color_blue700); - map.put( - ".blue400", - R.color.settingslib_color_blue600); - map.put( - ".green100", - R.color.settingslib_color_green500); - map.put( - ".green200", - R.color.settingslib_color_green500); - map.put( - ".green400", - R.color.settingslib_color_green600); - map.put( - ".cream", - R.color.settingslib_color_charcoal); - DARK_TO_LIGHT_THEME_COLOR_MAP = Collections.unmodifiableMap(map); + DARK_TO_LIGHT_THEME_COLOR_MAP = Map.ofEntries( + Map.entry(".grey200", + com.android.settingslib.color.R.color.settingslib_color_grey800), + Map.entry(".grey600", + com.android.settingslib.color.R.color.settingslib_color_grey400), + Map.entry(".grey800", + com.android.settingslib.color.R.color.settingslib_color_grey300), + Map.entry(".grey900", + com.android.settingslib.color.R.color.settingslib_color_grey50), + Map.entry(".red100", + com.android.settingslib.color.R.color.settingslib_color_red500), + Map.entry(".red200", + com.android.settingslib.color.R.color.settingslib_color_red500), + Map.entry(".red400", + com.android.settingslib.color.R.color.settingslib_color_red600), + Map.entry(".black", + android.R.color.white), + Map.entry(".blue200", + com.android.settingslib.color.R.color.settingslib_color_blue700), + Map.entry(".blue400", + com.android.settingslib.color.R.color.settingslib_color_blue600), + Map.entry(".green100", + com.android.settingslib.color.R.color.settingslib_color_green500), + Map.entry(".green200", + com.android.settingslib.color.R.color.settingslib_color_green500), + Map.entry(".green400", + com.android.settingslib.color.R.color.settingslib_color_green600), + Map.entry(".cream", + com.android.settingslib.color.R.color.settingslib_color_charcoal)); + + MATERIAL_COLOR_MAP = Map.ofEntries( + Map.entry(".primary", R.color.settingslib_materialColorPrimary), + Map.entry(".onPrimary", R.color.settingslib_materialColorOnPrimary), + Map.entry(".primaryContainer", R.color.settingslib_materialColorPrimaryContainer), + Map.entry(".onPrimaryContainer", + R.color.settingslib_materialColorOnPrimaryContainer), + Map.entry(".primaryInverse", R.color.settingslib_materialColorPrimaryInverse), + Map.entry(".primaryFixed", R.color.settingslib_materialColorPrimaryFixed), + Map.entry(".primaryFixedDim", R.color.settingslib_materialColorPrimaryFixedDim), + Map.entry(".onPrimaryFixed", R.color.settingslib_materialColorOnPrimaryFixed), + Map.entry(".onPrimaryFixedVariant", + R.color.settingslib_materialColorOnPrimaryFixedVariant), + Map.entry(".secondary", R.color.settingslib_materialColorSecondary), + Map.entry(".onSecondary", R.color.settingslib_materialColorOnSecondary), + Map.entry(".secondaryContainer", + R.color.settingslib_materialColorSecondaryContainer), + Map.entry(".onSecondaryContainer", + R.color.settingslib_materialColorOnSecondaryContainer), + Map.entry(".secondaryFixed", R.color.settingslib_materialColorSecondaryFixed), + Map.entry(".secondaryFixedDim", R.color.settingslib_materialColorSecondaryFixedDim), + Map.entry(".onSecondaryFixed", R.color.settingslib_materialColorOnSecondaryFixed), + Map.entry(".onSecondaryFixedVariant", + R.color.settingslib_materialColorOnSecondaryFixedVariant), + Map.entry(".tertiary", R.color.settingslib_materialColorTertiary), + Map.entry(".onTertiary", R.color.settingslib_materialColorOnTertiary), + Map.entry(".tertiaryContainer", R.color.settingslib_materialColorTertiaryContainer), + Map.entry(".onTertiaryContainer", + R.color.settingslib_materialColorOnTertiaryContainer), + Map.entry(".tertiaryFixed", R.color.settingslib_materialColorTertiaryFixed), + Map.entry(".tertiaryFixedDim", R.color.settingslib_materialColorTertiaryFixedDim), + Map.entry(".onTertiaryFixed", R.color.settingslib_materialColorOnTertiaryFixed), + Map.entry(".onTertiaryFixedVariant", + R.color.settingslib_materialColorOnTertiaryFixedVariant), + Map.entry(".error", R.color.settingslib_materialColorError), + Map.entry(".onError", R.color.settingslib_materialColorOnError), + Map.entry(".errorContainer", R.color.settingslib_materialColorErrorContainer), + Map.entry(".onErrorContainer", R.color.settingslib_materialColorOnErrorContainer), + Map.entry(".outline", R.color.settingslib_materialColorOutline), + Map.entry(".outlineVariant", R.color.settingslib_materialColorOutlineVariant), + Map.entry(".background", R.color.settingslib_materialColorBackground), + Map.entry(".onBackground", R.color.settingslib_materialColorOnBackground), + Map.entry(".surface", R.color.settingslib_materialColorSurface), + Map.entry(".onSurface", R.color.settingslib_materialColorOnSurface), + Map.entry(".surfaceVariant", R.color.settingslib_materialColorSurfaceVariant), + Map.entry(".onSurfaceVariant", R.color.settingslib_materialColorOnSurfaceVariant), + Map.entry(".surfaceInverse", R.color.settingslib_materialColorSurfaceInverse), + Map.entry(".onSurfaceInverse", R.color.settingslib_materialColorOnSurfaceInverse), + Map.entry(".surfaceBright", R.color.settingslib_materialColorSurfaceBright), + Map.entry(".surfaceDim", R.color.settingslib_materialColorSurfaceDim), + Map.entry(".surfaceContainer", R.color.settingslib_materialColorSurfaceContainer), + Map.entry(".surfaceContainerLow", + R.color.settingslib_materialColorSurfaceContainerLow), + Map.entry(".surfaceContainerLowest", + R.color.settingslib_materialColorSurfaceContainerLowest), + Map.entry(".surfaceContainerHigh", + R.color.settingslib_materialColorSurfaceContainerHigh), + Map.entry(".surfaceContainerHighest", + R.color.settingslib_materialColorSurfaceContainerHighest)); } private LottieColorUtils() { @@ -108,4 +153,20 @@ public class LottieColorUtils { frameInfo -> new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)); } } + + /** Applies material colors. */ + public static void applyMaterialColor(@NonNull Context context, + @NonNull LottieAnimationView lottieAnimationView) { + if (!SettingsThemeHelper.isExpressiveTheme(context)) { + return; + } + + for (String key : MATERIAL_COLOR_MAP.keySet()) { + final int color = context.getColor(MATERIAL_COLOR_MAP.get(key)); + lottieAnimationView.addValueCallback( + new KeyPath("**", key, "**"), + LottieProperty.COLOR_FILTER, + frameInfo -> new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP)); + } + } } |