1 package com.android.systemui.statusbar.policy; 2 3 import static org.mockito.Matchers.anyInt; 4 import static org.mockito.Mockito.mock; 5 import static org.mockito.Mockito.when; 6 7 import android.net.NetworkCapabilities; 8 import android.os.Looper; 9 import android.support.test.runner.AndroidJUnit4; 10 import android.telephony.TelephonyManager; 11 import android.test.suitebuilder.annotation.SmallTest; 12 13 import com.android.settingslib.net.DataUsageController; 14 15 import org.junit.Ignore; 16 import org.junit.Test; 17 import org.junit.runner.RunWith; 18 19 @SmallTest 20 @RunWith(AndroidJUnit4.class) 21 public class NetworkControllerDataTest extends NetworkControllerBaseTest { 22 23 @Test 24 public void test3gDataIcon() { 25 setupDefaultSignal(); 26 27 verifyDataIndicators(TelephonyIcons.ICON_3G, 28 TelephonyIcons.QS_DATA_3G); 29 } 30 31 @Test 32 public void test2gDataIcon() { 33 setupDefaultSignal(); 34 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 35 TelephonyManager.NETWORK_TYPE_GSM); 36 37 verifyDataIndicators(TelephonyIcons.ICON_G, 38 TelephonyIcons.QS_DATA_G); 39 } 40 41 @Test 42 public void testCdmaDataIcon() { 43 setupDefaultSignal(); 44 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 45 TelephonyManager.NETWORK_TYPE_CDMA); 46 47 verifyDataIndicators(TelephonyIcons.ICON_1X, 48 TelephonyIcons.QS_DATA_1X); 49 } 50 51 @Test 52 public void testEdgeDataIcon() { 53 setupDefaultSignal(); 54 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 55 TelephonyManager.NETWORK_TYPE_EDGE); 56 57 verifyDataIndicators(TelephonyIcons.ICON_E, 58 TelephonyIcons.QS_DATA_E); 59 } 60 61 @Test 62 public void testLteDataIcon() { 63 setupDefaultSignal(); 64 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 65 TelephonyManager.NETWORK_TYPE_LTE); 66 67 verifyDataIndicators(TelephonyIcons.ICON_LTE, 68 TelephonyIcons.QS_DATA_LTE); 69 } 70 71 @Test 72 public void testHspaDataIcon() { 73 setupDefaultSignal(); 74 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 75 TelephonyManager.NETWORK_TYPE_HSPA); 76 77 verifyDataIndicators(TelephonyIcons.ICON_H, 78 TelephonyIcons.QS_DATA_H); 79 } 80 81 @Test 82 public void testWfcNoDataIcon() { 83 setupDefaultSignal(); 84 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 85 TelephonyManager.NETWORK_TYPE_IWLAN); 86 87 verifyDataIndicators(0, 0); 88 } 89 90 @Test 91 public void test4gDataIcon() { 92 // Switch to showing 4g icon and re-initialize the NetworkController. 93 mConfig.show4gForLte = true; 94 mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockNetworkScoreManager, 95 mMockTm, mMockWm, mMockSm, 96 mConfig, Looper.getMainLooper(), mCallbackHandler, 97 mock(AccessPointControllerImpl.class), 98 mock(DataUsageController.class), mMockSubDefaults, 99 mock(DeviceProvisionedController.class)); 100 setupNetworkController(); 101 102 setupDefaultSignal(); 103 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 104 TelephonyManager.NETWORK_TYPE_LTE); 105 106 verifyDataIndicators(TelephonyIcons.ICON_4G, 107 TelephonyIcons.QS_DATA_4G); 108 } 109 110 @Ignore("Flaky") 111 @Test 112 public void testDataDisabledIcon() { 113 setupNetworkController(); 114 when(mMockTm.getDataEnabled(mSubId)).thenReturn(false); 115 setupDefaultSignal(); 116 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0); 117 setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false); 118 119 verifyDataIndicators(TelephonyIcons.ICON_DATA_DISABLED, 120 TelephonyIcons.QS_ICON_DATA_DISABLED); 121 } 122 123 @Test 124 public void testDataDisabledIcon_UserNotSetup() { 125 setupNetworkController(); 126 when(mMockTm.getDataEnabled(mSubId)).thenReturn(false); 127 setupDefaultSignal(); 128 updateDataConnectionState(TelephonyManager.DATA_DISCONNECTED, 0); 129 setConnectivity(NetworkCapabilities.TRANSPORT_CELLULAR, false, false); 130 when(mMockProvisionController.isUserSetup(anyInt())).thenReturn(false); 131 mUserCallback.onUserSetupChanged(); 132 133 // Don't show the X until the device is setup. 134 verifyDataIndicators(0, 0); 135 } 136 137 @Test 138 public void test4gDataIconConfigChange() { 139 setupDefaultSignal(); 140 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 141 TelephonyManager.NETWORK_TYPE_LTE); 142 143 // Switch to showing 4g icon and re-initialize the NetworkController. 144 mConfig.show4gForLte = true; 145 // Can't send the broadcast as that would actually read the config from 146 // the context. Instead we'll just poke at a function that does all of 147 // the after work. 148 mNetworkController.handleConfigurationChanged(); 149 150 verifyDataIndicators(TelephonyIcons.ICON_4G, 151 TelephonyIcons.QS_DATA_4G); 152 } 153 154 @Test 155 public void testDataChangeWithoutConnectionState() { 156 setupDefaultSignal(); 157 updateDataConnectionState(TelephonyManager.DATA_CONNECTED, 158 TelephonyManager.NETWORK_TYPE_LTE); 159 160 verifyDataIndicators(TelephonyIcons.ICON_LTE, 161 TelephonyIcons.QS_DATA_LTE); 162 163 when(mServiceState.getDataNetworkType()) 164 .thenReturn(TelephonyManager.NETWORK_TYPE_HSPA); 165 updateServiceState(); 166 verifyDataIndicators(TelephonyIcons.ICON_H, 167 TelephonyIcons.QS_DATA_H); 168 } 169 170 @Test 171 public void testDataActivity() { 172 setupDefaultSignal(); 173 174 testDataActivity(TelephonyManager.DATA_ACTIVITY_NONE, false, false); 175 testDataActivity(TelephonyManager.DATA_ACTIVITY_IN, true, false); 176 testDataActivity(TelephonyManager.DATA_ACTIVITY_OUT, false, true); 177 testDataActivity(TelephonyManager.DATA_ACTIVITY_INOUT, true, true); 178 } 179 180 private void testDataActivity(int direction, boolean in, boolean out) { 181 updateDataActivity(direction); 182 183 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, DEFAULT_ICON, true, 184 DEFAULT_QS_SIGNAL_STRENGTH, DEFAULT_QS_ICON, in, out); 185 } 186 187 private void verifyDataIndicators(int dataIcon, int qsDataIcon) { 188 verifyLastMobileDataIndicators(true, DEFAULT_SIGNAL_STRENGTH, dataIcon, 189 true, DEFAULT_QS_SIGNAL_STRENGTH, qsDataIcon, false, 190 false); 191 } 192 193 } 194