blob: 5128675e2723b816425996b7d8939700f73ffba1 [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
Pengquan Menga62d32b2018-12-06 17:38:38 -0800178 public void testNr5GIcon_NrConnectedWithoutMMWave_show5GIcon() {
179 setupDefaultNr5GIconConfiguration();
180 setupDefaultSignal();
181 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
182 TelephonyManager.NETWORK_TYPE_LTE);
183 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700184 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800185 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
186 mPhoneStateListener.onServiceStateChanged(ss);
187
188 verifyDataIndicators(TelephonyIcons.ICON_5G);
189 }
190
191 @Test
192 public void testNr5GIcon_NrConnectedWithMMWave_show5GPlusIcon() {
193 setupDefaultNr5GIconConfiguration();
194 setupDefaultSignal();
195 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
196 TelephonyManager.NETWORK_TYPE_LTE);
197 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700198 doReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800199 doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss).getNrFrequencyRange();
200 mPhoneStateListener.onServiceStateChanged(ss);
201
202 verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
203 }
204
205 @Test
206 public void testNr5GIcon_NrRestricted_showLteIcon() {
207 setupDefaultNr5GIconConfiguration();
208 setupDefaultSignal();
209 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
210 TelephonyManager.NETWORK_TYPE_LTE);
211 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yu20d71402019-03-16 23:00:35 -0700212 doReturn(NetworkRegistrationInfo.NR_STATE_RESTRICTED).when(ss).getNrState();
Pengquan Menga62d32b2018-12-06 17:38:38 -0800213 mPhoneStateListener.onServiceStateChanged(mServiceState);
214
215 verifyDataIndicators(TelephonyIcons.ICON_LTE);
216 }
217
218 @Test
Jason Monkfd57ea72016-04-29 13:37:58 -0400219 public void testDataDisabledIcon_UserNotSetup() {
220 setupNetworkController();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700221 when(mMockTm.isDataCapable()).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400222 setupDefaultSignal();
223 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700224 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monk0288de02017-02-23 14:48:05 -0500225 when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false);
226 mUserCallback.onUserSetupChanged();
Jason Monk2515f472017-09-19 09:52:43 -0400227 TestableLooper.get(this).processAllMessages();
Jason Monkfd57ea72016-04-29 13:37:58 -0400228
229 // Don't show the X until the device is setup.
Amin Shaikhd64e6262018-03-08 10:08:13 -0500230 verifyDataIndicators(0);
Jason Monkfd57ea72016-04-29 13:37:58 -0400231 }
232
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400233 @Test
Wenting Xiong63364fe2017-02-07 19:12:27 +0800234 public void testAlwaysShowDataRatIcon() {
235 setupDefaultSignal();
Malcolm Chen04be9d12019-06-11 19:48:38 -0700236 when(mMockTm.isDataCapable()).thenReturn(false);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800237 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED,
238 TelephonyManager.NETWORK_TYPE_GSM);
239
240 // Switch to showing data RAT icon when data is disconnected
241 // and re-initialize the NetworkController.
242 mConfig.alwaysShowDataRatIcon = true;
243 mNetworkController.handleConfigurationChanged();
244
Amin Shaikhd64e6262018-03-08 10:08:13 -0500245 verifyDataIndicators(TelephonyIcons.ICON_G);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800246 }
247
248 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500249 public void test4gDataIconConfigChange() {
250 setupDefaultSignal();
251 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
252 TelephonyManager.NETWORK_TYPE_LTE);
253
254 // Switch to showing 4g icon and re-initialize the NetworkController.
255 mConfig.show4gForLte = true;
256 // Can't send the broadcast as that would actually read the config from
257 // the context. Instead we'll just poke at a function that does all of
258 // the after work.
259 mNetworkController.handleConfigurationChanged();
260
Amin Shaikhd64e6262018-03-08 10:08:13 -0500261 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500262 }
263
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400264 @Test
Jason Monk67b2c162016-01-12 10:24:09 -0500265 public void testDataChangeWithoutConnectionState() {
266 setupDefaultSignal();
267 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
268 TelephonyManager.NETWORK_TYPE_LTE);
269
Amin Shaikhd64e6262018-03-08 10:08:13 -0500270 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monk67b2c162016-01-12 10:24:09 -0500271
Jason Monk0288de02017-02-23 14:48:05 -0500272 when(mServiceState.getDataNetworkType())
Jason Monk67b2c162016-01-12 10:24:09 -0500273 .thenReturn(TelephonyManager.NETWORK_TYPE_HSPA);
274 updateServiceState();
Amin Shaikhd64e6262018-03-08 10:08:13 -0500275 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monk67b2c162016-01-12 10:24:09 -0500276 }
277
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400278 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -0500279 public void testDataActivity() {
280 setupDefaultSignal();
281
282 testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false);
283 testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false);
284 testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true);
285 testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true);
286 }
287
Fabian Kozynskia9091992019-03-25 11:08:32 -0400288 @Test
289 public void testUpdateDataNetworkName() {
290 setupDefaultSignal();
291 String newDataName = "TestDataName";
292 when(mServiceState.getDataOperatorAlphaShort()).thenReturn(newDataName);
293 updateServiceState();
294 assertDataNetworkNameEquals(newDataName);
295 }
296
Jason Monkf13b4b32014-11-07 16:39:34 -0500297 private void testDataActivity(int direction, boolean in, boolean out) {
298 updateDataActivity(direction);
299
Jason Monk26ad85a2016-12-08 14:45:42 -0500300 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON, true,
Jason Monk7e6c83c2017-04-26 14:35:24 -0400301 DEFAULT_QS_SIGNAL_STRENGTH, DEFAULT_QS_ICON, in, out);
Jason Monkf13b4b32014-11-07 16:39:34 -0500302 }
303
Amin Shaikhd64e6262018-03-08 10:08:13 -0500304 private void verifyDataIndicators(int dataIcon) {
Jason Monk26ad85a2016-12-08 14:45:42 -0500305 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon,
Amin Shaikhd64e6262018-03-08 10:08:13 -0500306 true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false,
Jason Monkb5746272014-11-12 16:50:31 -0500307 false);
Jason Monkf13b4b32014-11-07 16:39:34 -0500308 }
Jason Monkf13b4b32014-11-07 16:39:34 -0500309}