blob: f6c750db56b775badcc80a4bb05cb9717da84593 [file] [log] [blame]
Jason Monkf13b4b32014-11-07 16:39:34 -05001package com.android.systemui.statusbar.policy;
2
Hall Liu5a95a702020-01-06 19:04:10 -08003import static android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_WWAN;
4import static android.telephony.NetworkRegistrationInfo.DOMAIN_PS;
5
Bill Lin767c0db2019-08-15 20:42:06 +08006import static org.junit.Assert.assertFalse;
7import static org.junit.Assert.assertTrue;
Jason Monk0288de02017-02-23 14:48:05 -05008import static org.mockito.Matchers.anyInt;
Pengquan Menga62d32b2018-12-06 17:38:38 -08009import static org.mockito.Mockito.doReturn;
Jason Monk9c7844c2017-01-18 15:21:53 -050010import static org.mockito.Mockito.mock;
Jason Monk0288de02017-02-23 14:48:05 -050011import static org.mockito.Mockito.when;
Jason Monk9c7844c2017-01-18 15:21:53 -050012
Jason Monkfd57ea72016-04-29 13:37:58 -040013import android.net.NetworkCapabilities;
Jason Monk07b75fe2015-05-14 16:47:03 -040014import android.os.Looper;
Jack Yue27d3fd2019-03-15 14:49:53 -070015import android.telephony.NetworkRegistrationInfo;
Pengquan Menga62d32b2018-12-06 17:38:38 -080016import android.telephony.ServiceState;
Jason Monkf13b4b32014-11-07 16:39:34 -050017import android.telephony.TelephonyManager;
Jason Monke427cb82015-07-28 09:18:08 -040018import android.test.suitebuilder.annotation.SmallTest;
Jason Monk2515f472017-09-19 09:52:43 -040019import android.testing.AndroidTestingRunner;
20import android.testing.TestableLooper;
21import android.testing.TestableLooper.RunWithLooper;
Jason Monk0288de02017-02-23 14:48:05 -050022
Jason Monkf668d7c2016-01-14 10:38:41 -050023import com.android.settingslib.net.DataUsageController;
Jason Monk0288de02017-02-23 14:48:05 -050024
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040025import org.junit.Test;
26import org.junit.runner.RunWith;
Pengquan Menga62d32b2018-12-06 17:38:38 -080027import org.mockito.Mockito;
Jason Monk33f8ae72015-05-08 10:45:15 -040028
Jason Monke427cb82015-07-28 09:18:08 -040029@SmallTest
Jason Monk2515f472017-09-19 09:52:43 -040030@RunWith(AndroidTestingRunner.class)
31@RunWithLooper
Jason Monkf13b4b32014-11-07 16:39:34 -050032public class NetworkControllerDataTest extends NetworkControllerBaseTest {
33
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040034 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050035 public void test3gDataIcon() {
36 setupDefaultSignal();
37
Amin Shaikhd64e6262018-03-08 10:08:13 -050038 verifyDataIndicators(TelephonyIcons.ICON_3G);
Jason Monkf13b4b32014-11-07 16:39:34 -050039 }
40
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040041 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050042 public void test2gDataIcon() {
43 setupDefaultSignal();
44 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
45 TelephonyManager.NETWORK_TYPE_GSM);
46
Amin Shaikhd64e6262018-03-08 10:08:13 -050047 verifyDataIndicators(TelephonyIcons.ICON_G);
Jason Monkf13b4b32014-11-07 16:39:34 -050048 }
49
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040050 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050051 public void testCdmaDataIcon() {
52 setupDefaultSignal();
53 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
54 TelephonyManager.NETWORK_TYPE_CDMA);
55
Amin Shaikhd64e6262018-03-08 10:08:13 -050056 verifyDataIndicators(TelephonyIcons.ICON_1X);
Jason Monkf13b4b32014-11-07 16:39:34 -050057 }
58
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040059 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050060 public void testEdgeDataIcon() {
61 setupDefaultSignal();
62 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
63 TelephonyManager.NETWORK_TYPE_EDGE);
64
Amin Shaikhd64e6262018-03-08 10:08:13 -050065 verifyDataIndicators(TelephonyIcons.ICON_E);
Jason Monkf13b4b32014-11-07 16:39:34 -050066 }
67
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040068 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050069 public void testLteDataIcon() {
70 setupDefaultSignal();
71 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
72 TelephonyManager.NETWORK_TYPE_LTE);
73
Amin Shaikhd64e6262018-03-08 10:08:13 -050074 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monkf13b4b32014-11-07 16:39:34 -050075 }
76
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040077 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050078 public void testHspaDataIcon() {
79 setupDefaultSignal();
80 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
81 TelephonyManager.NETWORK_TYPE_HSPA);
82
Amin Shaikhd64e6262018-03-08 10:08:13 -050083 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monkf13b4b32014-11-07 16:39:34 -050084 }
85
Amin Shaikhf5830ca2018-03-09 14:06:50 -050086
87 @Test
88 public void testHspaPlusDataIcon() {
89 setupDefaultSignal();
90 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
91 TelephonyManager.NETWORK_TYPE_HSPAP);
92
93 verifyDataIndicators(TelephonyIcons.ICON_H_PLUS);
94 }
95
96
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040097 @Test
Jason Monk7150d7f2015-07-09 10:14:12 -040098 public void testWfcNoDataIcon() {
99 setupDefaultSignal();
100 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
101 TelephonyManager.NETWORK_TYPE_IWLAN);
102
Amin Shaikhd64e6262018-03-08 10:08:13 -0500103 verifyDataIndicators(0);
Jason Monk7150d7f2015-07-09 10:14:12 -0400104 }
105
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400106 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500107 public void test4gDataIcon() {
108 // Switch to showing 4g icon and re-initialize the NetworkController.
109 mConfig.show4gForLte = true;
Sundeep Ghuman9d10a3c2017-06-16 00:05:16 +0000110 mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
Jason Monk07b75fe2015-05-14 16:47:03 -0400111 mConfig, Looper.getMainLooper(), mCallbackHandler,
Jason Monk9c7844c2017-01-18 15:21:53 -0500112 mock(AccessPointControllerImpl.class),
113 mock(DataUsageController.class), mMockSubDefaults,
Fabian Kozynski5ca7a512019-10-16 19:56:11 +0000114 mock(DeviceProvisionedController.class), mMockBd);
Jason Monk3aaabd72014-12-12 11:11:44 -0500115 setupNetworkController();
116
117 setupDefaultSignal();
118 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
119 TelephonyManager.NETWORK_TYPE_LTE);
120
Amin Shaikhd64e6262018-03-08 10:08:13 -0500121 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500122 }
123
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400124 @Test
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400125 public void testNoInternetIcon_withDefaultSub() {
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500126 setupNetworkController();
Shuo Qian29141582020-01-02 15:18:01 -0800127 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500128 setupDefaultSignal();
129 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700130 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500131
132 // Verify that a SignalDrawable with a cut out is used to display data disabled.
133 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
134 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400135 false, true, NO_DATA_STRING);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500136 }
137
138 @Test
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400139 public void testDataDisabledIcon_withDefaultSub() {
Jason Monkfd57ea72016-04-29 13:37:58 -0400140 setupNetworkController();
Shuo Qian29141582020-01-02 15:18:01 -0800141 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400142 setupDefaultSignal();
143 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700144 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400145
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500146 // Verify that a SignalDrawable with a cut out is used to display data disabled.
147 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
148 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400149 false, true, NO_DATA_STRING);
150 }
151
152 @Test
Evan Laird2ea99c12019-09-19 16:52:58 -0400153 public void testNonDefaultSIM_showsFullSignal_connected() {
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400154 setupNetworkController();
Shuo Qian29141582020-01-02 15:18:01 -0800155 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400156 setupDefaultSignal();
157 setDefaultSubId(mSubId + 1);
158 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 0);
159 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
160
161 // Verify that a SignalDrawable with a cut out is used to display data disabled.
162 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
163 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Evan Laird2ea99c12019-09-19 16:52:58 -0400164 false, false, NOT_DEFAULT_DATA_STRING);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400165 }
166
167 @Test
Evan Laird2ea99c12019-09-19 16:52:58 -0400168 public void testNonDefaultSIM_showsFullSignal_disconnected() {
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400169 setupNetworkController();
Shuo Qian29141582020-01-02 15:18:01 -0800170 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400171 setupDefaultSignal();
172 setDefaultSubId(mSubId + 1);
173 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
174 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
175
176 // Verify that a SignalDrawable with a cut out is used to display data disabled.
177 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
178 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Evan Laird2ea99c12019-09-19 16:52:58 -0400179 false, false, NOT_DEFAULT_DATA_STRING);
Jason Monkfd57ea72016-04-29 13:37:58 -0400180 }
181
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400182 @Test
SongFerngWang52dada72019-08-14 16:59:29 +0800183 public void testNr5GIcon_NrNotRestrictedRrcCon_show5GIcon() {
184 setupNr5GIconConfigurationForNotRestrictedRrcCon();
185 setupDefaultSignal();
186 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
187 TelephonyManager.NETWORK_TYPE_LTE);
188 updateDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT);
189 ServiceState ss = Mockito.mock(ServiceState.class);
190 doReturn(NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED).when(ss).getNrState();
191 mPhoneStateListener.onServiceStateChanged(ss);
192
193 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G,
194 true, DEFAULT_QS_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G, true, true);
195 }
196
197 @Test
198 public void testNr5GIcon_NrNotRestrictedRrcIdle_show5GIcon() {
199 setupNr5GIconConfigurationForNotRestrictedRrcIdle();
200 setupDefaultSignal();
201 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
202 TelephonyManager.NETWORK_TYPE_LTE);
203 updateDataActivity(TelephonyManager.DATA_ACTIVITY_DORMANT);
204 ServiceState ss = Mockito.mock(ServiceState.class);
205 doReturn(NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED).when(ss).getNrState();
206 mPhoneStateListener.onServiceStateChanged(ss);
207
208 verifyDataIndicators(TelephonyIcons.ICON_5G);
209 }
210
211 @Test
Pengquan Menga62d32b2018-12-06 17:38:38 -0800212 public void testNr5GIcon_NrConnectedWithoutMMWave_show5GIcon() {
213 setupDefaultNr5GIconConfiguration();
214 setupDefaultSignal();
215 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
216 TelephonyManager.NETWORK_TYPE_LTE);
217 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700218 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800219 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
220 mPhoneStateListener.onServiceStateChanged(ss);
221
222 verifyDataIndicators(TelephonyIcons.ICON_5G);
223 }
224
225 @Test
226 public void testNr5GIcon_NrConnectedWithMMWave_show5GPlusIcon() {
227 setupDefaultNr5GIconConfiguration();
228 setupDefaultSignal();
229 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
230 TelephonyManager.NETWORK_TYPE_LTE);
231 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700232 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800233 doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss).getNrFrequencyRange();
234 mPhoneStateListener.onServiceStateChanged(ss);
235
236 verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
237 }
238
239 @Test
240 public void testNr5GIcon_NrRestricted_showLteIcon() {
241 setupDefaultNr5GIconConfiguration();
242 setupDefaultSignal();
243 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
244 TelephonyManager.NETWORK_TYPE_LTE);
245 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700246 doReturn(NetworkRegistrationInfo.NR_STATE_RESTRICTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800247 mPhoneStateListener.onServiceStateChanged(mServiceState);
248
249 verifyDataIndicators(TelephonyIcons.ICON_LTE);
250 }
251
252 @Test
Bill Lin767c0db2019-08-15 20:42:06 +0800253 public void testNr5GIcon_displayGracePeriodTime_enabled() {
254 setupDefaultNr5GIconConfiguration();
255 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
256 setupDefaultSignal();
257 mNetworkController.handleConfigurationChanged();
258 mPhoneStateListener.onServiceStateChanged(mServiceState);
259
260 ServiceState ss = Mockito.mock(ServiceState.class);
261 // While nrIconDisplayGracePeriodMs > 0 & is Nr5G, mIsShowingIconGracefully should be true
262 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
263 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
264 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
265 TelephonyManager.NETWORK_TYPE_LTE);
266 mPhoneStateListener.onServiceStateChanged(ss);
267
268 assertTrue(mConfig.nrIconDisplayGracePeriodMs > 0);
269 assertTrue(mMobileSignalController.mIsShowingIconGracefully);
270 }
271
272 @Test
273 public void testNr5GIcon_displayGracePeriodTime_disabled() {
274 setupDefaultNr5GIconConfiguration();
275 setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
276 setupDefaultSignal();
277
278 assertTrue(mConfig.nrIconDisplayGracePeriodMs == 0);
279
280 // While nrIconDisplayGracePeriodMs <= 0, mIsShowingIconGracefully should be false
281 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
282 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
283 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
284 TelephonyManager.NETWORK_TYPE_LTE);
285
286 assertFalse(mMobileSignalController.mIsShowingIconGracefully);
287 }
288
289 @Test
290 public void testNr5GIcon_enableDisplayGracePeriodTime_showIconGracefully() {
291 setupDefaultNr5GIconConfiguration();
292 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
293 setupDefaultSignal();
294 mNetworkController.handleConfigurationChanged();
295 mPhoneStateListener.onServiceStateChanged(mServiceState);
296
297 ServiceState ss = Mockito.mock(ServiceState.class);
298 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
299 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
300 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
301 TelephonyManager.NETWORK_TYPE_LTE);
302 mPhoneStateListener.onServiceStateChanged(ss);
303
304 verifyDataIndicators(TelephonyIcons.ICON_5G);
305
306 // Enabled timer Nr5G switch to None Nr5G, showing 5G icon gracefully
307 ServiceState ssLte = Mockito.mock(ServiceState.class);
308 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(ssLte).getNrState();
309 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(ssLte).getNrFrequencyRange();
310 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
311 TelephonyManager.NETWORK_TYPE_LTE);
312 mPhoneStateListener.onServiceStateChanged(ssLte);
313
314 verifyDataIndicators(TelephonyIcons.ICON_5G);
315 }
316
317 @Test
318 public void testNr5GIcon_disableDisplayGracePeriodTime_showLatestIconImmediately() {
319 setupDefaultNr5GIconConfiguration();
320 setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
321 setupDefaultSignal();
322 mNetworkController.handleConfigurationChanged();
323
324 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
325 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
326 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
327 TelephonyManager.NETWORK_TYPE_LTE);
328
329 verifyDataIndicators(TelephonyIcons.ICON_5G);
330
331 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(mServiceState).getNrState();
332 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(mServiceState).getNrFrequencyRange();
333 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
334 TelephonyManager.NETWORK_TYPE_LTE);
335
336 verifyDataIndicators(TelephonyIcons.ICON_LTE);
337 }
338
339 @Test
340 public void testNr5GIcon_resetDisplayGracePeriodTime_whenDataDisconnected() {
341 setupDefaultNr5GIconConfiguration();
342 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
343 setupDefaultSignal();
344 mNetworkController.handleConfigurationChanged();
345 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(mServiceState).getNrState();
346 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(mServiceState).getNrFrequencyRange();
347 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
348 TelephonyManager.NETWORK_TYPE_LTE);
349
350 verifyDataIndicators(TelephonyIcons.ICON_5G);
351
352 // Disabled timer, when out of service, reset timer to display latest state
353 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
354 TelephonyManager.NETWORK_TYPE_LTE);
355 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(mServiceState).getNrState();
356 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(mServiceState).getNrFrequencyRange();
357 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_DISCONNECTED,
358 TelephonyManager.NETWORK_TYPE_UMTS);
359
360 verifyDataIndicators(0);
361 }
362
363 @Test
364 public void testNr5GIcon_enableDisplayGracePeriodTime_show5G_switching_5GPlus() {
365 setupDefaultNr5GIconConfiguration();
366 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
367 setupDefaultSignal();
368 mNetworkController.handleConfigurationChanged();
369 mPhoneStateListener.onServiceStateChanged(mServiceState);
370
371 ServiceState ss5G = Mockito.mock(ServiceState.class);
372 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss5G).getNrState();
373 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss5G).getNrFrequencyRange();
374 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
375 TelephonyManager.NETWORK_TYPE_LTE);
376 mPhoneStateListener.onServiceStateChanged(ss5G);
377
378 verifyDataIndicators(TelephonyIcons.ICON_5G);
379
380 // When timeout enabled, 5G/5G+ switching should be updated immediately
381 ServiceState ss5GPlus = Mockito.mock(ServiceState.class);
382 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss5GPlus).getNrState();
383 doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss5GPlus).getNrFrequencyRange();
384 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
385 TelephonyManager.NETWORK_TYPE_LTE);
386 mPhoneStateListener.onServiceStateChanged(ss5GPlus);
387
388 verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
389 }
390
391 @Test
392 public void testNr5GIcon_carrierDisabledDisplayGracePeriodTime_shouldUpdateIconImmediately() {
393 setupDefaultNr5GIconConfiguration();
394 setupDefaultNr5GIconDisplayGracePeriodTime_enableThirtySeconds();
395 setupDefaultSignal();
396 mNetworkController.handleConfigurationChanged();
397 mPhoneStateListener.onServiceStateChanged(mServiceState);
398
399 ServiceState ss5G = Mockito.mock(ServiceState.class);
400 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss5G).getNrState();
401 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss5G).getNrFrequencyRange();
402 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
403 TelephonyManager.NETWORK_TYPE_LTE);
404 mPhoneStateListener.onServiceStateChanged(ss5G);
405
406 verifyDataIndicators(TelephonyIcons.ICON_5G);
407
408 // State from NR_5G to NONE NR_5G with timeout, should show previous 5G icon
409 ServiceState ssLte = Mockito.mock(ServiceState.class);
410 doReturn(NetworkRegistrationInfo.NR_STATE_NONE).when(ssLte).getNrState();
411 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(ssLte).getNrFrequencyRange();
412 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
413 TelephonyManager.NETWORK_TYPE_LTE);
414 mPhoneStateListener.onServiceStateChanged(ssLte);
415
416 verifyDataIndicators(TelephonyIcons.ICON_5G);
417
418 // Update nrIconDisplayGracePeriodMs to 0
419 setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
420 mNetworkController.handleConfigurationChanged();
421
422 // State from NR_5G to NONE NR_STATE_RESTRICTED, showing corresponding icon
423 doReturn(NetworkRegistrationInfo.NR_STATE_RESTRICTED).when(mServiceState).getNrState();
Hall Liu5a95a702020-01-06 19:04:10 -0800424 NetworkRegistrationInfo fakeRegInfo = new NetworkRegistrationInfo.Builder()
425 .setTransportType(TRANSPORT_TYPE_WWAN)
426 .setDomain(DOMAIN_PS)
427 .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE)
428 .build();
429 doReturn(fakeRegInfo).when(mServiceState)
430 .getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN);
Bill Lin767c0db2019-08-15 20:42:06 +0800431 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
432 TelephonyManager.NETWORK_TYPE_LTE);
433
434 assertTrue(mConfig.nrIconDisplayGracePeriodMs == 0);
435 verifyDataIndicators(TelephonyIcons.ICON_LTE);
436 }
437
438 @Test
Jason Monkfd57ea72016-04-29 13:37:58 -0400439 public void testDataDisabledIcon_UserNotSetup() {
440 setupNetworkController();
Shuo Qian29141582020-01-02 15:18:01 -0800441 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400442 setupDefaultSignal();
443 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700444 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monk0288de02017-02-23 14:48:05 -0500445 when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false);
446 mUserCallback.onUserSetupChanged();
Jason Monk2515f472017-09-19 09:52:43 -0400447 TestableLooper.get(this).processAllMessages();
Jason Monkfd57ea72016-04-29 13:37:58 -0400448
449 // Don't show the X until the device is setup.
Amin Shaikhd64e6262018-03-08 10:08:13 -0500450 verifyDataIndicators(0);
Jason Monkfd57ea72016-04-29 13:37:58 -0400451 }
452
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400453 @Test
Wenting Xiong63364fe2017-02-07 19:12:27 +0800454 public void testAlwaysShowDataRatIcon() {
455 setupDefaultSignal();
Shuo Qian29141582020-01-02 15:18:01 -0800456 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800457 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED,
458 TelephonyManager.NETWORK_TYPE_GSM);
459
460 // Switch to showing data RAT icon when data is disconnected
461 // and re-initialize the NetworkController.
462 mConfig.alwaysShowDataRatIcon = true;
463 mNetworkController.handleConfigurationChanged();
464
Amin Shaikhd64e6262018-03-08 10:08:13 -0500465 verifyDataIndicators(TelephonyIcons.ICON_G);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800466 }
467
468 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500469 public void test4gDataIconConfigChange() {
470 setupDefaultSignal();
471 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
472 TelephonyManager.NETWORK_TYPE_LTE);
473
474 // Switch to showing 4g icon and re-initialize the NetworkController.
475 mConfig.show4gForLte = true;
476 // Can't send the broadcast as that would actually read the config from
477 // the context. Instead we'll just poke at a function that does all of
478 // the after work.
479 mNetworkController.handleConfigurationChanged();
480
Amin Shaikhd64e6262018-03-08 10:08:13 -0500481 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500482 }
483
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400484 @Test
Jason Monk67b2c162016-01-12 10:24:09 -0500485 public void testDataChangeWithoutConnectionState() {
486 setupDefaultSignal();
487 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
488 TelephonyManager.NETWORK_TYPE_LTE);
489
Amin Shaikhd64e6262018-03-08 10:08:13 -0500490 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monk67b2c162016-01-12 10:24:09 -0500491
Hall Liu5a95a702020-01-06 19:04:10 -0800492 NetworkRegistrationInfo fakeRegInfo = new NetworkRegistrationInfo.Builder()
493 .setTransportType(TRANSPORT_TYPE_WWAN)
494 .setDomain(DOMAIN_PS)
495 .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_HSPA)
496 .build();
497 when(mServiceState.getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN))
498 .thenReturn(fakeRegInfo);
Jason Monk67b2c162016-01-12 10:24:09 -0500499 updateServiceState();
Amin Shaikhd64e6262018-03-08 10:08:13 -0500500 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monk67b2c162016-01-12 10:24:09 -0500501 }
502
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400503 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -0500504 public void testDataActivity() {
505 setupDefaultSignal();
506
507 testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false);
508 testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false);
509 testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true);
510 testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true);
511 }
512
Fabian Kozynskia9091992019-03-25 11:08:32 -0400513 @Test
514 public void testUpdateDataNetworkName() {
515 setupDefaultSignal();
516 String newDataName = "TestDataName";
SongFerngWang2b1ea8d2019-11-20 02:11:09 +0800517 when(mServiceState.getOperatorAlphaShort()).thenReturn(newDataName);
Fabian Kozynskia9091992019-03-25 11:08:32 -0400518 updateServiceState();
519 assertDataNetworkNameEquals(newDataName);
520 }
521
Jason Monkf13b4b32014-11-07 16:39:34 -0500522 private void testDataActivity(int direction, boolean in, boolean out) {
523 updateDataActivity(direction);
524
Jason Monk26ad85a2016-12-08 14:45:42 -0500525 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON, true,
Jason Monk7e6c83c2017-04-26 14:35:24 -0400526 DEFAULT_QS_SIGNAL_STRENGTH, DEFAULT_QS_ICON, in, out);
Jason Monkf13b4b32014-11-07 16:39:34 -0500527 }
528
Amin Shaikhd64e6262018-03-08 10:08:13 -0500529 private void verifyDataIndicators(int dataIcon) {
Jason Monk26ad85a2016-12-08 14:45:42 -0500530 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon,
Amin Shaikhd64e6262018-03-08 10:08:13 -0500531 true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false,
Jason Monkb5746272014-11-12 16:50:31 -0500532 false);
Jason Monkf13b4b32014-11-07 16:39:34 -0500533 }
Jason Monkf13b4b32014-11-07 16:39:34 -0500534}