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