Home | History | Annotate | Download | only in policy
      1 package com.android.systemui.statusbar.policy;
      2 
      3 import android.content.Intent;
      4 import android.net.ConnectivityManager;
      5 import android.net.NetworkInfo;
      6 import android.net.wifi.WifiInfo;
      7 import android.net.wifi.WifiManager;
      8 
      9 import org.mockito.ArgumentCaptor;
     10 import org.mockito.Mockito;
     11 
     12 public class NetworkControllerWifiTest extends NetworkControllerBaseTest {
     13     // These match the constants in WifiManager and need to be kept up to date.
     14     private static final int MIN_RSSI = -100;
     15     private static final int MAX_RSSI = -55;
     16 
     17     public void testWifiIcon() {
     18         String testSsid = "Test SSID";
     19         setWifiEnabled(true);
     20         verifyLastWifiIcon(false, WifiIcons.WIFI_NO_NETWORK);
     21 
     22         setWifiState(true, testSsid);
     23         verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][0]);
     24 
     25         for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) {
     26             setWifiLevel(testLevel);
     27 
     28             setConnectivity(100, ConnectivityManager.TYPE_WIFI, true);
     29             verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]);
     30             setConnectivity(0, ConnectivityManager.TYPE_WIFI, true);
     31             verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[0][testLevel]);
     32         }
     33     }
     34 
     35     public void testQsWifiIcon() {
     36         String testSsid = "Test SSID";
     37 
     38         setWifiEnabled(false);
     39         verifyLastQsWifiIcon(false, false, WifiIcons.QS_WIFI_NO_NETWORK, null);
     40 
     41         setWifiEnabled(true);
     42         verifyLastQsWifiIcon(true, false, WifiIcons.QS_WIFI_NO_NETWORK, null);
     43 
     44         setWifiState(true, testSsid);
     45         for (int testLevel = 0; testLevel < WifiIcons.WIFI_LEVEL_COUNT; testLevel++) {
     46             setWifiLevel(testLevel);
     47 
     48             setConnectivity(100, ConnectivityManager.TYPE_WIFI, true);
     49             verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel],
     50                     testSsid);
     51             setConnectivity(0, ConnectivityManager.TYPE_WIFI, true);
     52             verifyLastQsWifiIcon(true, true, WifiIcons.QS_WIFI_SIGNAL_STRENGTH[0][testLevel],
     53                     testSsid);
     54         }
     55     }
     56 
     57     public void testQsDataDirection() {
     58         // Setup normal connection
     59         String testSsid = "Test SSID";
     60         int testLevel = 2;
     61         setWifiEnabled(true);
     62         setWifiState(true, testSsid);
     63         setWifiLevel(testLevel);
     64         setConnectivity(100, ConnectivityManager.TYPE_WIFI, true);
     65         verifyLastQsWifiIcon(true, true,
     66                 WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][testLevel], testSsid);
     67 
     68         setWifiActivity(WifiManager.DATA_ACTIVITY_NONE);
     69         verifyLastQsDataDirection(false, false);
     70         setWifiActivity(WifiManager.DATA_ACTIVITY_IN);
     71         verifyLastQsDataDirection(true, false);
     72         setWifiActivity(WifiManager.DATA_ACTIVITY_OUT);
     73         verifyLastQsDataDirection(false, true);
     74         setWifiActivity(WifiManager.DATA_ACTIVITY_INOUT);
     75         verifyLastQsDataDirection(true, true);
     76     }
     77 
     78     public void testRoamingIconDuringWifi() {
     79         // Setup normal connection
     80         String testSsid = "Test SSID";
     81         int testLevel = 2;
     82         setWifiEnabled(true);
     83         setWifiState(true, testSsid);
     84         setWifiLevel(testLevel);
     85         setConnectivity(100, ConnectivityManager.TYPE_WIFI, true);
     86         verifyLastWifiIcon(true, WifiIcons.WIFI_SIGNAL_STRENGTH[1][testLevel]);
     87 
     88         setupDefaultSignal();
     89         setGsmRoaming(true);
     90         // Still be on wifi though.
     91         setConnectivity(100, ConnectivityManager.TYPE_WIFI, true);
     92         verifyLastMobileDataIndicators(true,
     93                 TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH_ROAMING[1][DEFAULT_LEVEL],
     94                 TelephonyIcons.ROAMING_ICON);
     95     }
     96 
     97     protected void setWifiActivity(int activity) {
     98         // TODO: Not this, because this variable probably isn't sticking around.
     99         mNetworkController.mWifiSignalController.setActivity(activity);
    100     }
    101 
    102     protected void setWifiLevel(int level) {
    103         float amountPerLevel = (MAX_RSSI - MIN_RSSI) / (WifiIcons.WIFI_LEVEL_COUNT - 1);
    104         int rssi = (int)(MIN_RSSI + level * amountPerLevel);
    105         // Put RSSI in the middle of the range.
    106         rssi += amountPerLevel / 2;
    107         Intent i = new Intent(WifiManager.RSSI_CHANGED_ACTION);
    108         i.putExtra(WifiManager.EXTRA_NEW_RSSI, rssi);
    109         mNetworkController.onReceive(mContext, i);
    110     }
    111 
    112     protected void setWifiEnabled(boolean enabled) {
    113         Intent i = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION);
    114         i.putExtra(WifiManager.EXTRA_WIFI_STATE,
    115                 enabled ? WifiManager.WIFI_STATE_ENABLED : WifiManager.WIFI_STATE_DISABLED);
    116         mNetworkController.onReceive(mContext, i);
    117     }
    118 
    119     protected void setWifiState(boolean connected, String ssid) {
    120         Intent i = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    121         NetworkInfo networkInfo = Mockito.mock(NetworkInfo.class);
    122         Mockito.when(networkInfo.isConnected()).thenReturn(connected);
    123 
    124         WifiInfo wifiInfo = Mockito.mock(WifiInfo.class);
    125         Mockito.when(wifiInfo.getSSID()).thenReturn(ssid);
    126 
    127         i.putExtra(WifiManager.EXTRA_NETWORK_INFO, networkInfo);
    128         i.putExtra(WifiManager.EXTRA_WIFI_INFO, wifiInfo);
    129         mNetworkController.onReceive(mContext, i);
    130     }
    131 
    132     protected void verifyLastQsDataDirection(boolean in, boolean out) {
    133         ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
    134         ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
    135 
    136         Mockito.verify(mNetworkSignalChangedCallback, Mockito.atLeastOnce()).onWifiSignalChanged(
    137                 ArgumentCaptor.forClass(Boolean.class).capture(),
    138                 ArgumentCaptor.forClass(Boolean.class).capture(),
    139                 ArgumentCaptor.forClass(Integer.class).capture(),
    140                 inArg.capture(), outArg.capture(),
    141                 ArgumentCaptor.forClass(String.class).capture(),
    142                 ArgumentCaptor.forClass(String.class).capture());
    143         assertEquals("WiFi data in, in quick settings", in, (boolean) inArg.getValue());
    144         assertEquals("WiFi data out, in quick settings", out, (boolean) outArg.getValue());
    145     }
    146 
    147     protected void verifyLastQsWifiIcon(boolean enabled, boolean connected, int icon,
    148             String description) {
    149         ArgumentCaptor<Boolean> enabledArg = ArgumentCaptor.forClass(Boolean.class);
    150         ArgumentCaptor<Boolean> connectedArg = ArgumentCaptor.forClass(Boolean.class);
    151         ArgumentCaptor<Integer> iconArg = ArgumentCaptor.forClass(Integer.class);
    152         ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
    153 
    154         Mockito.verify(mNetworkSignalChangedCallback, Mockito.atLeastOnce()).onWifiSignalChanged(
    155                 enabledArg.capture(), connectedArg.capture(), iconArg.capture(),
    156                 ArgumentCaptor.forClass(Boolean.class).capture(),
    157                 ArgumentCaptor.forClass(Boolean.class).capture(),
    158                 ArgumentCaptor.forClass(String.class).capture(),
    159                 descArg.capture());
    160         assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue());
    161         assertEquals("WiFi connected, in quick settings", connected,
    162                 (boolean) connectedArg.getValue());
    163         assertEquals("WiFi signal, in quick settings", icon, (int) iconArg.getValue());
    164         assertEquals("WiFI desc (ssid), in quick settings", description,
    165                 (String) descArg.getValue());
    166     }
    167 
    168     protected void verifyLastWifiIcon(boolean visible, int icon) {
    169         ArgumentCaptor<Boolean> visibleArg = ArgumentCaptor.forClass(Boolean.class);
    170         ArgumentCaptor<Integer> iconArg = ArgumentCaptor.forClass(Integer.class);
    171 
    172         Mockito.verify(mSignalCluster, Mockito.atLeastOnce()).setWifiIndicators(
    173                 visibleArg.capture(), iconArg.capture(),
    174                 ArgumentCaptor.forClass(String.class).capture());
    175         assertEquals("WiFi visible, in status bar", visible, (boolean) visibleArg.getValue());
    176         assertEquals("WiFi signal, in status bar", icon, (int) iconArg.getValue());
    177     }
    178 }
    179