blob: f0394da6f479c4affdc9e4b7843e9ad37539d0e7 [file] [log] [blame]
Jason Monkf13b4b32014-11-07 16:39:34 -05001package com.android.systemui.statusbar.policy;
2
Jason Monk0288de02017-02-23 14:48:05 -05003import static org.mockito.Matchers.anyInt;
Pengquan Menga62d32b2018-12-06 17:38:38 -08004import static org.mockito.Mockito.doReturn;
Jason Monk9c7844c2017-01-18 15:21:53 -05005import static org.mockito.Mockito.mock;
Jason Monk0288de02017-02-23 14:48:05 -05006import static org.mockito.Mockito.when;
Jason Monk9c7844c2017-01-18 15:21:53 -05007
Jason Monkfd57ea72016-04-29 13:37:58 -04008import android.net.NetworkCapabilities;
Jason Monk07b75fe2015-05-14 16:47:03 -04009import android.os.Looper;
Jack Yue27d3fd2019-03-15 14:49:53 -070010import android.telephony.NetworkRegistrationInfo;
Pengquan Menga62d32b2018-12-06 17:38:38 -080011import android.telephony.ServiceState;
Jason Monkf13b4b32014-11-07 16:39:34 -050012import android.telephony.TelephonyManager;
Jason Monke427cb82015-07-28 09:18:08 -040013import android.test.suitebuilder.annotation.SmallTest;
Jason Monk2515f472017-09-19 09:52:43 -040014import android.testing.AndroidTestingRunner;
15import android.testing.TestableLooper;
16import android.testing.TestableLooper.RunWithLooper;
Jason Monk0288de02017-02-23 14:48:05 -050017
Jason Monkf668d7c2016-01-14 10:38:41 -050018import com.android.settingslib.net.DataUsageController;
Jason Monk0288de02017-02-23 14:48:05 -050019
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040020import org.junit.Test;
21import org.junit.runner.RunWith;
Pengquan Menga62d32b2018-12-06 17:38:38 -080022import org.mockito.Mockito;
Jason Monk33f8ae72015-05-08 10:45:15 -040023
Jason Monke427cb82015-07-28 09:18:08 -040024@SmallTest
Jason Monk2515f472017-09-19 09:52:43 -040025@RunWith(AndroidTestingRunner.class)
26@RunWithLooper
Jason Monkf13b4b32014-11-07 16:39:34 -050027public class NetworkControllerDataTest extends NetworkControllerBaseTest {
28
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040029 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050030 public void test3gDataIcon() {
31 setupDefaultSignal();
32
Amin Shaikhd64e6262018-03-08 10:08:13 -050033 verifyDataIndicators(TelephonyIcons.ICON_3G);
Jason Monkf13b4b32014-11-07 16:39:34 -050034 }
35
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040036 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050037 public void test2gDataIcon() {
38 setupDefaultSignal();
39 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
40 TelephonyManager.NETWORK_TYPE_GSM);
41
Amin Shaikhd64e6262018-03-08 10:08:13 -050042 verifyDataIndicators(TelephonyIcons.ICON_G);
Jason Monkf13b4b32014-11-07 16:39:34 -050043 }
44
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040045 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050046 public void testCdmaDataIcon() {
47 setupDefaultSignal();
48 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
49 TelephonyManager.NETWORK_TYPE_CDMA);
50
Amin Shaikhd64e6262018-03-08 10:08:13 -050051 verifyDataIndicators(TelephonyIcons.ICON_1X);
Jason Monkf13b4b32014-11-07 16:39:34 -050052 }
53
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040054 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050055 public void testEdgeDataIcon() {
56 setupDefaultSignal();
57 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
58 TelephonyManager.NETWORK_TYPE_EDGE);
59
Amin Shaikhd64e6262018-03-08 10:08:13 -050060 verifyDataIndicators(TelephonyIcons.ICON_E);
Jason Monkf13b4b32014-11-07 16:39:34 -050061 }
62
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040063 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050064 public void testLteDataIcon() {
65 setupDefaultSignal();
66 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
67 TelephonyManager.NETWORK_TYPE_LTE);
68
Amin Shaikhd64e6262018-03-08 10:08:13 -050069 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monkf13b4b32014-11-07 16:39:34 -050070 }
71
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040072 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -050073 public void testHspaDataIcon() {
74 setupDefaultSignal();
75 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
76 TelephonyManager.NETWORK_TYPE_HSPA);
77
Amin Shaikhd64e6262018-03-08 10:08:13 -050078 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monkf13b4b32014-11-07 16:39:34 -050079 }
80
Amin Shaikhf5830ca2018-03-09 14:06:50 -050081
82 @Test
83 public void testHspaPlusDataIcon() {
84 setupDefaultSignal();
85 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
86 TelephonyManager.NETWORK_TYPE_HSPAP);
87
88 verifyDataIndicators(TelephonyIcons.ICON_H_PLUS);
89 }
90
91
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -040092 @Test
Jason Monk7150d7f2015-07-09 10:14:12 -040093 public void testWfcNoDataIcon() {
94 setupDefaultSignal();
95 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
96 TelephonyManager.NETWORK_TYPE_IWLAN);
97
Amin Shaikhd64e6262018-03-08 10:08:13 -050098 verifyDataIndicators(0);
Jason Monk7150d7f2015-07-09 10:14:12 -040099 }
100
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400101 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500102 public void test4gDataIcon() {
103 // Switch to showing 4g icon and re-initialize the NetworkController.
104 mConfig.show4gForLte = true;
Sundeep Ghuman9d10a3c2017-06-16 00:05:16 +0000105 mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
Jason Monk07b75fe2015-05-14 16:47:03 -0400106 mConfig, Looper.getMainLooper(), mCallbackHandler,
Jason Monk9c7844c2017-01-18 15:21:53 -0500107 mock(AccessPointControllerImpl.class),
108 mock(DataUsageController.class), mMockSubDefaults,
109 mock(DeviceProvisionedController.class));
Jason Monk3aaabd72014-12-12 11:11:44 -0500110 setupNetworkController();
111
112 setupDefaultSignal();
113 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
114 TelephonyManager.NETWORK_TYPE_LTE);
115
Amin Shaikhd64e6262018-03-08 10:08:13 -0500116 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500117 }
118
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400119 @Test
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400120 public void testNoInternetIcon_withDefaultSub() {
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500121 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700122 when(mMockTm.isDataCapable()).thenReturn(false);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500123 setupDefaultSignal();
124 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700125 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500126
127 // Verify that a SignalDrawable with a cut out is used to display data disabled.
128 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
129 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400130 false, true, NO_DATA_STRING);
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500131 }
132
133 @Test
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400134 public void testDataDisabledIcon_withDefaultSub() {
Jason Monkfd57ea72016-04-29 13:37:58 -0400135 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700136 when(mMockTm.isDataCapable()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400137 setupDefaultSignal();
138 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700139 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400140
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500141 // Verify that a SignalDrawable with a cut out is used to display data disabled.
142 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
143 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400144 false, true, NO_DATA_STRING);
145 }
146
147 @Test
148 public void testNoInternetIcon_withoutDefaultSub() {
149 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700150 when(mMockTm.isDataCapable()).thenReturn(false);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400151 setupDefaultSignal();
152 setDefaultSubId(mSubId + 1);
153 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 0);
154 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
155
156 // Verify that a SignalDrawable with a cut out is used to display data disabled.
157 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
158 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
159 false, true, NOT_DEFAULT_DATA_STRING);
160 }
161
162 @Test
163 public void testDataDisabledIcon_withoutDefaultSub() {
164 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700165 when(mMockTm.isDataCapable()).thenReturn(false);
Fabian Kozynskic7bc84b2019-03-11 13:57:31 -0400166 setupDefaultSignal();
167 setDefaultSubId(mSubId + 1);
168 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
169 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
170
171 // Verify that a SignalDrawable with a cut out is used to display data disabled.
172 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, 0,
173 true, DEFAULT_QS_SIGNAL_STRENGTH, 0, false,
174 false, true, NOT_DEFAULT_DATA_STRING);
Jason Monkfd57ea72016-04-29 13:37:58 -0400175 }
176
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400177 @Test
SongFerngWang52dada72019-08-14 16:59:29 +0800178 public void testNr5GIcon_NrNotRestrictedRrcCon_show5GIcon() {
179 setupNr5GIconConfigurationForNotRestrictedRrcCon();
180 setupDefaultSignal();
181 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
182 TelephonyManager.NETWORK_TYPE_LTE);
183 updateDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT);
184 ServiceState ss = Mockito.mock(ServiceState.class);
185 doReturn(NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED).when(ss).getNrState();
186 mPhoneStateListener.onServiceStateChanged(ss);
187
188 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G,
189 true, DEFAULT_QS_SIGNAL_STRENGTH, TelephonyIcons.ICON_5G, true, true);
190 }
191
192 @Test
193 public void testNr5GIcon_NrNotRestrictedRrcIdle_show5GIcon() {
194 setupNr5GIconConfigurationForNotRestrictedRrcIdle();
195 setupDefaultSignal();
196 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
197 TelephonyManager.NETWORK_TYPE_LTE);
198 updateDataActivity(TelephonyManager.DATA_ACTIVITY_DORMANT);
199 ServiceState ss = Mockito.mock(ServiceState.class);
200 doReturn(NetworkRegistrationInfo.NR_STATE_NOT_RESTRICTED).when(ss).getNrState();
201 mPhoneStateListener.onServiceStateChanged(ss);
202
203 verifyDataIndicators(TelephonyIcons.ICON_5G);
204 }
205
206 @Test
Pengquan Menga62d32b2018-12-06 17:38:38 -0800207 public void testNr5GIcon_NrConnectedWithoutMMWave_show5GIcon() {
208 setupDefaultNr5GIconConfiguration();
209 setupDefaultSignal();
210 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
211 TelephonyManager.NETWORK_TYPE_LTE);
212 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700213 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800214 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
215 mPhoneStateListener.onServiceStateChanged(ss);
216
217 verifyDataIndicators(TelephonyIcons.ICON_5G);
218 }
219
220 @Test
221 public void testNr5GIcon_NrConnectedWithMMWave_show5GPlusIcon() {
222 setupDefaultNr5GIconConfiguration();
223 setupDefaultSignal();
224 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
225 TelephonyManager.NETWORK_TYPE_LTE);
226 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700227 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800228 doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss).getNrFrequencyRange();
229 mPhoneStateListener.onServiceStateChanged(ss);
230
231 verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
232 }
233
234 @Test
235 public void testNr5GIcon_NrRestricted_showLteIcon() {
236 setupDefaultNr5GIconConfiguration();
237 setupDefaultSignal();
238 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
239 TelephonyManager.NETWORK_TYPE_LTE);
240 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700241 doReturn(NetworkRegistrationInfo.NR_STATE_RESTRICTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800242 mPhoneStateListener.onServiceStateChanged(mServiceState);
243
244 verifyDataIndicators(TelephonyIcons.ICON_LTE);
245 }
246
247 @Test
Jason Monkfd57ea72016-04-29 13:37:58 -0400248 public void testDataDisabledIcon_UserNotSetup() {
249 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700250 when(mMockTm.isDataCapable()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400251 setupDefaultSignal();
252 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700253 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monk0288de02017-02-23 14:48:05 -0500254 when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false);
255 mUserCallback.onUserSetupChanged();
Jason Monk2515f472017-09-19 09:52:43 -0400256 TestableLooper.get(this).processAllMessages();
Jason Monkfd57ea72016-04-29 13:37:58 -0400257
258 // Don't show the X until the device is setup.
Amin Shaikhd64e6262018-03-08 10:08:13 -0500259 verifyDataIndicators(0);
Jason Monkfd57ea72016-04-29 13:37:58 -0400260 }
261
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400262 @Test
Wenting Xiong63364fe2017-02-07 19:12:27 +0800263 public void testAlwaysShowDataRatIcon() {
264 setupDefaultSignal();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700265 when(mMockTm.isDataCapable()).thenReturn(false);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800266 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED,
267 TelephonyManager.NETWORK_TYPE_GSM);
268
269 // Switch to showing data RAT icon when data is disconnected
270 // and re-initialize the NetworkController.
271 mConfig.alwaysShowDataRatIcon = true;
272 mNetworkController.handleConfigurationChanged();
273
Amin Shaikhd64e6262018-03-08 10:08:13 -0500274 verifyDataIndicators(TelephonyIcons.ICON_G);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800275 }
276
277 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500278 public void test4gDataIconConfigChange() {
279 setupDefaultSignal();
280 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
281 TelephonyManager.NETWORK_TYPE_LTE);
282
283 // Switch to showing 4g icon and re-initialize the NetworkController.
284 mConfig.show4gForLte = true;
285 // Can't send the broadcast as that would actually read the config from
286 // the context. Instead we'll just poke at a function that does all of
287 // the after work.
288 mNetworkController.handleConfigurationChanged();
289
Amin Shaikhd64e6262018-03-08 10:08:13 -0500290 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500291 }
292
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400293 @Test
Jason Monk67b2c162016-01-12 10:24:09 -0500294 public void testDataChangeWithoutConnectionState() {
295 setupDefaultSignal();
296 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
297 TelephonyManager.NETWORK_TYPE_LTE);
298
Amin Shaikhd64e6262018-03-08 10:08:13 -0500299 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monk67b2c162016-01-12 10:24:09 -0500300
Jason Monk0288de02017-02-23 14:48:05 -0500301 when(mServiceState.getDataNetworkType())
Jason Monk67b2c162016-01-12 10:24:09 -0500302 .thenReturn(TelephonyManager.NETWORK_TYPE_HSPA);
303 updateServiceState();
Amin Shaikhd64e6262018-03-08 10:08:13 -0500304 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monk67b2c162016-01-12 10:24:09 -0500305 }
306
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400307 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -0500308 public void testDataActivity() {
309 setupDefaultSignal();
310
311 testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false);
312 testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false);
313 testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true);
314 testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true);
315 }
316
Fabian Kozynskia9091992019-03-25 11:08:32 -0400317 @Test
318 public void testUpdateDataNetworkName() {
319 setupDefaultSignal();
320 String newDataName = "TestDataName";
321 when(mServiceState.getDataOperatorAlphaShort()).thenReturn(newDataName);
322 updateServiceState();
323 assertDataNetworkNameEquals(newDataName);
324 }
325
Jason Monkf13b4b32014-11-07 16:39:34 -0500326 private void testDataActivity(int direction, boolean in, boolean out) {
327 updateDataActivity(direction);
328
Jason Monk26ad85a2016-12-08 14:45:42 -0500329 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON, true,
Jason Monk7e6c83c2017-04-26 14:35:24 -0400330 DEFAULT_QS_SIGNAL_STRENGTH, DEFAULT_QS_ICON, in, out);
Jason Monkf13b4b32014-11-07 16:39:34 -0500331 }
332
Amin Shaikhd64e6262018-03-08 10:08:13 -0500333 private void verifyDataIndicators(int dataIcon) {
Jason Monk26ad85a2016-12-08 14:45:42 -0500334 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon,
Amin Shaikhd64e6262018-03-08 10:08:13 -0500335 true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false,
Jason Monkb5746272014-11-12 16:50:31 -0500336 false);
Jason Monkf13b4b32014-11-07 16:39:34 -0500337 }
Jason Monkf13b4b32014-11-07 16:39:34 -0500338}