2727import android .os .Build ;
2828import android .os .Build .VERSION_CODES ;
2929import android .os .Bundle ;
30+ import android .util .TypedValue ;
3031import androidx .appcompat .view .ContextThemeWrapper ;
3132import com .google .android .material .color .DynamicColors .Precondition ;
3233import com .google .android .material .resources .MaterialAttributes ;
4546/** Tests the logic of {@link com.google.android.material.color.DynamicColors} utility class. */
4647@ RunWith (ParameterizedRobolectricTestRunner .class )
4748public class DynamicColorsTest {
49+
4850 @ Parameter (0 )
4951 public String testName ;
5052
@@ -58,7 +60,7 @@ public class DynamicColorsTest {
5860 @ Parameters (name = "{0}" )
5961 public static ImmutableList <Object []> getTestData () {
6062 return ImmutableList .<Object []>builder ()
61- .add (new Object [] {"Test dynamic colors with Light Theme" , R .style .Theme_Material3_Light })
63+ .add (new Object [] {"Test dynamic colors with Light Theme" , R .style .Test_Theme_BaseTheme })
6264 .build ();
6365 }
6466
@@ -75,51 +77,58 @@ public void testApplyOnApplicationWithDefaultTheme() {
7577 DynamicColors .applyToActivitiesIfAvailable (mockApplication );
7678 mockApplication .capturedCallbacks .onActivityPreCreated (mockActivity , new Bundle ());
7779
78- // TODO(b/230848477): Update tests to make sure dynamic colors theme overlay is indeed applied.
79- assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
80+ assertThat (getThemeId ()).isEqualTo (R .id .dynamic_theme_id );
8081 }
8182
8283 @ Test
8384 public void testApplyOnApplicationWithCustomTheme () {
84- final int mockThemeOverlay = 0xABCDABCD ;
85- DynamicColors .applyToActivitiesIfAvailable (mockApplication , mockThemeOverlay );
85+ DynamicColors .applyToActivitiesIfAvailable (
86+ mockApplication ,
87+ new DynamicColorsOptions .Builder ()
88+ .setThemeOverlay (R .style .Test_ThemeOverlay_CustomTheme )
89+ .build ());
8690 mockApplication .capturedCallbacks .onActivityPreCreated (mockActivity , new Bundle ());
8791
88- // TODO(b/230848477): Update tests to make sure dynamic colors theme overlay is indeed applied.
89- assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
92+ assertThat (getThemeId ()).isEqualTo (R .id .custom_theme_id );
9093 }
9194
9295 @ Test
9396 public void testApplyOnApplicationWithPreconditionFalse () {
9497 final MockPrecondition mockPrecondition = new MockPrecondition ();
95- DynamicColors .applyToActivitiesIfAvailable (mockApplication , mockPrecondition );
98+ DynamicColors .applyToActivitiesIfAvailable (
99+ mockApplication ,
100+ new DynamicColorsOptions .Builder ().setPrecondition (mockPrecondition ).build ());
96101 mockApplication .capturedCallbacks .onActivityPreCreated (mockActivity , new Bundle ());
97102
98103 assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
104+ assertThat (getThemeId ()).isEqualTo (R .id .default_theme_id );
99105 }
100106
101107 @ Test
102108 public void testApplyOnApplicationWithPreconditionTrue () {
103109 final MockPrecondition mockPrecondition = new MockPrecondition ();
104110 mockPrecondition .shouldApplyDynamicColors = true ;
105- DynamicColors .applyToActivitiesIfAvailable (mockApplication , mockPrecondition );
111+ DynamicColors .applyToActivitiesIfAvailable (
112+ mockApplication ,
113+ new DynamicColorsOptions .Builder ().setPrecondition (mockPrecondition ).build ());
106114 mockApplication .capturedCallbacks .onActivityPreCreated (mockActivity , new Bundle ());
107115
108- // TODO(b/230848477): Update tests to make sure dynamic colors theme overlay is indeed applied.
109- assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
116+ assertThat (getThemeId ()).isEqualTo (R .id .dynamic_theme_id );
110117 }
111118
112119 @ Test
113120 public void testApplyOnApplicationWithCustomThemeAndPrecondition () {
114- final int mockThemeOverlay = 0xABCDABCD ;
115121 final MockPrecondition mockPrecondition = new MockPrecondition ();
116122 mockPrecondition .shouldApplyDynamicColors = true ;
117123 DynamicColors .applyToActivitiesIfAvailable (
118- mockApplication , mockThemeOverlay , mockPrecondition );
124+ mockApplication ,
125+ new DynamicColorsOptions .Builder ()
126+ .setPrecondition (mockPrecondition )
127+ .setThemeOverlay (R .style .Test_ThemeOverlay_CustomTheme )
128+ .build ());
119129 mockApplication .capturedCallbacks .onActivityPreCreated (mockActivity , new Bundle ());
120130
121- // TODO(b/230848477): Update tests to make sure dynamic colors theme overlay is indeed applied.
122- assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
131+ assertThat (getThemeId ()).isEqualTo (R .id .custom_theme_id );
123132 }
124133
125134 @ Test
@@ -129,10 +138,15 @@ public void testApplyOnApplicationWithNoDynamicColorAvailable() {
129138 final MockPrecondition mockPrecondition = new MockPrecondition ();
130139 mockPrecondition .shouldApplyDynamicColors = true ;
131140 DynamicColors .applyToActivitiesIfAvailable (
132- mockApplication , mockThemeOverlay , mockPrecondition );
141+ mockApplication ,
142+ new DynamicColorsOptions .Builder ()
143+ .setPrecondition (mockPrecondition )
144+ .setThemeOverlay (mockThemeOverlay )
145+ .build ());
133146 mockApplication .capturedCallbacks .onActivityPreCreated (mockActivity , new Bundle ());
134147
135148 assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
149+ assertThat (getThemeId ()).isEqualTo (R .id .default_theme_id );
136150 }
137151
138152 @ Test
@@ -142,54 +156,64 @@ public void testApplyOnApplicationWithLowSdkVersion() {
142156 final MockPrecondition mockPrecondition = new MockPrecondition ();
143157 mockPrecondition .shouldApplyDynamicColors = true ;
144158 DynamicColors .applyToActivitiesIfAvailable (
145- mockApplication , mockThemeOverlay , mockPrecondition );
159+ mockApplication ,
160+ new DynamicColorsOptions .Builder ()
161+ .setPrecondition (mockPrecondition )
162+ .setThemeOverlay (mockThemeOverlay )
163+ .build ());
146164 mockApplication .capturedCallbacks .onActivityPreCreated (mockActivity , new Bundle ());
147165
148166 assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
167+ assertThat (getThemeId ()).isEqualTo (R .id .default_theme_id );
149168 }
150169
151170 @ Test
152171 public void testApplyOnActivityWithDefaultTheme () {
153- DynamicColors .applyIfAvailable (mockActivity );
172+ DynamicColors .applyToActivityIfAvailable (mockActivity );
154173
155- // TODO(b/230848477): Update tests to make sure dynamic colors theme overlay is indeed applied.
156- assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
174+ assertThat (getThemeId ()).isEqualTo (R .id .dynamic_theme_id );
157175 }
158176
159177 @ Test
160178 public void testApplyOnActivityWithCustomTheme () {
161- final int mockThemeOverlay = 0xABCDABCD ;
162- DynamicColors .applyIfAvailable (mockActivity , mockThemeOverlay );
179+ DynamicColors .applyToActivityIfAvailable (
180+ mockActivity ,
181+ new DynamicColorsOptions .Builder ()
182+ .setThemeOverlay (R .style .Test_ThemeOverlay_CustomTheme )
183+ .build ());
163184
164- // TODO(b/230848477): Update tests to make sure dynamic colors theme overlay is indeed applied.
165- assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
185+ assertThat (getThemeId ()).isEqualTo (R .id .custom_theme_id );
166186 }
167187
168188 @ Test
169189 public void testApplyOnActivityWithPreconditionFalse () {
170190 final MockPrecondition mockPrecondition = new MockPrecondition ();
171- DynamicColors .applyIfAvailable (mockActivity , mockPrecondition );
191+ DynamicColors .applyToActivityIfAvailable (
192+ mockActivity , new DynamicColorsOptions .Builder ().setPrecondition (mockPrecondition ).build ());
172193
173194 assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
195+ assertThat (getThemeId ()).isEqualTo (R .id .default_theme_id );
174196 }
175197
176198 @ Test
177199 public void testApplyOnActivityWithPreconditionTrue () {
178200 final MockPrecondition mockPrecondition = new MockPrecondition ();
179201 mockPrecondition .shouldApplyDynamicColors = true ;
180- DynamicColors .applyIfAvailable (mockActivity , mockPrecondition );
202+ DynamicColors .applyToActivityIfAvailable (
203+ mockActivity , new DynamicColorsOptions .Builder ().setPrecondition (mockPrecondition ).build ());
181204
182- // TODO(b/230848477): Update tests to make sure dynamic colors theme overlay is indeed applied.
183- assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
205+ assertThat (getThemeId ()).isEqualTo (R .id .dynamic_theme_id );
184206 }
185207
186208 @ Test
187209 public void testApplyOnActivityWithNoDynamicColorAvailable () {
188210 setDynamicColorAvailability (false );
189211 final int mockThemeOverlay = 0xABCDABCD ;
190- DynamicColors .applyIfAvailable (mockActivity , mockThemeOverlay );
212+ DynamicColors .applyToActivityIfAvailable (
213+ mockActivity , new DynamicColorsOptions .Builder ().setThemeOverlay (mockThemeOverlay ).build ());
191214
192215 assertThat (getThemeResId (mockActivity )).isEqualTo (baseTheme );
216+ assertThat (getThemeId ()).isEqualTo (R .id .default_theme_id );
193217 }
194218
195219 @ Test
@@ -234,6 +258,7 @@ public void testWrapContextWithNoDynamicColorAvailable() {
234258 Context context = DynamicColors .wrapContextIfAvailable (mockActivity , mockThemeOverlay );
235259
236260 assertThat (getThemeResId (context )).isEqualTo (baseTheme );
261+ assertThat (getThemeId ()).isEqualTo (R .id .default_theme_id );
237262 }
238263
239264 private void setDynamicColorAvailability (boolean available ) {
@@ -242,8 +267,7 @@ private void setDynamicColorAvailability(boolean available) {
242267 }
243268
244269 private void setSdkVersion (int sdkVersion ) {
245- ReflectionHelpers .setStaticField (
246- Build .VERSION .class , "SDK_INT" , sdkVersion );
270+ ReflectionHelpers .setStaticField (Build .VERSION .class , "SDK_INT" , sdkVersion );
247271 }
248272
249273 @ SuppressWarnings ("RestrictTo" )
@@ -276,4 +300,10 @@ public boolean shouldApplyDynamicColors(Activity activity, int theme) {
276300 return shouldApplyDynamicColors ;
277301 }
278302 }
303+
304+ private int getThemeId () {
305+ TypedValue typedValue = new TypedValue ();
306+ mockActivity .getTheme ().resolveAttribute (R .attr .themeId , typedValue , true );
307+ return typedValue .resourceId ;
308+ }
279309}
0 commit comments