1 package org.robolectric.shadows; 2 3 import static android.os.Build.VERSION_CODES.R; 4 import static org.robolectric.util.reflector.Reflector.reflector; 5 6 import android.net.wifi.SecurityParams; 7 import android.net.wifi.WifiConfiguration; 8 import com.google.common.collect.ImmutableSet; 9 import java.util.List; 10 import java.util.Set; 11 import java.util.stream.Collectors; 12 import org.robolectric.RuntimeEnvironment; 13 import org.robolectric.annotation.Implementation; 14 import org.robolectric.annotation.Implements; 15 import org.robolectric.annotation.RealObject; 16 import org.robolectric.util.reflector.Accessor; 17 import org.robolectric.util.reflector.Direct; 18 import org.robolectric.util.reflector.ForType; 19 20 /** Shadow Implementation of {@link android.net.wifi.WifiConfiguration} */ 21 @Implements(value = WifiConfiguration.class) 22 public class ShadowWifiConfiguration { 23 @RealObject private WifiConfiguration realObject; 24 25 private int securityType = -1; // for Android R 26 27 /* Returns a copy of the {@link WifiConfiguration} it shadows. */ copy()28 public WifiConfiguration copy() { 29 return new WifiConfiguration(realObject); 30 } 31 32 @Implementation(minSdk = R, maxSdk = R) setSecurityParams(int securityType)33 protected void setSecurityParams(int securityType) { 34 reflector(WifiConfigurationReflector.class, realObject).setSecurityParams(securityType); 35 this.securityType = securityType; 36 } 37 38 /** Returns the security type set by {@code setSecurityParams}. */ getSecurityTypes()39 public Set<Integer> getSecurityTypes() { 40 if (RuntimeEnvironment.getApiLevel() == R) { 41 return ImmutableSet.of(securityType); 42 } else { 43 List<Object> params = 44 reflector(WifiConfigurationReflector.class, realObject).getSecurityParams(); 45 return params.stream() 46 .map(s -> ((SecurityParams) s).getSecurityType()) 47 .collect(Collectors.toSet()); 48 } 49 } 50 51 @ForType(WifiConfiguration.class) 52 interface WifiConfigurationReflector { 53 @Accessor("mSecurityParamsList") getSecurityParams()54 List<Object> getSecurityParams(); 55 56 @Direct setSecurityParams(int securityType)57 void setSecurityParams(int securityType); 58 } 59 } 60