Skip to content

Commit ad63d3f

Browse files
Material Design Teamdrchen
authored andcommitted
[M3][Color] Introduce U color tokens
PiperOrigin-RevId: 574897222
1 parent 2590c42 commit ad63d3f

File tree

9 files changed

+167
-200
lines changed

9 files changed

+167
-200
lines changed

lib/java/com/google/android/material/color/DynamicColors.java

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,11 @@
2323
import android.app.Application.ActivityLifecycleCallbacks;
2424
import android.app.UiModeManager;
2525
import android.content.Context;
26-
import android.content.res.Resources.NotFoundException;
2726
import android.content.res.TypedArray;
2827
import android.os.Build;
2928
import android.os.Build.VERSION;
3029
import android.os.Build.VERSION_CODES;
3130
import android.os.Bundle;
32-
import android.util.Log;
3331
import android.view.ContextThemeWrapper;
3432
import androidx.annotation.ChecksSdkIntAtLeast;
3533
import androidx.annotation.NonNull;
@@ -43,16 +41,12 @@
4341
import java.util.HashMap;
4442
import java.util.Locale;
4543
import java.util.Map;
46-
import java.util.Objects;
4744

4845
/** Utility for applying dynamic colors to application/activities. */
4946
public class DynamicColors {
5047
private static final int[] DYNAMIC_COLOR_THEME_OVERLAY_ATTRIBUTE =
5148
new int[] {R.attr.dynamicColorThemeOverlay};
5249

53-
private static final int[] CONTRAST_COLOR_THEME_OVERLAY_ATTRIBUTE =
54-
new int[] {R.attr.contrastColorThemeOverlay};
55-
5650
private static final DeviceSupportCondition DEFAULT_DEVICE_SUPPORT_CONDITION =
5751
new DeviceSupportCondition() {
5852
@Override
@@ -126,11 +120,6 @@ public boolean isSupported() {
126120
private static final int USE_DEFAULT_THEME_OVERLAY = 0;
127121
private static final String TAG = DynamicColors.class.getSimpleName();
128122

129-
private static final String SYSTEM_OUTLINE_VARIANT_DARK_RESOURCE_ENTRY_NAME =
130-
"system_outline_variant_dark";
131-
132-
private static final int SYSTEM_OUTLINE_VARIANT_DARK_RESOURCE_ID = 0x010600c1;
133-
134123
private DynamicColors() {}
135124

136125
/**
@@ -326,13 +315,6 @@ public static void applyToActivityIfAvailable(
326315
}
327316
} else {
328317
ThemeUtils.applyThemeOverlay(activity, theme);
329-
// TODO(b/289112889): Remove workaround and roll forward cl/528599594 as soon as U public
330-
// release. Contrast ThemeOverlay is applied on top of Dynamic ThemeOverlay to keep client's
331-
// custom Dynamic theme attributes.
332-
if (isDynamicContrastAvailable(activity)) {
333-
ThemeUtils.applyThemeOverlay(
334-
activity, getDefaultThemeOverlay(activity, CONTRAST_COLOR_THEME_OVERLAY_ATTRIBUTE));
335-
}
336318
}
337319
// Applies client's callback after content-based dynamic colors or just dynamic colors has
338320
// been applied.
@@ -409,16 +391,7 @@ public static Context wrapContextIfAvailable(
409391
MaterialColorUtilitiesHelper.createColorResourcesIdsToColorValues(scheme));
410392
}
411393
}
412-
Context dynamicContext = new ContextThemeWrapper(originalContext, theme);
413-
// TODO(b/289112889): Remove workaround and roll forward cl/528599594 as soon as U public
414-
// release. Contrast ThemeOverlay is applied on top of Dynamic ThemeOverlay to keep client's
415-
// custom Dynamic theme attributes.
416-
if (isDynamicContrastAvailable(originalContext)) {
417-
return new ContextThemeWrapper(
418-
dynamicContext,
419-
getDefaultThemeOverlay(dynamicContext, CONTRAST_COLOR_THEME_OVERLAY_ATTRIBUTE));
420-
}
421-
return dynamicContext;
394+
return new ContextThemeWrapper(originalContext, theme);
422395
}
423396

424397
/** Returns {@code true} if dynamic colors are available on the current SDK level. */
@@ -511,26 +484,4 @@ private static float getSystemContrast(Context context) {
511484
? 0
512485
: uiModeManager.getContrast();
513486
}
514-
515-
private static boolean isDynamicContrastAvailable(Context context) {
516-
if (VERSION.SDK_INT >= VERSION_CODES.UPSIDE_DOWN_CAKE && areSystemColorRolesDefined(context)) {
517-
return true;
518-
}
519-
return false;
520-
}
521-
522-
// TODO(b/289112889): Remove workaround and roll forward cl/528599594 as soon as U public release.
523-
//
524-
// This is to check and make sure the last material resource defined in the android block of
525-
// resources matches the resource name from app's context.
526-
private static boolean areSystemColorRolesDefined(Context context) {
527-
try {
528-
return Objects.equals(
529-
context.getResources().getResourceEntryName(SYSTEM_OUTLINE_VARIANT_DARK_RESOURCE_ID),
530-
SYSTEM_OUTLINE_VARIANT_DARK_RESOURCE_ENTRY_NAME);
531-
} catch (NotFoundException e) {
532-
Log.i(TAG, SYSTEM_OUTLINE_VARIANT_DARK_RESOURCE_ENTRY_NAME + " resource not found.", e);
533-
}
534-
return false;
535-
}
536487
}

lib/java/com/google/android/material/color/res/values-v31/colors.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,14 @@
9090
<color name="material_dynamic_neutral_variant95">@color/m3_ref_palette_dynamic_neutral_variant95</color>
9191
<color name="material_dynamic_neutral_variant99">@color/m3_ref_palette_dynamic_neutral_variant99</color>
9292
<color name="material_dynamic_neutral_variant100">@color/m3_ref_palette_dynamic_neutral_variant100</color>
93+
94+
<!-- Dynamic color resources - Error -->
95+
<color name="material_dynamic_color_light_error">@color/m3_sys_color_light_error</color>
96+
<color name="material_dynamic_color_light_on_error">@color/m3_sys_color_light_on_error</color>
97+
<color name="material_dynamic_color_light_error_container">@color/m3_sys_color_light_error_container</color>
98+
<color name="material_dynamic_color_light_on_error_container">@color/m3_sys_color_light_on_error_container</color>
99+
<color name="material_dynamic_color_dark_error">@color/m3_sys_color_dark_error</color>
100+
<color name="material_dynamic_color_dark_on_error">@color/m3_sys_color_dark_on_error</color>
101+
<color name="material_dynamic_color_dark_error_container">@color/m3_sys_color_dark_error_container</color>
102+
<color name="material_dynamic_color_dark_on_error_container">@color/m3_sys_color_dark_on_error_container</color>
93103
</resources>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
~ Copyright (C) 2023 The Android Open Source Project
4+
~
5+
~ Licensed under the Apache License, Version 2.0 (the "License");
6+
~ you may not use this file except in compliance with the License.
7+
~ You may obtain a copy of the License at
8+
~
9+
~ http://www.apache.org/licenses/LICENSE-2.0
10+
~
11+
~ Unless required by applicable law or agreed to in writing, software
12+
~ distributed under the License is distributed on an "AS IS" BASIS,
13+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
~ See the License for the specific language governing permissions and
15+
~ limitations under the License.
16+
-->
17+
18+
<resources>
19+
<!-- Dynamic color resources - Error, overrides in v34 to system resources -->
20+
<color name="material_dynamic_color_light_error">@color/m3_sys_color_dynamic_light_error</color>
21+
<color name="material_dynamic_color_light_on_error">@color/m3_sys_color_dynamic_light_on_error</color>
22+
<color name="material_dynamic_color_light_error_container">@color/m3_sys_color_dynamic_light_error_container</color>
23+
<color name="material_dynamic_color_light_on_error_container">@color/m3_sys_color_dynamic_light_on_error_container</color>
24+
<color name="material_dynamic_color_dark_error">@color/m3_sys_color_dynamic_dark_error</color>
25+
<color name="material_dynamic_color_dark_on_error">@color/m3_sys_color_dynamic_dark_on_error</color>
26+
<color name="material_dynamic_color_dark_error_container">@color/m3_sys_color_dynamic_dark_error_container</color>
27+
<color name="material_dynamic_color_dark_on_error_container">@color/m3_sys_color_dynamic_dark_on_error_container</color>
28+
</resources>
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
~ Copyright (C) 2023 The Android Open Source Project
4+
~
5+
~ Licensed under the Apache License, Version 2.0 (the "License");
6+
~ you may not use this file except in compliance with the License.
7+
~ You may obtain a copy of the License at
8+
~
9+
~ http://www.apache.org/licenses/LICENSE-2.0
10+
~
11+
~ Unless required by applicable law or agreed to in writing, software
12+
~ distributed under the License is distributed on an "AS IS" BASIS,
13+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
~ See the License for the specific language governing permissions and
15+
~ limitations under the License.
16+
-->
17+
<!-- AUTOGENERATED FILE. DO NOT MODIFY. -->
18+
<!-- Version: v0.175 -->
19+
20+
<resources>
21+
22+
<!-- Generated from token set (md.sys.color) in context (theme=dark, platform=android, audience=3p, scheme=dynamic). -->
23+
<!-- Primary colors -->
24+
<color name="m3_sys_color_dynamic_dark_primary">@android:color/system_primary_dark</color>
25+
<color name="m3_sys_color_dynamic_dark_primary_container">@android:color/system_primary_container_dark</color>
26+
<color name="m3_sys_color_dynamic_dark_on_primary">@android:color/system_on_primary_dark</color>
27+
<color name="m3_sys_color_dynamic_dark_on_primary_container">@android:color/system_on_primary_container_dark</color>
28+
<color name="m3_sys_color_dynamic_dark_inverse_primary">@android:color/system_primary_light</color>
29+
<!-- Secondary colors -->
30+
<color name="m3_sys_color_dynamic_dark_secondary">@android:color/system_secondary_dark</color>
31+
<color name="m3_sys_color_dynamic_dark_secondary_container">@android:color/system_secondary_container_dark</color>
32+
<color name="m3_sys_color_dynamic_dark_on_secondary">@android:color/system_on_secondary_dark</color>
33+
<color name="m3_sys_color_dynamic_dark_on_secondary_container">@android:color/system_on_secondary_container_dark</color>
34+
<!-- Tertiary colors -->
35+
<color name="m3_sys_color_dynamic_dark_tertiary">@android:color/system_tertiary_dark</color>
36+
<color name="m3_sys_color_dynamic_dark_tertiary_container">@android:color/system_tertiary_container_dark</color>
37+
<color name="m3_sys_color_dynamic_dark_on_tertiary">@android:color/system_on_tertiary_dark</color>
38+
<color name="m3_sys_color_dynamic_dark_on_tertiary_container">@android:color/system_on_tertiary_container_dark</color>
39+
<!-- Surface colors -->
40+
<color name="m3_sys_color_dynamic_dark_surface_dim">@android:color/system_surface_dim_dark</color>
41+
<color name="m3_sys_color_dynamic_dark_surface_bright">@android:color/system_surface_bright_dark</color>
42+
<color name="m3_sys_color_dynamic_dark_surface_container">@android:color/system_surface_container_dark</color>
43+
<color name="m3_sys_color_dynamic_dark_surface_container_low">@android:color/system_surface_container_low_dark</color>
44+
<color name="m3_sys_color_dynamic_dark_surface_container_high">@android:color/system_surface_container_high_dark</color>
45+
<color name="m3_sys_color_dynamic_dark_surface_container_lowest">@android:color/system_surface_container_lowest_dark</color>
46+
<color name="m3_sys_color_dynamic_dark_surface_container_highest">@android:color/system_surface_container_highest_dark</color>
47+
<color name="m3_sys_color_dynamic_dark_surface">@android:color/system_surface_dark</color>
48+
<color name="m3_sys_color_dynamic_dark_surface_variant">@android:color/system_surface_variant_dark</color>
49+
<color name="m3_sys_color_dynamic_dark_on_surface">@android:color/system_on_surface_dark</color>
50+
<color name="m3_sys_color_dynamic_dark_on_surface_variant">@android:color/system_on_surface_variant_dark</color>
51+
<color name="m3_sys_color_dynamic_dark_inverse_surface">@android:color/system_surface_light</color>
52+
<color name="m3_sys_color_dynamic_dark_inverse_on_surface">@android:color/system_on_surface_light</color>
53+
<!-- Background colors -->
54+
<color name="m3_sys_color_dynamic_dark_background">@android:color/system_background_dark</color>
55+
<color name="m3_sys_color_dynamic_dark_on_background">@android:color/system_on_background_dark</color>
56+
<!-- Hairline colors -->
57+
<color name="m3_sys_color_dynamic_dark_outline">@android:color/system_outline_dark</color>
58+
<color name="m3_sys_color_dynamic_dark_outline_variant">@android:color/system_outline_variant_dark</color>
59+
<!-- Error colors -->
60+
<color name="m3_sys_color_dynamic_dark_error">@android:color/system_error_dark</color>
61+
<color name="m3_sys_color_dynamic_dark_error_container">@android:color/system_error_container_dark</color>
62+
<color name="m3_sys_color_dynamic_dark_on_error">@android:color/system_on_error_dark</color>
63+
<color name="m3_sys_color_dynamic_dark_on_error_container">@android:color/system_on_error_container_dark</color>
64+
65+
<!-- Generated from token set (md.sys.color) in context (theme=light, platform=android, audience=3p, scheme=dynamic). -->
66+
<!-- Primary colors -->
67+
<color name="m3_sys_color_dynamic_primary_fixed">@android:color/system_primary_fixed</color>
68+
<color name="m3_sys_color_dynamic_on_primary_fixed">@android:color/system_on_primary_fixed</color>
69+
<color name="m3_sys_color_dynamic_primary_fixed_dim">@android:color/system_primary_fixed_dim</color>
70+
<color name="m3_sys_color_dynamic_on_primary_fixed_variant">@android:color/system_on_primary_fixed_variant</color>
71+
<color name="m3_sys_color_dynamic_light_primary">@android:color/system_primary_light</color>
72+
<color name="m3_sys_color_dynamic_light_primary_container">@android:color/system_primary_container_light</color>
73+
<color name="m3_sys_color_dynamic_light_on_primary">@android:color/system_on_primary_light</color>
74+
<color name="m3_sys_color_dynamic_light_on_primary_container">@android:color/system_on_primary_container_light</color>
75+
<color name="m3_sys_color_dynamic_light_inverse_primary">@android:color/system_primary_dark</color>
76+
<!-- Secondary colors -->
77+
<color name="m3_sys_color_dynamic_secondary_fixed">@android:color/system_secondary_fixed</color>
78+
<color name="m3_sys_color_dynamic_on_secondary_fixed">@android:color/system_on_secondary_fixed</color>
79+
<color name="m3_sys_color_dynamic_secondary_fixed_dim">@android:color/system_secondary_fixed_dim</color>
80+
<color name="m3_sys_color_dynamic_on_secondary_fixed_variant">@android:color/system_on_secondary_fixed_variant</color>
81+
<color name="m3_sys_color_dynamic_light_secondary">@android:color/system_secondary_light</color>
82+
<color name="m3_sys_color_dynamic_light_secondary_container">@android:color/system_secondary_container_light</color>
83+
<color name="m3_sys_color_dynamic_light_on_secondary">@android:color/system_on_secondary_light</color>
84+
<color name="m3_sys_color_dynamic_light_on_secondary_container">@android:color/system_on_secondary_container_light</color>
85+
<!-- Tertiary colors -->
86+
<color name="m3_sys_color_dynamic_tertiary_fixed">@android:color/system_tertiary_fixed</color>
87+
<color name="m3_sys_color_dynamic_on_tertiary_fixed">@android:color/system_on_tertiary_fixed</color>
88+
<color name="m3_sys_color_dynamic_tertiary_fixed_dim">@android:color/system_tertiary_fixed_dim</color>
89+
<color name="m3_sys_color_dynamic_on_tertiary_fixed_variant">@android:color/system_on_tertiary_fixed_variant</color>
90+
<color name="m3_sys_color_dynamic_light_tertiary">@android:color/system_tertiary_light</color>
91+
<color name="m3_sys_color_dynamic_light_tertiary_container">@android:color/system_tertiary_container_light</color>
92+
<color name="m3_sys_color_dynamic_light_on_tertiary">@android:color/system_on_tertiary_light</color>
93+
<color name="m3_sys_color_dynamic_light_on_tertiary_container">@android:color/system_on_tertiary_container_light</color>
94+
<!-- Surface colors -->
95+
<color name="m3_sys_color_dynamic_light_surface_dim">@android:color/system_surface_dim_light</color>
96+
<color name="m3_sys_color_dynamic_light_surface_bright">@android:color/system_surface_bright_light</color>
97+
<color name="m3_sys_color_dynamic_light_surface_container">@android:color/system_surface_container_light</color>
98+
<color name="m3_sys_color_dynamic_light_surface_container_low">@android:color/system_surface_container_low_light</color>
99+
<color name="m3_sys_color_dynamic_light_surface_container_high">@android:color/system_surface_container_high_light</color>
100+
<color name="m3_sys_color_dynamic_light_surface_container_lowest">@android:color/system_surface_container_lowest_light</color>
101+
<color name="m3_sys_color_dynamic_light_surface_container_highest">@android:color/system_surface_container_highest_light</color>
102+
<color name="m3_sys_color_dynamic_light_surface">@android:color/system_surface_light</color>
103+
<color name="m3_sys_color_dynamic_light_surface_variant">@android:color/system_surface_variant_light</color>
104+
<color name="m3_sys_color_dynamic_light_on_surface">@android:color/system_on_surface_light</color>
105+
<color name="m3_sys_color_dynamic_light_on_surface_variant">@android:color/system_on_surface_variant_light</color>
106+
<color name="m3_sys_color_dynamic_light_inverse_surface">@android:color/system_surface_dark</color>
107+
<color name="m3_sys_color_dynamic_light_inverse_on_surface">@android:color/system_on_surface_dark</color>
108+
<!-- Background colors -->
109+
<color name="m3_sys_color_dynamic_light_background">@android:color/system_background_light</color>
110+
<color name="m3_sys_color_dynamic_light_on_background">@android:color/system_on_background_light</color>
111+
<!-- Hairline colors -->
112+
<color name="m3_sys_color_dynamic_light_outline">@android:color/system_outline_light</color>
113+
<color name="m3_sys_color_dynamic_light_outline_variant">@android:color/system_outline_variant_light</color>
114+
<!-- Error colors -->
115+
<color name="m3_sys_color_dynamic_light_error">@android:color/system_error_light</color>
116+
<color name="m3_sys_color_dynamic_light_error_container">@android:color/system_error_container_light</color>
117+
<color name="m3_sys_color_dynamic_light_on_error">@android:color/system_on_error_light</color>
118+
<color name="m3_sys_color_dynamic_light_on_error_container">@android:color/system_on_error_container_light</color>
119+
120+
</resources>

lib/java/com/google/android/material/color/res/values/attrs.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,6 @@
168168
<!-- The default dynamic color theme overlay to use when applying dynamic colors. -->
169169
<attr name="dynamicColorThemeOverlay" format="reference"/>
170170

171-
<!-- The temporary contrast color theme overlay to use when applying contrast colors. -->
172-
<!-- TODO(b/289112889): Remove workaround and roll forward cl/528599594 as soon as U public release. -->
173-
<attr name="contrastColorThemeOverlay" format="reference"/>
174-
175171
<!-- Deprecated. -->
176172

177173
<!-- A tonal variation of the primary color. -->

lib/java/com/google/android/material/dialog/res/values/themes_base.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,6 @@
278278

279279
<!-- Theme overlays. -->
280280
<item name="dynamicColorThemeOverlay">@style/ThemeOverlay.Material3.DynamicColors.Light</item>
281-
<item name="contrastColorThemeOverlay">@style/ThemeOverlay.Material3.DynamicColors.Contrast.Light</item>
282281
</style>
283282

284283
<style name="Base.V14.Theme.Material3.Dark.Dialog" parent="Theme.MaterialComponents.Dialog">
@@ -540,7 +539,6 @@
540539

541540
<!-- Theme overlays. -->
542541
<item name="dynamicColorThemeOverlay">@style/ThemeOverlay.Material3.DynamicColors.Dark</item>
543-
<item name="contrastColorThemeOverlay">@style/ThemeOverlay.Material3.DynamicColors.Contrast.Dark</item>
544542
</style>
545543

546544
<style name="Base.Theme.Material3.Light.Dialog" parent="Base.V14.Theme.Material3.Light.Dialog"/>

0 commit comments

Comments
 (0)