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

Commit feefc3db authored by Edgar Wang's avatar Edgar Wang Committed by Android (Google) Code Review
Browse files

Merge "[Expressive design] support material color extraction" into main

parents 2bdcb10b d09fcee8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
+108 −47
Original line number Diff line number Diff line
@@ -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));
        }
    }
}