summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Etan Cohen <etancohen@google.com> 2016-03-23 11:40:26 -0700
committer Etan Cohen <etancohen@google.com> 2016-04-08 10:18:37 -0700
commitd3137af10291ff888125de747d9ee05f73f3fd8e (patch)
treecc3813eb00b761ad11b29cbb1c97aecc18055f64
parent65f4b145454b05da187068cafc3418f19ed3f2d2 (diff)
[NAN] Add master switch to enable/disable usage of NAN APIs.
Add master switch to enable/disable usage of NAN. Tie into Wi-Fi state machine (to enable/disable based on Wi-Fi enable/disable). Dispatch broadcasts when NAN status changes. Bug: 27698011 Change-Id: Iea36388443ff8d0dc26a280220022c6bdba6a0c8
-rw-r--r--core/res/AndroidManifest.xml1
-rw-r--r--wifi/java/android/net/wifi/nan/IWifiNanManager.aidl5
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanManager.java82
3 files changed, 88 insertions, 0 deletions
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 69af423fdc4c..e85f8dd9c6eb 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -257,6 +257,7 @@
<protected-broadcast android:name="android.net.wifi.CONFIGURED_NETWORKS_CHANGE" />
<protected-broadcast android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
<protected-broadcast android:name="android.net.wifi.supplicant.STATE_CHANGE" />
+ <protected-broadcast android:name="android.net.wifi.nan.STATE_CHANGED" />
<protected-broadcast android:name="android.net.wifi.p2p.STATE_CHANGED" />
<protected-broadcast android:name="android.net.wifi.p2p.DISCOVERY_STATE_CHANGE" />
<protected-broadcast android:name="android.net.wifi.p2p.THIS_DEVICE_CHANGED" />
diff --git a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
index 29f14da083fd..ea7906c4982e 100644
--- a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
+++ b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
@@ -31,6 +31,11 @@ import android.net.wifi.nan.SubscribeConfig;
*/
interface IWifiNanManager
{
+ // NAN API
+ void enableUsage();
+ void disableUsage();
+ boolean isUsageEnabled();
+
// client API
int connect(in IBinder binder, in IWifiNanEventCallback callback,
in ConfigRequest configRequest);
diff --git a/wifi/java/android/net/wifi/nan/WifiNanManager.java b/wifi/java/android/net/wifi/nan/WifiNanManager.java
index 1c333f3bb8cf..eec9972c71c4 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanManager.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanManager.java
@@ -16,6 +16,8 @@
package android.net.wifi.nan;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
@@ -49,6 +51,40 @@ public class WifiNanManager {
private static final boolean DBG = false;
private static final boolean VDBG = false; // STOPSHIP if true
+ /**
+ * Broadcast intent action to indicate whether Wi-Fi NAN is enabled or
+ * disabled. An extra {@link #EXTRA_WIFI_STATE} provides the state
+ * information as int.
+ *
+ * @see #EXTRA_WIFI_STATE
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String WIFI_NAN_STATE_CHANGED_ACTION = "android.net.wifi.nan.STATE_CHANGED";
+
+ /**
+ * The lookup key for an int that indicates whether Wi-Fi NAN is enabled or
+ * disabled. Retrieve it with
+ * {@link android.content.Intent#getIntExtra(String,int)}.
+ *
+ * @see #WIFI_NAN_STATE_DISABLED
+ * @see #WIFI_NAN_STATE_ENABLED
+ */
+ public static final String EXTRA_WIFI_STATE = "wifi_nan_state";
+
+ /**
+ * Wi-Fi NAN is disabled.
+ *
+ * @see #WIFI_NAN_STATE_CHANGED_ACTION
+ */
+ public static final int WIFI_NAN_STATE_DISABLED = 1;
+
+ /**
+ * Wi-Fi NAN is enabled.
+ *
+ * @see #WIFI_NAN_STATE_CHANGED_ACTION
+ */
+ public static final int WIFI_NAN_STATE_ENABLED = 2;
+
private final IWifiNanManager mService;
/*
@@ -84,6 +120,52 @@ public class WifiNanManager {
}
/**
+ * Enable the usage of the NAN API. Doesn't actually turn on NAN cluster
+ * formation - that only happens when a connection is made.
+ *
+ * @hide PROPOSED_NAN_SYSTEM_API
+ */
+ public void enableUsage() {
+ try {
+ mService.enableUsage();
+ } catch (RemoteException e) {
+ e.rethrowAsRuntimeException();
+ }
+ }
+
+ /**
+ * Disable the usage of the NAN API. All attempts to connect() will be
+ * rejected. All open connections and sessions will be terminated. The
+ * {@link WifiNanEventCallback#onNanDown(int)} will be called with reason
+ * code {@link WifiNanEventCallback#REASON_REQUESTED}.
+ *
+ * @hide PROPOSED_NAN_SYSTEM_API
+ */
+ public void disableUsage() {
+ try {
+ mService.disableUsage();
+ } catch (RemoteException e) {
+ e.rethrowAsRuntimeException();
+ }
+ }
+
+ /**
+ * Returns the current status of NAN API: whether or not usage is enabled.
+ *
+ * @return A boolean indicating whether the app can use the NAN API (true)
+ * or not (false).
+ */
+ public boolean isUsageEnabled() {
+ try {
+ return mService.isUsageEnabled();
+ } catch (RemoteException e) {
+ e.rethrowAsRuntimeException();
+ }
+
+ return false;
+ }
+
+ /**
* Connect to the Wi-Fi NAN service - enabling the application to execute
* {@link WifiNanManager} APIs.
*