• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static android.os.Build.VERSION_CODES.O;
4 
5 import android.net.wifi.aware.AttachCallback;
6 import android.net.wifi.aware.DiscoverySessionCallback;
7 import android.net.wifi.aware.PublishConfig;
8 import android.net.wifi.aware.PublishDiscoverySession;
9 import android.net.wifi.aware.SubscribeConfig;
10 import android.net.wifi.aware.SubscribeDiscoverySession;
11 import android.net.wifi.aware.WifiAwareManager;
12 import android.net.wifi.aware.WifiAwareSession;
13 import android.os.Binder;
14 import android.os.Handler;
15 import android.os.Looper;
16 import org.robolectric.annotation.Implementation;
17 import org.robolectric.annotation.Implements;
18 
19 /** Shadow Implementation of {@link android.net.wifi.aware.WifiAwareManager} */
20 @Implements(value = WifiAwareManager.class, minSdk = O)
21 public class ShadowWifiAwareManager {
22   private boolean available = true;
23   private WifiAwareSession session;
24   private boolean sessionDetached = true;
25   private PublishDiscoverySession discoverySessionToPublish;
26   private SubscribeDiscoverySession discoverySessionToSubscribe;
27 
28   @Implementation
isAvailable()29   protected boolean isAvailable() {
30     return available;
31   }
32 
33   @Implementation
attach(AttachCallback callback, Handler handler)34   protected void attach(AttachCallback callback, Handler handler) {
35     if (available && sessionDetached) {
36       sessionDetached = false;
37       handler.post(() -> callback.onAttached(session));
38     } else if (available && !sessionDetached) {
39       return;
40     } else {
41       handler.post(callback::onAttachFailed);
42     }
43   }
44 
45   @Implementation
publish( int clientId, Looper looper, PublishConfig publishConfig, DiscoverySessionCallback callback)46   protected void publish(
47       int clientId, Looper looper, PublishConfig publishConfig, DiscoverySessionCallback callback) {
48     if (available) {
49       Handler handler = new Handler(looper);
50       handler.post(() -> callback.onPublishStarted(discoverySessionToPublish));
51     }
52   }
53 
54   @Implementation
subscribe( int clientId, Looper looper, SubscribeConfig subscribeConfig, DiscoverySessionCallback callback)55   protected void subscribe(
56       int clientId,
57       Looper looper,
58       SubscribeConfig subscribeConfig,
59       DiscoverySessionCallback callback) {
60     if (available) {
61       Handler handler = new Handler(looper);
62       handler.post(() -> callback.onSubscribeStarted(discoverySessionToSubscribe));
63     }
64   }
65 
66   /** Returns a new instance of PublishDiscoverySession. */
newPublishDiscoverySession( WifiAwareManager manager, int clientId, int sessionId)67   public static PublishDiscoverySession newPublishDiscoverySession(
68       WifiAwareManager manager, int clientId, int sessionId) {
69     return new PublishDiscoverySession(manager, clientId, sessionId);
70   }
71 
72   /** Returns a new instance of SubscribeDiscoverySession. */
newSubscribeDiscoverySession( WifiAwareManager manager, int clientId, int sessionId)73   public static SubscribeDiscoverySession newSubscribeDiscoverySession(
74       WifiAwareManager manager, int clientId, int sessionId) {
75     return new SubscribeDiscoverySession(manager, clientId, sessionId);
76   }
77 
78   /** Returns a new instance of WifiAwareSession. */
newWifiAwareSession( WifiAwareManager manager, Binder binder, int clientId)79   public static WifiAwareSession newWifiAwareSession(
80       WifiAwareManager manager, Binder binder, int clientId) {
81     return new WifiAwareSession(manager, binder, clientId);
82   }
83 
84   /** Sets the availability of the wifiAwareManager. */
setAvailable(boolean available)85   public void setAvailable(boolean available) {
86     this.available = available;
87   }
88 
89   /** Sets parameter to pass to AttachCallback#onAttach(WifiAwareSession session) */
setWifiAwareSession(WifiAwareSession session)90   public void setWifiAwareSession(WifiAwareSession session) {
91     this.session = session;
92   }
93 
94   /** Sets the boolean value indicating if a wifiAwareSession has been detached. */
setSessionDetached(boolean sessionDetached)95   public void setSessionDetached(boolean sessionDetached) {
96     this.sessionDetached = sessionDetached;
97   }
98 
99   /**
100    * Sets parameter to pass to DiscoverySessionCallback#onPublishStarted(PublishDiscoverySession)
101    */
setDiscoverySessionToPublish(PublishDiscoverySession publishDiscoverySession)102   public void setDiscoverySessionToPublish(PublishDiscoverySession publishDiscoverySession) {
103     this.discoverySessionToPublish = publishDiscoverySession;
104   }
105 
106   /**
107    * Sets param to pass to DiscoverySessionCallback#onSubscribeStarted(SubscribeDiscoverySession)
108    */
setDiscoverySessionToSubscribe(SubscribeDiscoverySession subscribeDiscoverySession)109   public void setDiscoverySessionToSubscribe(SubscribeDiscoverySession subscribeDiscoverySession) {
110     this.discoverySessionToSubscribe = subscribeDiscoverySession;
111   }
112 }
113