• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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