1f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkpackage com.android.systemui.statusbar.policy; 2f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 3f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkimport android.content.Intent; 433f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monkimport android.net.NetworkCapabilities; 5f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkimport android.net.NetworkInfo; 6f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkimport android.net.wifi.WifiInfo; 7f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkimport android.net.wifi.WifiManager; 8e427cb80762c5cd067f3c419eb0a427d077b3d95Jason Monkimport android.test.suitebuilder.annotation.SmallTest; 9f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 1033f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monkimport com.android.systemui.statusbar.policy.NetworkController.IconState; 1107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 12f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkimport org.mockito.ArgumentCaptor; 13f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkimport org.mockito.Mockito; 14f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 15e427cb80762c5cd067f3c419eb0a427d077b3d95Jason Monk@SmallTest 16f13b4b39f266e43239e40e3bf7d6997600555068Jason Monkpublic class NetworkControllerWifiTest extends NetworkControllerBaseTest { 17f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk // These match the constants in WifiManager and need to be kept up to date. 18f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk private static final int MIN_RSSI = -100; 19f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk private static final int MAX_RSSI = -55; 20f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 21f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk public void testWifiIcon() { 22f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk String testSsid = "Test SSID"; 23f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiEnabled(true); 24d2263cd9db36d5f74a124c5ffaf8594ef702408fJason Monk verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK); 25f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 26f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiState(true, testSsid); 27f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]); 28f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 29f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { 30f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiLevel(testLevel); 31f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 3233f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 33f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); 3433f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, false, true); 35f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]); 36f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 37f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 38f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 39f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk public void testQsWifiIcon() { 40f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk String testSsid = "Test SSID"; 41f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 42f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiEnabled(false); 43d2263cd9db36d5f74a124c5ffaf8594ef702408fJason Monk verifyLastQsWifiIcon(false, false, WifiIcons.QS_WIFI_NO_NETWORK, null); 44f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 45f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiEnabled(true); 46d2263cd9db36d5f74a124c5ffaf8594ef702408fJason Monk verifyLastQsWifiIcon(true, false, WifiIcons.QS_WIFI_NO_NETWORK, null); 47f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 48f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiState(true, testSsid); 49f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) { 50f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiLevel(testLevel); 51f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 5233f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 53f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], 54f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk testSsid); 5533f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, false, true); 56f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[0][testLevel], 57f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk testSsid); 58f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 59f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 60f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 61f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk public void testQsDataDirection() { 62f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk // Setup normal connection 63f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk String testSsid = "Test SSID"; 64f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk int testLevel = 2; 65f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiEnabled(true); 66f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiState(true, testSsid); 67f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiLevel(testLevel); 6833f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 69f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastQsWifiIcon(true, true, 70f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], testSsid); 71f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 72f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiActivity(WifiManager.DATA_ACTIVITY_NONE); 73f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastQsDataDirection(false, false); 74f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiActivity(WifiManager.DATA_ACTIVITY_IN); 75f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastQsDataDirection(true, false); 76f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiActivity(WifiManager.DATA_ACTIVITY_OUT); 77f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastQsDataDirection(false, true); 78f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiActivity(WifiManager.DATA_ACTIVITY_INOUT); 79f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastQsDataDirection(true, true); 80f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 81f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 82f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk public void testRoamingIconDuringWifi() { 83f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk // Setup normal connection 84f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk String testSsid = "Test SSID"; 85f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk int testLevel = 2; 86f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiEnabled(true); 87f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiState(true, testSsid); 88f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setWifiLevel(testLevel); 8933f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 90f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]); 91f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 92f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setupDefaultSignal(); 93f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk setGsmRoaming(true); 94f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk // Still be on wifi though. 9533f8ae7543fbf7d94266f0f1621ec873aa2542f1Jason Monk setConnectivity(NetworkCapabilities.TRANSPORT_WIFI, true, true); 96f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk verifyLastMobileDataIndicators(true, 97f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][DEFAULT_LEVEL], 98f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk TelephonyIcons.ROAMING_ICON); 99f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 100f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 101f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk protected void setWifiActivity(int activity) { 102f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk // TODO: Not this, because this variable probably isn't sticking around. 103d2263cd9db36d5f74a124c5ffaf8594ef702408fJason Monk mNetworkController.mWifiSignalController.setActivity(activity); 104f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 105f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 106f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk protected void setWifiLevel(int level) { 107f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk float amountPerLevel = (MAX_RSSI - MIN_RSSI) / (WifiIcons.WIFI_LEVEL_COUNT - 1); 108f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk int rssi = (int)(MIN_RSSI + level * amountPerLevel); 109f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk // Put RSSI in the middle of the range. 110f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk rssi += amountPerLevel / 2; 111f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk Intent i = new Intent(WifiManager.RSSI_CHANGED_ACTION); 112f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk i.putExtra(WifiManager.EXTRA_NEW_RSSI, rssi); 113f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk mNetworkController.onReceive(mContext, i); 114f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 115f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 116f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk protected void setWifiEnabled(boolean enabled) { 117f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION); 118f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk i.putExtra(WifiManager.EXTRA_WIFI_STATE, 119f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk enabled ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED); 120f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk mNetworkController.onReceive(mContext, i); 121f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 122f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 123f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk protected void setWifiState(boolean connected, String ssid) { 124f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION); 125f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk NetworkInfo networkInfo = Mockito.mock(NetworkInfo.class); 126f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk Mockito.when(networkInfo.isConnected()).thenReturn(connected); 127f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 128f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk WifiInfo wifiInfo = Mockito.mock(WifiInfo.class); 129f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk Mockito.when(wifiInfo.getSSID()).thenReturn(ssid); 130f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 131f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo); 132f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk i.putExtra(WifiManager.EXTRA_WIFI_INFO, wifiInfo); 133f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk mNetworkController.onReceive(mContext, i); 134f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 135f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 136f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk protected void verifyLastQsDataDirection(boolean in, boolean out) { 137f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class); 138f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class); 139f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 14007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( 14107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.anyBoolean(), Mockito.any(IconState.class), Mockito.any(IconState.class), 14207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk inArg.capture(), outArg.capture(), Mockito.anyString()); 143f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk assertEquals("WiFi data in, in quick settings", in, (boolean) inArg.getValue()); 144f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk assertEquals("WiFi data out, in quick settings", out, (boolean) outArg.getValue()); 145f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 146f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 147f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk protected void verifyLastQsWifiIcon(boolean enabled, boolean connected, int icon, 148f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk String description) { 14907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 150f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk ArgumentCaptor<Boolean> enabledArg = ArgumentCaptor.forClass(Boolean.class); 151f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class); 152f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 15307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( 15407b75fe65dcb5b8add8246654c65f95f1191933eJason Monk enabledArg.capture(), Mockito.any(IconState.class), 15507b75fe65dcb5b8add8246654c65f95f1191933eJason Monk iconArg.capture(), Mockito.anyBoolean(), 15607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.anyBoolean(), 157f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk descArg.capture()); 15807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState iconState = iconArg.getValue(); 159f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue()); 16007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals("WiFi connected, in quick settings", connected, iconState.visible); 16107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals("WiFi signal, in quick settings", icon, iconState.icon); 16207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals("WiFI desc (ssid), in quick settings", description, descArg.getValue()); 163f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 164f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk 165f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk protected void verifyLastWifiIcon(boolean visible, int icon) { 16607b75fe65dcb5b8add8246654c65f95f1191933eJason Monk ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class); 16707b75fe65dcb5b8add8246654c65f95f1191933eJason Monk 16807b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( 16907b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.anyBoolean(), iconArg.capture(), Mockito.any(IconState.class), 17007b75fe65dcb5b8add8246654c65f95f1191933eJason Monk Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.anyString()); 17107b75fe65dcb5b8add8246654c65f95f1191933eJason Monk IconState iconState = iconArg.getValue(); 17207b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals("WiFi visible, in status bar", visible, iconState.visible); 17307b75fe65dcb5b8add8246654c65f95f1191933eJason Monk assertEquals("WiFi signal, in status bar", icon, iconState.icon); 174f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk } 175f13b4b39f266e43239e40e3bf7d6997600555068Jason Monk} 176