1 package org.robolectric.shadows; 2 3 import static org.robolectric.util.reflector.Reflector.reflector; 4 5 import android.net.wifi.SupplicantState; 6 import android.net.wifi.WifiInfo; 7 import android.net.wifi.WifiSsid; 8 import java.net.InetAddress; 9 import org.robolectric.annotation.Implementation; 10 import org.robolectric.annotation.Implements; 11 import org.robolectric.annotation.RealObject; 12 import org.robolectric.util.ReflectionHelpers; 13 import org.robolectric.util.reflector.Direct; 14 import org.robolectric.util.reflector.ForType; 15 import org.robolectric.util.reflector.Static; 16 import org.robolectric.util.reflector.WithType; 17 18 @Implements(WifiInfo.class) 19 public class ShadowWifiInfo { 20 newInstance()21 public static WifiInfo newInstance() { 22 return ReflectionHelpers.callConstructor(WifiInfo.class); 23 } 24 25 @RealObject WifiInfo realObject; 26 27 @Implementation setInetAddress(InetAddress address)28 public void setInetAddress(InetAddress address) { 29 reflector(WifiInfoReflector.class, realObject).setInetAddress(address); 30 } 31 32 @Implementation setMacAddress(String newMacAddress)33 public void setMacAddress(String newMacAddress) { 34 reflector(WifiInfoReflector.class, realObject).setMacAddress(newMacAddress); 35 } 36 setSSID(String ssid)37 public void setSSID(String ssid) { 38 reflector(WifiInfoReflector.class, realObject).setSSID(getWifiSsid(ssid)); 39 } 40 getWifiSsid(String ssid)41 private static Object getWifiSsid(String ssid) { 42 WifiSsid wifiSsid; 43 if (ssid.startsWith("0x")) { 44 wifiSsid = reflector(WifiSsidReflector.class).createFromHex(ssid); 45 } else { 46 wifiSsid = reflector(WifiSsidReflector.class).createFromAsciiEncoded(ssid); 47 } 48 return wifiSsid; 49 } 50 51 @Implementation setBSSID(String bssid)52 public void setBSSID(String bssid) { 53 reflector(WifiInfoReflector.class, realObject).setBSSID(bssid); 54 } 55 56 @Implementation setSupplicantState(SupplicantState state)57 public void setSupplicantState(SupplicantState state) { 58 reflector(WifiInfoReflector.class, realObject).setSupplicantState(state); 59 } 60 61 @Implementation setRssi(int rssi)62 public void setRssi(int rssi) { 63 reflector(WifiInfoReflector.class, realObject).setRssi(rssi); 64 } 65 66 @Implementation setLinkSpeed(int linkSpeed)67 public void setLinkSpeed(int linkSpeed) { 68 reflector(WifiInfoReflector.class, realObject).setLinkSpeed(linkSpeed); 69 } 70 71 @Implementation setFrequency(int frequency)72 public void setFrequency(int frequency) { 73 reflector(WifiInfoReflector.class, realObject).setFrequency(frequency); 74 } 75 76 @Implementation setNetworkId(int id)77 public void setNetworkId(int id) { 78 reflector(WifiInfoReflector.class, realObject).setNetworkId(id); 79 } 80 81 @ForType(WifiInfo.class) 82 interface WifiInfoReflector { 83 84 @Direct setInetAddress(InetAddress address)85 void setInetAddress(InetAddress address); 86 87 @Direct setMacAddress(String newMacAddress)88 void setMacAddress(String newMacAddress); 89 90 @Direct setSSID(String ssid)91 void setSSID(String ssid); 92 setSSID(@ithType"android.net.wifi.WifiSsid") Object ssid)93 void setSSID(@WithType("android.net.wifi.WifiSsid") Object ssid); 94 95 @Direct setBSSID(String bssid)96 void setBSSID(String bssid); 97 98 @Direct setSupplicantState(SupplicantState state)99 void setSupplicantState(SupplicantState state); 100 101 @Direct setRssi(int rssi)102 void setRssi(int rssi); 103 104 @Direct setLinkSpeed(int linkSpeed)105 void setLinkSpeed(int linkSpeed); 106 107 @Direct setNetworkId(int id)108 void setNetworkId(int id); 109 110 @Direct setFrequency(int frequency)111 void setFrequency(int frequency); 112 } 113 114 @ForType(WifiSsid.class) 115 interface WifiSsidReflector { 116 // pre-T 117 @Static createFromHex(String hexStr)118 WifiSsid createFromHex(String hexStr); 119 120 // pre-T 121 @Static createFromAsciiEncoded(String asciiEncoded)122 WifiSsid createFromAsciiEncoded(String asciiEncoded); 123 } 124 } 125