blob: 1eb59396e525faede766de1034441cbad850f32b [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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800190 setNrState(ss, NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
SongFerngWang52dada72019-08-14 16:59:29 +0800191 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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800205 setNrState(ss, NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED);
SongFerngWang52dada72019-08-14 16:59:29 +0800206 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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800218 setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800232 setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800246 setNrState(ss, NetworkRegistrationInfo.NR_STATE_RESTRICTED);
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
Jayachandran C09fceba2020-01-29 14:13:09 -0800262 setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800263 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
Jayachandran C09fceba2020-01-29 14:13:09 -0800281 setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_CONNECTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800282 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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800298 setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800299 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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800308 setNrState(ssLte, NetworkRegistrationInfo.NR_STATE_NONE);
Bill Lin767c0db2019-08-15 20:42:06 +0800309 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
Jayachandran C09fceba2020-01-29 14:13:09 -0800324 setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_CONNECTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800325 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
Jayachandran C09fceba2020-01-29 14:13:09 -0800331 setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_NONE);
Bill Lin767c0db2019-08-15 20:42:06 +0800332 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();
Jayachandran C09fceba2020-01-29 14:13:09 -0800345 setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_CONNECTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800346 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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800355 setNrState(mServiceState, NetworkRegistrationInfo.NR_STATE_NONE);
Bill Lin767c0db2019-08-15 20:42:06 +0800356 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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800372 setNrState(ss5G, NetworkRegistrationInfo.NR_STATE_CONNECTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800373 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);
Jayachandran C09fceba2020-01-29 14:13:09 -0800382 setNrState(ss5GPlus, NetworkRegistrationInfo.NR_STATE_CONNECTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800383 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
Jayachandran C09fceba2020-01-29 14:13:09 -0800399 ServiceState ss = Mockito.mock(ServiceState.class);
400 setNrState(ss, NetworkRegistrationInfo.NR_STATE_CONNECTED);
401 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
Bill Lin767c0db2019-08-15 20:42:06 +0800402 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
403 TelephonyManager.NETWORK_TYPE_LTE);
Jayachandran C09fceba2020-01-29 14:13:09 -0800404 mPhoneStateListener.onServiceStateChanged(ss);
Bill Lin767c0db2019-08-15 20:42:06 +0800405
406 verifyDataIndicators(TelephonyIcons.ICON_5G);
407
408 // State from NR_5G to NONE NR_5G with timeout, should show previous 5G icon
Jayachandran C09fceba2020-01-29 14:13:09 -0800409 setNrState(ss, NetworkRegistrationInfo.NR_STATE_NONE);
410 doReturn(ServiceState.FREQUENCY_RANGE_UNKNOWN).when(ss).getNrFrequencyRange();
Bill Lin767c0db2019-08-15 20:42:06 +0800411 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
412 TelephonyManager.NETWORK_TYPE_LTE);
Jayachandran C09fceba2020-01-29 14:13:09 -0800413 mPhoneStateListener.onServiceStateChanged(ss);
Bill Lin767c0db2019-08-15 20:42:06 +0800414
415 verifyDataIndicators(TelephonyIcons.ICON_5G);
416
417 // Update nrIconDisplayGracePeriodMs to 0
418 setupDefaultNr5GIconDisplayGracePeriodTime_disabled();
419 mNetworkController.handleConfigurationChanged();
420
421 // State from NR_5G to NONE NR_STATE_RESTRICTED, showing corresponding icon
Jayachandran C09fceba2020-01-29 14:13:09 -0800422 setNrState(ss, NetworkRegistrationInfo.NR_STATE_RESTRICTED);
Bill Lin767c0db2019-08-15 20:42:06 +0800423 mPhoneStateListener.onDataConnectionStateChanged(TelephonyManager.DATA_CONNECTED,
424 TelephonyManager.NETWORK_TYPE_LTE);
425
426 assertTrue(mConfig.nrIconDisplayGracePeriodMs == 0);
427 verifyDataIndicators(TelephonyIcons.ICON_LTE);
428 }
429
430 @Test
Jason Monkfd57ea72016-04-29 13:37:58 -0400431 public void testDataDisabledIcon_UserNotSetup() {
432 setupNetworkController();
Shuo Qian29141582020-01-02 15:18:01 -0800433 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400434 setupDefaultSignal();
435 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700436 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monk0288de02017-02-23 14:48:05 -0500437 when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false);
438 mUserCallback.onUserSetupChanged();
Jason Monk2515f472017-09-19 09:52:43 -0400439 TestableLooper.get(this).processAllMessages();
Jason Monkfd57ea72016-04-29 13:37:58 -0400440
441 // Don't show the X until the device is setup.
Amin Shaikhd64e6262018-03-08 10:08:13 -0500442 verifyDataIndicators(0);
Jason Monkfd57ea72016-04-29 13:37:58 -0400443 }
444
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400445 @Test
Wenting Xiong63364fe2017-02-07 19:12:27 +0800446 public void testAlwaysShowDataRatIcon() {
447 setupDefaultSignal();
Shuo Qian29141582020-01-02 15:18:01 -0800448 when(mMockTm.isDataConnectionEnabled()).thenReturn(false);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800449 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED,
450 TelephonyManager.NETWORK_TYPE_GSM);
451
452 // Switch to showing data RAT icon when data is disconnected
453 // and re-initialize the NetworkController.
454 mConfig.alwaysShowDataRatIcon = true;
455 mNetworkController.handleConfigurationChanged();
456
Amin Shaikhd64e6262018-03-08 10:08:13 -0500457 verifyDataIndicators(TelephonyIcons.ICON_G);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800458 }
459
460 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500461 public void test4gDataIconConfigChange() {
462 setupDefaultSignal();
463 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
464 TelephonyManager.NETWORK_TYPE_LTE);
465
466 // Switch to showing 4g icon and re-initialize the NetworkController.
467 mConfig.show4gForLte = true;
468 // Can't send the broadcast as that would actually read the config from
469 // the context. Instead we'll just poke at a function that does all of
470 // the after work.
471 mNetworkController.handleConfigurationChanged();
472
Amin Shaikhd64e6262018-03-08 10:08:13 -0500473 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500474 }
475
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400476 @Test
Jason Monk67b2c162016-01-12 10:24:09 -0500477 public void testDataChangeWithoutConnectionState() {
478 setupDefaultSignal();
479 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
480 TelephonyManager.NETWORK_TYPE_LTE);
481
Amin Shaikhd64e6262018-03-08 10:08:13 -0500482 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monk67b2c162016-01-12 10:24:09 -0500483
Hall Liu5a95a702020-01-06 19:04:10 -0800484 NetworkRegistrationInfo fakeRegInfo = new NetworkRegistrationInfo.Builder()
485 .setTransportType(TRANSPORT_TYPE_WWAN)
486 .setDomain(DOMAIN_PS)
487 .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_HSPA)
488 .build();
489 when(mServiceState.getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN))
490 .thenReturn(fakeRegInfo);
Jason Monk67b2c162016-01-12 10:24:09 -0500491 updateServiceState();
Amin Shaikhd64e6262018-03-08 10:08:13 -0500492 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monk67b2c162016-01-12 10:24:09 -0500493 }
494
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400495 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -0500496 public void testDataActivity() {
497 setupDefaultSignal();
498
499 testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false);
500 testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false);
501 testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true);
502 testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true);
503 }
504
Fabian Kozynskia9091992019-03-25 11:08:32 -0400505 @Test
506 public void testUpdateDataNetworkName() {
507 setupDefaultSignal();
508 String newDataName = "TestDataName";
SongFerngWang2b1ea8d2019-11-20 02:11:09 +0800509 when(mServiceState.getOperatorAlphaShort()).thenReturn(newDataName);
Fabian Kozynskia9091992019-03-25 11:08:32 -0400510 updateServiceState();
511 assertDataNetworkNameEquals(newDataName);
512 }
513
Jason Monkf13b4b32014-11-07 16:39:34 -0500514 private void testDataActivity(int direction, boolean in, boolean out) {
515 updateDataActivity(direction);
516
Jason Monk26ad85a2016-12-08 14:45:42 -0500517 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON, true,
Jason Monk7e6c83c2017-04-26 14:35:24 -0400518 DEFAULT_QS_SIGNAL_STRENGTH, DEFAULT_QS_ICON, in, out);
Jason Monkf13b4b32014-11-07 16:39:34 -0500519 }
520
Amin Shaikhd64e6262018-03-08 10:08:13 -0500521 private void verifyDataIndicators(int dataIcon) {
Jason Monk26ad85a2016-12-08 14:45:42 -0500522 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon,
Amin Shaikhd64e6262018-03-08 10:08:13 -0500523 true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false,
Jason Monkb5746272014-11-12 16:50:31 -0500524 false);
Jason Monkf13b4b32014-11-07 16:39:34 -0500525 }
Jayachandran C09fceba2020-01-29 14:13:09 -0800526
527 private void setNrState(ServiceState ss, int nrState) {
528 mFakeRegInfo.setNrState(nrState);
529 doReturn(mFakeRegInfo).when(ss)
530 .getNetworkRegistrationInfo(DOMAIN_PS, TRANSPORT_TYPE_WWAN);
531 }
Jason Monkf13b4b32014-11-07 16:39:34 -0500532}