• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.managedprovisioning.common;
18 
19 import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO;
20 import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES;
21 
22 import static com.android.managedprovisioning.provisioning.Constants.FLAG_ENABLE_LIGHT_DARK_MODE;
23 
24 import static com.google.common.truth.Truth.assertThat;
25 
26 import android.content.Context;
27 import android.content.Intent;
28 
29 import androidx.test.InstrumentationRegistry;
30 import androidx.test.filters.SmallTest;
31 
32 import com.android.managedprovisioning.R;
33 
34 import com.google.android.setupcompat.util.WizardManagerHelper;
35 
36 import org.junit.After;
37 import org.junit.Before;
38 import org.junit.Test;
39 
40 import java.util.Objects;
41 
42 @SmallTest
43 public class ThemeHelperTest {
44     private static final String THEME_TEST_VALUE = "glif_v3_light";
45     private static final Intent INTENT_WITH_THEME =
46             new Intent().putExtra(WizardManagerHelper.EXTRA_THEME, THEME_TEST_VALUE);
47     private static final Intent INTENT_NO_THEME = new Intent();
48 
49     private final Context mContext = InstrumentationRegistry.getTargetContext();
50     private boolean mInitialFeatureFlagValue;
51     private ThemeHelper.SetupWizardBridge mSetupWizardBridge;
52 
53     @Before
setUp()54     public void setUp() {
55         mInitialFeatureFlagValue = FLAG_ENABLE_LIGHT_DARK_MODE;
56     }
57 
58     @After
tearDown()59     public void tearDown() {
60         FLAG_ENABLE_LIGHT_DARK_MODE = mInitialFeatureFlagValue;
61     }
62 
63     @Test
inferThemeResId_themeProvidedAsExtra_suwDayNightEnabled_themesMatch()64     public void inferThemeResId_themeProvidedAsExtra_suwDayNightEnabled_themesMatch() {
65         FLAG_ENABLE_LIGHT_DARK_MODE = true;
66         ThemeHelper themeHelper = createThemeHelperWithDayNightEnabled(true);
67         Intent intent = new Intent()
68                 .putExtra(WizardManagerHelper.EXTRA_THEME, THEME_TEST_VALUE);
69         int expectedResId = mSetupWizardBridge.resolveTheme(
70                 R.style.SudThemeGlifV4_DayNight,
71                 THEME_TEST_VALUE,
72                 /* suppressDayNight= */ false);
73 
74         assertThat(themeHelper.inferThemeResId(mContext, intent)).isEqualTo(expectedResId);
75     }
76 
77     @Test
inferThemeResId_themeProvidedAsExtra_suwDayNightDisabled_themesMatch()78     public void inferThemeResId_themeProvidedAsExtra_suwDayNightDisabled_themesMatch() {
79         FLAG_ENABLE_LIGHT_DARK_MODE = true;
80         ThemeHelper themeHelper = createThemeHelperWithDayModeValues();
81         Intent intent = new Intent()
82                 .putExtra(WizardManagerHelper.EXTRA_THEME, THEME_TEST_VALUE);
83         int expectedResId = mSetupWizardBridge.resolveTheme(
84                 R.style.SudThemeGlifV4_Light,
85                 THEME_TEST_VALUE,
86                 /* suppressDayNight= */ true);
87 
88         assertThat(themeHelper.inferThemeResId(mContext, intent)).isEqualTo(expectedResId);
89     }
90 
91     @Test
92     public void
inferThemeResId_themeProvidedAsExtra_suwDayNightEnabled_flagDisabled_themesMatch()93             inferThemeResId_themeProvidedAsExtra_suwDayNightEnabled_flagDisabled_themesMatch() {
94         FLAG_ENABLE_LIGHT_DARK_MODE = false;
95         ThemeHelper themeHelper = createThemeHelperWithDayNightEnabled(true);
96         Intent intent = new Intent()
97                 .putExtra(WizardManagerHelper.EXTRA_THEME, THEME_TEST_VALUE);
98         int expectedResId = mSetupWizardBridge.resolveTheme(
99                 R.style.SudThemeGlifV4_DayNight,
100                 THEME_TEST_VALUE,
101                 /* suppressDayNight= */ true);
102 
103         assertThat(themeHelper.inferThemeResId(mContext, intent)).isEqualTo(expectedResId);
104     }
105 
106     @Test
107     public void
inferThemeResId_themeProvidedAsExtra_suwDayNightDisabled_flagDisabled_themesMatch()108             inferThemeResId_themeProvidedAsExtra_suwDayNightDisabled_flagDisabled_themesMatch() {
109         FLAG_ENABLE_LIGHT_DARK_MODE = false;
110         ThemeHelper themeHelper = createThemeHelperWithDayModeValues();
111         Intent intent = new Intent()
112                 .putExtra(WizardManagerHelper.EXTRA_THEME, THEME_TEST_VALUE);
113         int expectedResId = mSetupWizardBridge.resolveTheme(
114                 R.style.SudThemeGlifV4_Light,
115                 THEME_TEST_VALUE,
116                 /* suppressDayNight= */ true);
117 
118         assertThat(themeHelper.inferThemeResId(mContext, intent)).isEqualTo(expectedResId);
119     }
120 
121     @Test
inferThemeResId_systemPropertyThemeUsed_suwDayNightEnabled_themesMatch()122     public void inferThemeResId_systemPropertyThemeUsed_suwDayNightEnabled_themesMatch() {
123         FLAG_ENABLE_LIGHT_DARK_MODE = true;
124         ThemeHelper themeHelper =
125                 createThemeHelperWithDayNightEnabledAndSystemPropertyTheme(
126                         true, THEME_TEST_VALUE);
127         int expectedResId = mSetupWizardBridge.resolveTheme(
128                 R.style.SudThemeGlifV4_DayNight,
129                 THEME_TEST_VALUE,
130                 /* suppressDayNight= */ false);
131 
132         assertThat(themeHelper.inferThemeResId(mContext, new Intent())).isEqualTo(expectedResId);
133     }
134 
135     @Test
inferThemeResId_glifLightThemeUsed_suwDayNightEnabled_themesMatch()136     public void inferThemeResId_glifLightThemeUsed_suwDayNightEnabled_themesMatch() {
137         FLAG_ENABLE_LIGHT_DARK_MODE = true;
138         ThemeHelper themeHelper =
139                 createThemeHelperWithDayNightEnabled(true);
140         int expectedResId = mSetupWizardBridge.resolveTheme(
141                 R.style.SudThemeGlifV4_DayNight,
142                 com.google.android.setupdesign.util.ThemeHelper.THEME_GLIF_V4,
143                 /* suppressDayNight= */ false);
144 
145         assertThat(themeHelper.inferThemeResId(mContext, new Intent())).isEqualTo(expectedResId);
146     }
147 
148     @Test
inferThemeResId_suppressDayNight_systemNightMode_noSetupWizard_isDarkMode()149     public void inferThemeResId_suppressDayNight_systemNightMode_noSetupWizard_isDarkMode() {
150         FLAG_ENABLE_LIGHT_DARK_MODE = true;
151         ThemeHelper themeHelper =
152                 createThemeHelperWithDayNightAndSystemNightModeEnabled(
153                         /* setupWizardDayNightEnabled= */ false,
154                         /* isSystemNightMode= */ true);
155         int expectedResId = mSetupWizardBridge.resolveTheme(
156                 R.style.SudThemeGlifV4_Light,
157                 com.google.android.setupdesign.util.ThemeHelper.THEME_GLIF_V4,
158                 /* suppressDayNight= */ true);
159 
160         assertThat(themeHelper.inferThemeResId(mContext, new Intent())).isEqualTo(expectedResId);
161     }
162 
163     @Test
inferThemeResId_suppressDayNight_systemNightMode_noSetupWizard_isLightMode()164     public void inferThemeResId_suppressDayNight_systemNightMode_noSetupWizard_isLightMode() {
165         FLAG_ENABLE_LIGHT_DARK_MODE = true;
166         ThemeHelper themeHelper =
167                 createThemeHelperWithDayNightAndSystemNightModeEnabled(
168                         /* setupWizardDayNightEnabled= */ false,
169                         /* isSystemNightMode= */ false);
170         int expectedResId = mSetupWizardBridge.resolveTheme(
171                 R.style.SudThemeGlifV4_Light,
172                 com.google.android.setupdesign.util.ThemeHelper.THEME_GLIF_V4_LIGHT,
173                 /* suppressDayNight= */ true);
174 
175         assertThat(themeHelper.inferThemeResId(mContext, new Intent())).isEqualTo(expectedResId);
176     }
177 
178     @Test
getDefaultNightMode_returnsYes()179     public void getDefaultNightMode_returnsYes() {
180         FLAG_ENABLE_LIGHT_DARK_MODE = true;
181         ThemeHelper themeHelper = createThemeHelperForNightMode();
182         assertThat(themeHelper.getDefaultNightMode(mContext, INTENT_WITH_THEME))
183                 .isEqualTo(MODE_NIGHT_YES);
184     }
185 
186     @Test
getDefaultNightMode_featureFlagDisabled_returnsNo()187     public void getDefaultNightMode_featureFlagDisabled_returnsNo() {
188         FLAG_ENABLE_LIGHT_DARK_MODE = false;
189         ThemeHelper themeHelper = createThemeHelperForNightMode();
190 
191         assertThat(themeHelper.getDefaultNightMode(mContext, INTENT_WITH_THEME))
192                 .isEqualTo(MODE_NIGHT_NO);
193     }
194 
195     @Test
getDefaultNightMode_setupWizardDayNightDisabled_returnsNo()196     public void getDefaultNightMode_setupWizardDayNightDisabled_returnsNo() {
197         FLAG_ENABLE_LIGHT_DARK_MODE = true;
198         ThemeHelper themeHelper = createThemeHelperWithDayNightEnabled(false);
199 
200         assertThat(themeHelper.getDefaultNightMode(mContext, INTENT_WITH_THEME))
201                 .isEqualTo(MODE_NIGHT_NO);
202     }
203 
204     @Test
getDefaultNightMode_systemNightModeFalse_returnsNo()205     public void getDefaultNightMode_systemNightModeFalse_returnsNo() {
206         FLAG_ENABLE_LIGHT_DARK_MODE = true;
207         ThemeHelper themeHelper = createThemeHelperWithSystemNightModeEnabled(false);
208 
209         assertThat(themeHelper.getDefaultNightMode(mContext, INTENT_WITH_THEME))
210                 .isEqualTo(MODE_NIGHT_NO);
211     }
212 
213     @Test
getDefaultNightMode_systemNightModeFalse_noThemeExtra_returnsNo()214     public void getDefaultNightMode_systemNightModeFalse_noThemeExtra_returnsNo() {
215         FLAG_ENABLE_LIGHT_DARK_MODE = true;
216         ThemeHelper themeHelper = createThemeHelperWithSystemNightModeEnabled(false);
217 
218         assertThat(themeHelper.getDefaultNightMode(mContext, INTENT_NO_THEME))
219                 .isEqualTo(MODE_NIGHT_NO);
220     }
221 
222     @Test
getDefaultNightMode_systemNightModeTrue_noThemeExtra_returnsYes()223     public void getDefaultNightMode_systemNightModeTrue_noThemeExtra_returnsYes() {
224         FLAG_ENABLE_LIGHT_DARK_MODE = true;
225         ThemeHelper themeHelper = createThemeHelperWithSystemNightModeEnabled(true);
226 
227         assertThat(themeHelper.getDefaultNightMode(mContext, INTENT_NO_THEME))
228                 .isEqualTo(MODE_NIGHT_YES);
229     }
230 
createThemeHelperForNightMode()231     private ThemeHelper createThemeHelperForNightMode() {
232         return createThemeHelper(
233                 /* setupWizardDayNightEnabled= */ true,
234                 /* systemPropertySetupWizardTheme= */ null,
235                 /* isSystemNightMode= */ true);
236     }
237 
createThemeHelperWithDayNightEnabled(boolean setupWizardDayNightEnabled)238     private ThemeHelper createThemeHelperWithDayNightEnabled(boolean setupWizardDayNightEnabled) {
239         return createThemeHelper(
240                 setupWizardDayNightEnabled,
241                 /* systemPropertySetupWizardTheme= */ null,
242                 /* isSystemNightMode= */ true);
243     }
244 
createThemeHelperWithDayNightAndSystemNightModeEnabled( boolean setupWizardDayNightEnabled, boolean isSystemNightMode)245     private ThemeHelper createThemeHelperWithDayNightAndSystemNightModeEnabled(
246             boolean setupWizardDayNightEnabled,
247             boolean isSystemNightMode) {
248         return createThemeHelper(
249                 setupWizardDayNightEnabled,
250                 /* systemPropertySetupWizardTheme= */ null,
251                 /* isSystemNightMode= */ isSystemNightMode);
252     }
253 
createThemeHelperWithSystemNightModeEnabled(boolean isSystemNightMode)254     private ThemeHelper createThemeHelperWithSystemNightModeEnabled(boolean isSystemNightMode) {
255         return createThemeHelper(
256                 /* setupWizardDayNightEnabled= */ false,
257                 /* systemPropertySetupWizardTheme= */ null,
258                 isSystemNightMode);
259     }
260 
createThemeHelperWithDayModeValues()261     private ThemeHelper createThemeHelperWithDayModeValues() {
262         return createThemeHelper(
263                 /* setupWizardDayNightEnabled= */ false,
264                 /* systemPropertySetupWizardTheme= */ null,
265                 /* isSystemNightMode= */ false);
266     }
267 
createThemeHelperWithDayNightEnabledAndSystemPropertyTheme( boolean setupWizardDayNightEnabled, String systemPropertySetupWizardTheme)268     private ThemeHelper createThemeHelperWithDayNightEnabledAndSystemPropertyTheme(
269             boolean setupWizardDayNightEnabled, String systemPropertySetupWizardTheme) {
270         return createThemeHelper(
271                 setupWizardDayNightEnabled,
272                 systemPropertySetupWizardTheme,
273                 /* isSystemNightMode= */ false);
274     }
275 
createThemeHelper( boolean setupWizardDayNightEnabled, String systemPropertySetupWizardTheme, boolean isSystemNightMode)276     private ThemeHelper createThemeHelper(
277             boolean setupWizardDayNightEnabled,
278             String systemPropertySetupWizardTheme,
279             boolean isSystemNightMode) {
280         mSetupWizardBridge = new ThemeHelper.SetupWizardBridge() {
281             @Override
282             public boolean isSetupWizardDayNightEnabled(Context context) {
283                 return setupWizardDayNightEnabled;
284             }
285 
286             @Override
287             public String getSystemPropertySetupWizardTheme() {
288                 return systemPropertySetupWizardTheme;
289             }
290 
291             @Override
292             public int resolveTheme(int defaultTheme, String themeName, boolean suppressDayNight) {
293                 return Objects.hash(defaultTheme, themeName, suppressDayNight);
294             }
295         };
296         return new ThemeHelper(context -> isSystemNightMode, mSetupWizardBridge);
297     }
298 }
299