blob: 99e5a76b3a110ea6b9c006102b0668d7befcd05c [file] [log] [blame]
Jason Monkf13b4b32014-11-07 16:39:34 -05001package com.android.systemui.statusbar.policy;
2
Bill Lin767c0db2019-08-15 20:42:06 +08003import static org.junit.Assert.assertFalse;
4import static org.junit.Assert.assertTrue;
Jason Monk0288de02017-02-23 14:48:05 -05005import static org.mockito.Matchers.anyInt;
Pengquan Menga62d32b2018-12-06 17:38:38 -08006import static org.mockito.Mockito.doReturn;
Jason Monk9c7844c2017-01-18 15:21:53 -05007import static org.mockito.Mockito.mock;
Jason Monk0288de02017-02-23 14:48:05 -05008import static org.mockito.Mockito.when;
Jason Monk9c7844c2017-01-18 15:21:53 -05009
Jason Monkfd57ea72016-04-29 13:37:58 -040010import android.net.NetworkCapabilities;
Jason Monk07b75fe2015-05-14 16:47:03 -040011import android.os.Looper;
Jack Yue27d3fd2019-03-15 14:49:53 -070012import android.telephony.NetworkRegistrationInfo;
Pengquan Menga62d32b2018-12-06 17:38:38 -080013import android.telephony.ServiceState;
Jason Monkf13b4b32014-11-07 16:39:34 -050014import android.telephony.TelephonyManager;
Jason Monke427cb82015-07-28 09:18:08 -040015import android.test.suitebuilder.annotation.SmallTest;
Jason Monk2515f472017-09-19 09:52:43 -040016import android.testing.AndroidTestingRunner;
17import android.testing.TestableLooper;
18import android.testing.TestableLooper.RunWithLooper;
Jason Monk0288de02017-02-23 14:48:05 -050019
Jason Monkf668d7c2016-01-14 10:38:41 -050020import com.android.settingslib.net.DataUsageController;
Jason Monk0288de02017-02-23 14:48:05 -050021
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040022import org.junit.Test;
23import org.junit.runner.RunWith;
Pengquan Menga62d32b2018-12-06 17:38:38 -080024import org.mockito.Mockito;
Jason Monk33f8ae72015-05-08 10:45:15 -040025
Jason Monke427cb82015-07-28 09:18:08 -040026@SmallTest
Jason Monk2515f472017-09-19 09:52:43 -040027@RunWith(AndroidTestingRunner.class)
28@RunWithLooper
Jason Monkf13b4b32014-11-07 16:39:34 -050029public class NetworkControllerDataTest extends NetworkControllerBaseTest {
30
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040031 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050032 public void test3gDataIcon() {
33 setupDefaultSignal();
34
Amin Shaikhd64e6262018-03-08 10:08:13 -050035 verifyDataIndicators(TelephonyIcons.ICON_3G);
Jason Monkf13b4b32014-11-07 16:39:34 -050036 }
37
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040038 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050039 public void test2gDataIcon() {
40 setupDefaultSignal();
41 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
42 TelephonyManager.NETWORK_TYPE_GSM);
43
Amin Shaikhd64e6262018-03-08 10:08:13 -050044 verifyDataIndicators(TelephonyIcons.ICON_G);
Jason Monkf13b4b32014-11-07 16:39:34 -050045 }
46
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040047 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050048 public void testCdmaDataIcon() {
49 setupDefaultSignal();
50 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
51 TelephonyManager.NETWORK_TYPE_CDMA);
52
Amin Shaikhd64e6262018-03-08 10:08:13 -050053 verifyDataIndicators(TelephonyIcons.ICON_1X);
Jason Monkf13b4b32014-11-07 16:39:34 -050054 }
55
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040056 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050057 public void testEdgeDataIcon() {
58 setupDefaultSignal();
59 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
60 TelephonyManager.NETWORK_TYPE_EDGE);
61
Amin Shaikhd64e6262018-03-08 10:08:13 -050062 verifyDataIndicators(TelephonyIcons.ICON_E);
Jason Monkf13b4b32014-11-07 16:39:34 -050063 }
64
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040065 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050066 public void testLteDataIcon() {
67 setupDefaultSignal();
68 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
69 TelephonyManager.NETWORK_TYPE_LTE);
70
Amin Shaikhd64e6262018-03-08 10:08:13 -050071 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monkf13b4b32014-11-07 16:39:34 -050072 }
73
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040074 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050075 public void testHspaDataIcon() {
76 setupDefaultSignal();
77 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
78 TelephonyManager.NETWORK_TYPE_HSPA);
79
Amin Shaikhd64e6262018-03-08 10:08:13 -050080 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monkf13b4b32014-11-07 16:39:34 -050081 }
82
Amin Shaikhf5830ca2018-03-09 14:06:50 -050083
84 @Test
85 public void testHspaPlusDataIcon() {
86 setupDefaultSignal();
87 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
88 TelephonyManager.NETWORK_TYPE_HSPAP);
89
90 verifyDataIndicators(TelephonyIcons.ICON_H_PLUS);
91 }
92
93
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040094 @Test
Jason Monk7150d7f2015-07-09 10:14:12 -040095 public void testWfcNoDataIcon() {
96 setupDefaultSignal();
97 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
98 TelephonyManager.NETWORK_TYPE_IWLAN);
99
Amin Shaikhd64e6262018-03-08 10:08:13 -0500100 verifyDataIndicators(0);
Jason Monk7150d7f2015-07-09 10:14:12 -0400101 }
102
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400103 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500104 public void test4gDataIcon() {
105 // Switch to showing 4g icon and re-initialize the NetworkController.
106 mConfig.show4gForLte = true;
Sundeep Ghuman9d10a3c2017-06-16 00:05:16 +0000107 mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
Jason Monk07b75fe2015-05-14 16:47:03 -0400108 mConfig, Looper.getMainLooper(), mCallbackHandler,
Jason Monk9c7844c2017-01-18 15:21:53 -0500109 mock(AccessPointControllerImpl.class),
110 mock(DataUsageController.class), mMockSubDefaults,
111 mock(DeviceProvisionedController.class));
Jason Monk3aaabd72014-12-12 11:11:44 -0500112 setupNetworkController();
113
114 setupDefaultSignal();
115 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
116 TelephonyManager.NETWORK_TYPE_LTE);
117
Amin Shaikhd64e6262018-03-08 10:08:13 -0500118 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500119 }
120
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400121 @Test
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400122 public void testNoInternetIcon_withDefaultSub() {
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500123 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700124 when(mMockTm.isDataCapable()).thenReturn(false);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500125 setupDefaultSignal();
126 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700127 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500128
129 // Verify that a SignalDrawable with a cut out is used to display data disabled.
130 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
131 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400132 false, true, NO_DATA_STRING);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500133 }
134
135 @Test
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400136 public void testDataDisabledIcon_withDefaultSub() {
Jason Monkfd57ea72016-04-29 13:37:58 -0400137 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700138 when(mMockTm.isDataCapable()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400139 setupDefaultSignal();
140 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700141 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400142
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500143 // Verify that a SignalDrawable with a cut out is used to display data disabled.
144 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
145 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400146 false, true, NO_DATA_STRING);
147 }
148
149 @Test
Evan Laird2ea99c12019-09-19 16:52:58 -0400150 public void testNonDefaultSIM_showsFullSignal_connected() {
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400151 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700152 when(mMockTm.isDataCapable()).thenReturn(false);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400153 setupDefaultSignal();
154 setDefaultSubId(mSubId + 1);
155 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 0);
156 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
157
158 // Verify that a SignalDrawable with a cut out is used to display data disabled.
159 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
160 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Evan Laird2ea99c12019-09-19 16:52:58 -0400161 false, false, NOT_DEFAULT_DATA_STRING);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400162 }
163
164 @Test
Evan Laird2ea99c12019-09-19 16:52:58 -0400165 public void testNonDefaultSIM_showsFullSignal_disconnected() {
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400166 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700167 when(mMockTm.isDataCapable()).thenReturn(false);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400168 setupDefaultSignal();
169 setDefaultSubId(mSubId + 1);
170 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
171 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
172
173 // Verify that a SignalDrawable with a cut out is used to display data disabled.
174 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
175 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Evan Laird2ea99c12019-09-19 16:52:58 -0400176 false, false, NOT_DEFAULT_DATA_STRING);
Jason Monkfd57ea72016-04-29 13:37:58 -0400177 }
178
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400179 @Test
SongFerngWang52dada72019-08-14 16:59:29 +0800180 public void testNr5GIcon_NrNotRestrictedRrcCon_show5GIcon() {
181 setupNr5GIconConfigurationForNotRestrictedRrcCon();
182 setupDefaultSignal();
183 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
184 TelephonyManager.NETWORK_TYPE_LTE);
185 updateDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT);
186 ServiceState ss = Mockito.mock(ServiceState.class);
187 doReturn(NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED).when(ss).getNrState();
188 mPhoneStateListener.onServiceStateChanged(ss);
189
190 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G,
191 true, DEFAULT_QS_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G, true, true);
192 }
193
194 @Test
195 public void testNr5GIcon_NrNotRestrictedRrcIdle_show5GIcon() {
196 setupNr5GIconConfigurationForNotRestrictedRrcIdle();
197 setupDefaultSignal();
198 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
199 TelephonyManager.NETWORK_TYPE_LTE);
200 updateDataActivity(TelephonyManager.DATA_ACTIVITY_DORMANT);
201 ServiceState ss = Mockito.mock(ServiceState.class);
202 doReturn(NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED).when(ss).getNrState();
203 mPhoneStateListener.onServiceStateChanged(ss);
204
205 verifyDataIndicators(TelephonyIcons.ICON_5G);
206 }
207
208 @Test
Pengquan Menga62d32b2018-12-06 17:38:38 -0800209 public void testNr5GIcon_NrConnectedWithoutMMWave_show5GIcon() {
210 setupDefaultNr5GIconConfiguration();
211 setupDefaultSignal();
212 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
213 TelephonyManager.NETWORK_TYPE_LTE);
214 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700215 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800216 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
217 mPhoneStateListener.onServiceStateChanged(ss);
218
219 verifyDataIndicators(TelephonyIcons.ICON_5G);
220 }
221
222 @Test
223 public void testNr5GIcon_NrConnectedWithMMWave_show5GPlusIcon() {
224 setupDefaultNr5GIconConfiguration();
225 setupDefaultSignal();
226 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
227 TelephonyManager.NETWORK_TYPE_LTE);
228 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700229 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800230 doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss).getNrFrequencyRange();
231 mPhoneStateListener.onServiceStateChanged(ss);
232
233 verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
234 }
235
236 @Test
237 public void testNr5GIcon_NrRestricted_showLteIcon() {
238 setupDefaultNr5GIconConfiguration();
239 setupDefaultSignal();
240 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
241 TelephonyManager.NETWORK_TYPE_LTE);
242 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700243 doReturn(NetworkRegistrationInfo.NR_STATE_RESTRICTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800244 mPhoneStateListener.onServiceStateChanged(mServiceState);
245
246 verifyDataIndicators(TelephonyIcons.ICON_LTE);
247 }
248
249 @Test
Bill Lin767c0db2019-08-15 20:42:06 +0800250 public void testNr5GIcon_displayGracePeriodTime_enabled() {
251 setupDefaultNr5GIconConfiguration();
252 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
253 setupDefaultSignal();
254 mNetworkController.handleConfigurationChanged();
255 mPhoneStateListener.onServiceStateChanged(mServiceState);
256
257 ServiceState ss = Mockito.mock(ServiceState.class);
258 // While nrIconDisplayGracePeriodMs > 0 & is Nr5G, mIsShowingIconGracefully should be true
259 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
260 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
261 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
262 TelephonyManager.NETWORK_TYPE_LTE);
263 mPhoneStateListener.onServiceStateChanged(ss);
264
265 assertTrue(mConfig.nrIconDisplayGracePeriodMs > 0);
266 assertTrue(mMobileSignalController.mIsShowingIconGracefully);
267 }
268
269 @Test
270 public void testNr5GIcon_displayGracePeriodTime_disabled() {
271 setupDefaultNr5GIconConfiguration();
272 setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
273 setupDefaultSignal();
274
275 assertTrue(mConfig.nrIconDisplayGracePeriodMs == 0);
276
277 // While nrIconDisplayGracePeriodMs <= 0, mIsShowingIconGracefully should be false
278 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
279 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
280 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
281 TelephonyManager.NETWORK_TYPE_LTE);
282
283 assertFalse(mMobileSignalController.mIsShowingIconGracefully);
284 }
285
286 @Test
287 public void testNr5GIcon_enableDisplayGracePeriodTime_showIconGracefully() {
288 setupDefaultNr5GIconConfiguration();
289 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
290 setupDefaultSignal();
291 mNetworkController.handleConfigurationChanged();
292 mPhoneStateListener.onServiceStateChanged(mServiceState);
293
294 ServiceState ss = Mockito.mock(ServiceState.class);
295 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
296 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
297 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
298 TelephonyManager.NETWORK_TYPE_LTE);
299 mPhoneStateListener.onServiceStateChanged(ss);
300
301 verifyDataIndicators(TelephonyIcons.ICON_5G);
302
303 // Enabled timer Nr5G switch to None Nr5G, showing 5G icon gracefully
304 ServiceState ssLte = Mockito.mock(ServiceState.class);
305 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(ssLte).getNrState();
306 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(ssLte).getNrFrequencyRange();
307 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
308 TelephonyManager.NETWORK_TYPE_LTE);
309 mPhoneStateListener.onServiceStateChanged(ssLte);
310
311 verifyDataIndicators(TelephonyIcons.ICON_5G);
312 }
313
314 @Test
315 public void testNr5GIcon_disableDisplayGracePeriodTime_showLatestIconImmediately() {
316 setupDefaultNr5GIconConfiguration();
317 setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
318 setupDefaultSignal();
319 mNetworkController.handleConfigurationChanged();
320
321 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
322 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
323 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
324 TelephonyManager.NETWORK_TYPE_LTE);
325
326 verifyDataIndicators(TelephonyIcons.ICON_5G);
327
328 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(mServiceState).getNrState();
329 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(mServiceState).getNrFrequencyRange();
330 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
331 TelephonyManager.NETWORK_TYPE_LTE);
332
333 verifyDataIndicators(TelephonyIcons.ICON_LTE);
334 }
335
336 @Test
337 public void testNr5GIcon_resetDisplayGracePeriodTime_whenDataDisconnected() {
338 setupDefaultNr5GIconConfiguration();
339 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
340 setupDefaultSignal();
341 mNetworkController.handleConfigurationChanged();
342 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
343 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
344 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
345 TelephonyManager.NETWORK_TYPE_LTE);
346
347 verifyDataIndicators(TelephonyIcons.ICON_5G);
348
349 // Disabled timer, when out of service, reset timer to display latest state
350 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
351 TelephonyManager.NETWORK_TYPE_LTE);
352 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(mServiceState).getNrState();
353 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(mServiceState).getNrFrequencyRange();
354 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_DISCONNECTED,
355 TelephonyManager.NETWORK_TYPE_UMTS);
356
357 verifyDataIndicators(0);
358 }
359
360 @Test
361 public void testNr5GIcon_enableDisplayGracePeriodTime_show5G_switching_5GPlus() {
362 setupDefaultNr5GIconConfiguration();
363 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
364 setupDefaultSignal();
365 mNetworkController.handleConfigurationChanged();
366 mPhoneStateListener.onServiceStateChanged(mServiceState);
367
368 ServiceState ss5G = Mockito.mock(ServiceState.class);
369 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss5G).getNrState();
370 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss5G).getNrFrequencyRange();
371 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
372 TelephonyManager.NETWORK_TYPE_LTE);
373 mPhoneStateListener.onServiceStateChanged(ss5G);
374
375 verifyDataIndicators(TelephonyIcons.ICON_5G);
376
377 // When timeout enabled, 5G/5G+ switching should be updated immediately
378 ServiceState ss5GPlus = Mockito.mock(ServiceState.class);
379 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss5GPlus).getNrState();
380 doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss5GPlus).getNrFrequencyRange();
381 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
382 TelephonyManager.NETWORK_TYPE_LTE);
383 mPhoneStateListener.onServiceStateChanged(ss5GPlus);
384
385 verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
386 }
387
388 @Test
389 public void testNr5GIcon_carrierDisabledDisplayGracePeriodTime_shouldUpdateIconImmediately() {
390 setupDefaultNr5GIconConfiguration();
391 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
392 setupDefaultSignal();
393 mNetworkController.handleConfigurationChanged();
394 mPhoneStateListener.onServiceStateChanged(mServiceState);
395
396 ServiceState ss5G = Mockito.mock(ServiceState.class);
397 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss5G).getNrState();
398 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss5G).getNrFrequencyRange();
399 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
400 TelephonyManager.NETWORK_TYPE_LTE);
401 mPhoneStateListener.onServiceStateChanged(ss5G);
402
403 verifyDataIndicators(TelephonyIcons.ICON_5G);
404
405 // State from NR_5G to NONE NR_5G with timeout, should show previous 5G icon
406 ServiceState ssLte = Mockito.mock(ServiceState.class);
407 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(ssLte).getNrState();
408 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(ssLte).getNrFrequencyRange();
409 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
410 TelephonyManager.NETWORK_TYPE_LTE);
411 mPhoneStateListener.onServiceStateChanged(ssLte);
412
413 verifyDataIndicators(TelephonyIcons.ICON_5G);
414
415 // Update nrIconDisplayGracePeriodMs to 0
416 setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
417 mNetworkController.handleConfigurationChanged();
418
419 // State from NR_5G to NONE NR_STATE_RESTRICTED, showing corresponding icon
420 doReturn(NetworkRegistrationInfo.NR_STATE_RESTRICTED).when(mServiceState).getNrState();
421 doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mServiceState).getDataNetworkType();
422 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
423 TelephonyManager.NETWORK_TYPE_LTE);
424
425 assertTrue(mConfig.nrIconDisplayGracePeriodMs == 0);
426 verifyDataIndicators(TelephonyIcons.ICON_LTE);
427 }
428
429 @Test
Jason Monkfd57ea72016-04-29 13:37:58 -0400430 public void testDataDisabledIcon_UserNotSetup() {
431 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700432 when(mMockTm.isDataCapable()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400433 setupDefaultSignal();
434 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700435 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monk0288de02017-02-23 14:48:05 -0500436 when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false);
437 mUserCallback.onUserSetupChanged();
Jason Monk2515f472017-09-19 09:52:43 -0400438 TestableLooper.get(this).processAllMessages();
Jason Monkfd57ea72016-04-29 13:37:58 -0400439
440 // Don't show the X until the device is setup.
Amin Shaikhd64e6262018-03-08 10:08:13 -0500441 verifyDataIndicators(0);
Jason Monkfd57ea72016-04-29 13:37:58 -0400442 }
443
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400444 @Test
Wenting Xiong63364fe2017-02-07 19:12:27 +0800445 public void testAlwaysShowDataRatIcon() {
446 setupDefaultSignal();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700447 when(mMockTm.isDataCapable()).thenReturn(false);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800448 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED,
449 TelephonyManager.NETWORK_TYPE_GSM);
450
451 // Switch to showing data RAT icon when data is disconnected
452 // and re-initialize the NetworkController.
453 mConfig.alwaysShowDataRatIcon = true;
454 mNetworkController.handleConfigurationChanged();
455
Amin Shaikhd64e6262018-03-08 10:08:13 -0500456 verifyDataIndicators(TelephonyIcons.ICON_G);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800457 }
458
459 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500460 public void test4gDataIconConfigChange() {
461 setupDefaultSignal();
462 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
463 TelephonyManager.NETWORK_TYPE_LTE);
464
465 // Switch to showing 4g icon and re-initialize the NetworkController.
466 mConfig.show4gForLte = true;
467 // Can't send the broadcast as that would actually read the config from
468 // the context. Instead we'll just poke at a function that does all of
469 // the after work.
470 mNetworkController.handleConfigurationChanged();
471
Amin Shaikhd64e6262018-03-08 10:08:13 -0500472 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500473 }
474
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400475 @Test
Jason Monk67b2c162016-01-12 10:24:09 -0500476 public void testDataChangeWithoutConnectionState() {
477 setupDefaultSignal();
478 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
479 TelephonyManager.NETWORK_TYPE_LTE);
480
Amin Shaikhd64e6262018-03-08 10:08:13 -0500481 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monk67b2c162016-01-12 10:24:09 -0500482
Jason Monk0288de02017-02-23 14:48:05 -0500483 when(mServiceState.getDataNetworkType())
Jason Monk67b2c162016-01-12 10:24:09 -0500484 .thenReturn(TelephonyManager.NETWORK_TYPE_HSPA);
485 updateServiceState();
Amin Shaikhd64e6262018-03-08 10:08:13 -0500486 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monk67b2c162016-01-12 10:24:09 -0500487 }
488
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400489 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -0500490 public void testDataActivity() {
491 setupDefaultSignal();
492
493 testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false);
494 testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false);
495 testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true);
496 testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true);
497 }
498
Fabian Kozynskia9091992019-03-25 11:08:32 -0400499 @Test
500 public void testUpdateDataNetworkName() {
501 setupDefaultSignal();
502 String newDataName = "TestDataName";
SongFerngWangafd025f2019-11-20 02:11:09 +0800503 when(mServiceState.getOperatorAlphaShort()).thenReturn(newDataName);
Fabian Kozynskia9091992019-03-25 11:08:32 -0400504 updateServiceState();
505 assertDataNetworkNameEquals(newDataName);
506 }
507
Jason Monkf13b4b32014-11-07 16:39:34 -0500508 private void testDataActivity(int direction, boolean in, boolean out) {
509 updateDataActivity(direction);
510
Jason Monk26ad85a2016-12-08 14:45:42 -0500511 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON, true,
Jason Monk7e6c83c2017-04-26 14:35:24 -0400512 DEFAULT_QS_SIGNAL_STRENGTH, DEFAULT_QS_ICON, in, out);
Jason Monkf13b4b32014-11-07 16:39:34 -0500513 }
514
Amin Shaikhd64e6262018-03-08 10:08:13 -0500515 private void verifyDataIndicators(int dataIcon) {
Jason Monk26ad85a2016-12-08 14:45:42 -0500516 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon,
Amin Shaikhd64e6262018-03-08 10:08:13 -0500517 true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false,
Jason Monkb5746272014-11-12 16:50:31 -0500518 false);
Jason Monkf13b4b32014-11-07 16:39:34 -0500519 }
Jason Monkf13b4b32014-11-07 16:39:34 -0500520}