blob: 5786796d980f47f8815fc795b5e824577e695713 [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 Mengf2c18a02018-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 Yuf9d06c72019-03-15 14:49:53 -070010import android.telephony.NetworkRegistrationInfo;
Pengquan Mengf2c18a02018-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 Mengf2c18a02018-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
Amin Shaikhaf4c1932018-03-08 10:29:56 -0500120 public void testNoInternetIcon() {
121 setupNetworkController();
122 when(mMockTm.getDataEnabled(mSubId)).thenReturn(false);
123 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,
130 false, true);
131 }
132
133 @Test
Jason Monkfd57ea72016-04-29 13:37:58 -0400134 public void testDataDisabledIcon() {
135 setupNetworkController();
Jason Monk0288de02017-02-23 14:48:05 -0500136 when(mMockTm.getDataEnabled(mSubId)).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,
144 false, true);
Jason Monkfd57ea72016-04-29 13:37:58 -0400145 }
146
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400147 @Test
Pengquan Mengf2c18a02018-12-06 17:38:38 -0800148 public void testNr5GIcon_NrConnectedWithoutMMWave_show5GIcon() {
149 setupDefaultNr5GIconConfiguration();
150 setupDefaultSignal();
151 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
152 TelephonyManager.NETWORK_TYPE_LTE);
153 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yuf9d06c72019-03-15 14:49:53 -0700154 doReturn(NetworkRegistrationInfo.NR_STATUS_CONNECTED).when(ss).getNrStatus();
Pengquan Mengf2c18a02018-12-06 17:38:38 -0800155 doReturn(ServiceState.FREQUENCY_RANGE_HIGH).when(ss).getNrFrequencyRange();
156 mPhoneStateListener.onServiceStateChanged(ss);
157
158 verifyDataIndicators(TelephonyIcons.ICON_5G);
159 }
160
161 @Test
162 public void testNr5GIcon_NrConnectedWithMMWave_show5GPlusIcon() {
163 setupDefaultNr5GIconConfiguration();
164 setupDefaultSignal();
165 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
166 TelephonyManager.NETWORK_TYPE_LTE);
167 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yuf9d06c72019-03-15 14:49:53 -0700168 doReturn(NetworkRegistrationInfo.NR_STATUS_CONNECTED).when(ss).getNrStatus();
Pengquan Mengf2c18a02018-12-06 17:38:38 -0800169 doReturn(ServiceState.FREQUENCY_RANGE_MMWAVE).when(ss).getNrFrequencyRange();
170 mPhoneStateListener.onServiceStateChanged(ss);
171
172 verifyDataIndicators(TelephonyIcons.ICON_5G_PLUS);
173 }
174
175 @Test
176 public void testNr5GIcon_NrRestricted_showLteIcon() {
177 setupDefaultNr5GIconConfiguration();
178 setupDefaultSignal();
179 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
180 TelephonyManager.NETWORK_TYPE_LTE);
181 ServiceState ss = Mockito.mock(ServiceState.class);
Jack Yuf9d06c72019-03-15 14:49:53 -0700182 doReturn(NetworkRegistrationInfo.NR_STATUS_RESTRICTED).when(ss).getNrStatus();
Pengquan Mengf2c18a02018-12-06 17:38:38 -0800183 mPhoneStateListener.onServiceStateChanged(mServiceState);
184
185 verifyDataIndicators(TelephonyIcons.ICON_LTE);
186 }
187
188 @Test
Jason Monkfd57ea72016-04-29 13:37:58 -0400189 public void testDataDisabledIcon_UserNotSetup() {
190 setupNetworkController();
Jason Monk0288de02017-02-23 14:48:05 -0500191 when(mMockTm.getDataEnabled(mSubId)).thenReturn(false);
Jason Monkfd57ea72016-04-29 13:37:58 -0400192 setupDefaultSignal();
193 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0);
Anarghya Mitra678722f2018-05-11 14:29:54 -0700194 setConnectivityViaBroadcast(NetworkCapabilities.TRANSPORT_CELLULAR, false, false);
Jason Monk0288de02017-02-23 14:48:05 -0500195 when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false);
196 mUserCallback.onUserSetupChanged();
Jason Monk2515f472017-09-19 09:52:43 -0400197 TestableLooper.get(this).processAllMessages();
Jason Monkfd57ea72016-04-29 13:37:58 -0400198
199 // Don't show the X until the device is setup.
Amin Shaikhd64e6262018-03-08 10:08:13 -0500200 verifyDataIndicators(0);
Jason Monkfd57ea72016-04-29 13:37:58 -0400201 }
202
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400203 @Test
Wenting Xiong63364fe2017-02-07 19:12:27 +0800204 public void testAlwaysShowDataRatIcon() {
205 setupDefaultSignal();
206 when(mMockTm.getDataEnabled(mSubId)).thenReturn(false);
207 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED,
208 TelephonyManager.NETWORK_TYPE_GSM);
209
210 // Switch to showing data RAT icon when data is disconnected
211 // and re-initialize the NetworkController.
212 mConfig.alwaysShowDataRatIcon = true;
213 mNetworkController.handleConfigurationChanged();
214
Amin Shaikhd64e6262018-03-08 10:08:13 -0500215 verifyDataIndicators(TelephonyIcons.ICON_G);
Wenting Xiong63364fe2017-02-07 19:12:27 +0800216 }
217
218 @Test
Jason Monk3aaabd72014-12-12 11:11:44 -0500219 public void test4gDataIconConfigChange() {
220 setupDefaultSignal();
221 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
222 TelephonyManager.NETWORK_TYPE_LTE);
223
224 // Switch to showing 4g icon and re-initialize the NetworkController.
225 mConfig.show4gForLte = true;
226 // Can't send the broadcast as that would actually read the config from
227 // the context. Instead we'll just poke at a function that does all of
228 // the after work.
229 mNetworkController.handleConfigurationChanged();
230
Amin Shaikhd64e6262018-03-08 10:08:13 -0500231 verifyDataIndicators(TelephonyIcons.ICON_4G);
Jason Monk3aaabd72014-12-12 11:11:44 -0500232 }
233
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400234 @Test
Jason Monk67b2c162016-01-12 10:24:09 -0500235 public void testDataChangeWithoutConnectionState() {
236 setupDefaultSignal();
237 updateDataConnectionState(TelephonyManager.DATA_CONNECTED,
238 TelephonyManager.NETWORK_TYPE_LTE);
239
Amin Shaikhd64e6262018-03-08 10:08:13 -0500240 verifyDataIndicators(TelephonyIcons.ICON_LTE);
Jason Monk67b2c162016-01-12 10:24:09 -0500241
Jason Monk0288de02017-02-23 14:48:05 -0500242 when(mServiceState.getDataNetworkType())
Jason Monk67b2c162016-01-12 10:24:09 -0500243 .thenReturn(TelephonyManager.NETWORK_TYPE_HSPA);
244 updateServiceState();
Amin Shaikhd64e6262018-03-08 10:08:13 -0500245 verifyDataIndicators(TelephonyIcons.ICON_H);
Jason Monk67b2c162016-01-12 10:24:09 -0500246 }
247
Geoffrey Pitsch2c403db2016-08-26 09:09:39 -0400248 @Test
Jason Monkf13b4b32014-11-07 16:39:34 -0500249 public void testDataActivity() {
250 setupDefaultSignal();
251
252 testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false);
253 testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false);
254 testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true);
255 testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true);
256 }
257
258 private void testDataActivity(int direction, boolean in, boolean out) {
259 updateDataActivity(direction);
260
Jason Monk26ad85a2016-12-08 14:45:42 -0500261 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON, true,
Jason Monk7e6c83c2017-04-26 14:35:24 -0400262 DEFAULT_QS_SIGNAL_STRENGTH, DEFAULT_QS_ICON, in, out);
Jason Monkf13b4b32014-11-07 16:39:34 -0500263 }
264
Amin Shaikhd64e6262018-03-08 10:08:13 -0500265 private void verifyDataIndicators(int dataIcon) {
Jason Monk26ad85a2016-12-08 14:45:42 -0500266 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon,
Amin Shaikhd64e6262018-03-08 10:08:13 -0500267 true, DEFAULT_QS_SIGNAL_STRENGTH, dataIcon, false,
Jason Monkb5746272014-11-12 16:50:31 -0500268 false);
Jason Monkf13b4b32014-11-07 16:39:34 -0500269 }
Jason Monkf13b4b32014-11-07 16:39:34 -0500270}