• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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.settings.regionalpreferences;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertTrue;
23 import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.Mockito.spy;
25 import static org.mockito.Mockito.verify;
26 
27 import android.app.settings.SettingsEnums;
28 import android.content.Context;
29 import android.os.Bundle;
30 import android.os.LocaleList;
31 import android.os.Looper;
32 import android.util.AndroidRuntimeException;
33 
34 import androidx.preference.PreferenceManager;
35 import androidx.preference.PreferenceScreen;
36 import androidx.test.annotation.UiThreadTest;
37 import androidx.test.core.app.ApplicationProvider;
38 
39 import com.android.internal.app.LocalePicker;
40 import com.android.settings.testutils.FakeFeatureFactory;
41 import com.android.settingslib.widget.SelectorWithWidgetPreference;
42 
43 import org.junit.After;
44 import org.junit.Before;
45 import org.junit.Ignore;
46 import org.junit.Test;
47 
48 import java.util.Locale;
49 
50 public class NumberingSystemItemControllerTest {
51     private Context mApplicationContext;
52     private NumberingSystemItemController mController;
53     private NumberingPreferencesFragment mFragment;
54     private PreferenceScreen mPreferenceScreen;
55     private LocaleList mCacheLocale;
56     private FakeFeatureFactory mFeatureFactory;
57 
58     @Before
59     @UiThreadTest
setUp()60     public void setUp() throws Exception {
61         if (Looper.myLooper() == null) {
62             Looper.prepare();
63         }
64         mApplicationContext = ApplicationProvider.getApplicationContext();
65         mFeatureFactory = FakeFeatureFactory.setupForTest();
66         mFragment = spy(new NumberingPreferencesFragment());
67         PreferenceManager preferenceManager = new PreferenceManager(mApplicationContext);
68         mPreferenceScreen = preferenceManager.createPreferenceScreen(mApplicationContext);
69         mCacheLocale = LocaleList.getDefault();
70     }
71 
72     @After
tearDown()73     public void tearDown() {
74         LocaleList.setDefault(mCacheLocale);
75         LocalePicker.updateLocales(mCacheLocale);
76     }
77 
78     @Test
79     @UiThreadTest
handlePreferenceTreeClick_languageSelect_launchFragment()80     public void handlePreferenceTreeClick_languageSelect_launchFragment() {
81         Bundle bundle = new Bundle();
82         bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
83                 NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
84         bundle.putString(
85                 NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
86         SelectorWithWidgetPreference preference =
87                 new SelectorWithWidgetPreference(mApplicationContext);
88         preference.setKey("I_am_the_key");
89         mPreferenceScreen.addPreference(preference);
90         mController = new NumberingSystemItemController(mApplicationContext, bundle);
91         mController.setParentFragment(mFragment);
92         mController.displayPreference(mPreferenceScreen);
93 
94         boolean isCallingStartActivity = false;
95         try {
96             mController.handlePreferenceTreeClick(preference);
97         } catch (AndroidRuntimeException exception) {
98             isCallingStartActivity = true;
99         }
100 
101         assertTrue(isCallingStartActivity);
102         verify(mFeatureFactory.metricsFeatureProvider).action(
103                 mApplicationContext,
104                 SettingsEnums.ACTION_CHOOSE_LANGUAGE_FOR_NUMBERS_PREFERENCES);
105     }
106 
107     @Test
108     @UiThreadTest
109     @Ignore("b/377633438")
handlePreferenceTreeClick_numbersSelect_preferenceHasTick()110     public void handlePreferenceTreeClick_numbersSelect_preferenceHasTick() {
111         Bundle bundle = new Bundle();
112         bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
113                 NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
114         bundle.putString(
115                 NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
116         SelectorWithWidgetPreference preference =
117                 new SelectorWithWidgetPreference(mApplicationContext);
118         preference.setKey("test_key");
119         mPreferenceScreen.addPreference(preference);
120         mController = new NumberingSystemItemController(mApplicationContext, bundle);
121         mController.setParentFragment(mFragment);
122         mController.displayPreference(mPreferenceScreen);
123 
124         mController.handlePreferenceTreeClick(preference);
125 
126         verify(mFragment).setArguments(any());
127         verify(mFeatureFactory.metricsFeatureProvider).action(
128                 mApplicationContext, SettingsEnums.ACTION_SET_NUMBERS_PREFERENCES);
129     }
130 
131     @Test
132     @UiThreadTest
handlePreferenceTreeClick_numbersSelect_numberingSystemIsUpdated()133     public void handlePreferenceTreeClick_numbersSelect_numberingSystemIsUpdated() {
134         LocalePicker.updateLocales(LocaleList.forLanguageTags("en-US,zh-TW,ar-BH"));
135         Bundle bundle = new Bundle();
136         bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
137                 NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
138         bundle.putString(
139                 NumberingSystemItemController.KEY_SELECTED_LANGUAGE, "ar-BH");
140         SelectorWithWidgetPreference defaultPreference =
141                 new SelectorWithWidgetPreference(mApplicationContext);
142         SelectorWithWidgetPreference numberPreference =
143                 new SelectorWithWidgetPreference(mApplicationContext);
144         defaultPreference.setKey("default");
145         numberPreference.setKey("latn");
146         mPreferenceScreen.addPreference(defaultPreference);
147         mPreferenceScreen.addPreference(numberPreference);
148         mController = new NumberingSystemItemController(mApplicationContext, bundle);
149         mController.setParentFragment(mFragment);
150         mController.displayPreference(mPreferenceScreen);
151 
152         mController.handlePreferenceTreeClick(numberPreference);
153 
154         assertThat(LocalePicker.getLocales().toLanguageTags()).contains(
155                 "en-US,zh-TW,ar-BH-u-nu-latn");
156     }
157 
158     @Test
159     @UiThreadTest
displayPreference_languageOptAndHas2LocaleWithSingleNu_showNothing()160     public void displayPreference_languageOptAndHas2LocaleWithSingleNu_showNothing() {
161         LocaleList.setDefault(LocaleList.forLanguageTags("en-US,zh-TW"));
162         Bundle bundle = new Bundle();
163         bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
164                 NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
165         bundle.putString(
166                 NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
167         mController = new NumberingSystemItemController(mApplicationContext, bundle);
168         mController.setParentFragment(mFragment);
169 
170         mController.displayPreference(mPreferenceScreen);
171 
172         assertEquals(0, mPreferenceScreen.getPreferenceCount());
173     }
174 
175     @Test
176     @UiThreadTest
displayPreference_languageOptAndHas2LocaleWithMultiNu_showLocaleWithMultiNuOnly()177     public void displayPreference_languageOptAndHas2LocaleWithMultiNu_showLocaleWithMultiNuOnly() {
178         // ar-JO and dz-BT have multiple numbering systems.
179         LocaleList.setDefault(LocaleList.forLanguageTags("en-US,zh-TW,ar-JO,dz-BT"));
180         Bundle bundle = new Bundle();
181         bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
182                 NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
183         bundle.putString(
184                 NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
185         mController = new NumberingSystemItemController(mApplicationContext, bundle);
186         mController.setParentFragment(mFragment);
187 
188         mController.displayPreference(mPreferenceScreen);
189 
190         assertEquals(2, mPreferenceScreen.getPreferenceCount());
191     }
192 
193     @Test
194     @UiThreadTest
displayPreference_enUsNumbersOpt_show1Option()195     public void displayPreference_enUsNumbersOpt_show1Option() {
196         LocaleList.setDefault(LocaleList.forLanguageTags("en-US,zh-TW"));
197         Bundle bundle = new Bundle();
198         bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
199                 NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
200         bundle.putString(
201                 NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
202         mController = new NumberingSystemItemController(mApplicationContext, bundle);
203         mController.setParentFragment(mFragment);
204 
205         mController.displayPreference(mPreferenceScreen);
206 
207         // en-US only has 1 numbering system.
208         assertEquals(1, mPreferenceScreen.getPreferenceCount());
209     }
210 }
211