From 4f5c0ccfda77864544c96ff6a9689410aff4f05d Mon Sep 17 00:00:00 2001 From: Peter Qiu Date: Thu, 19 Jan 2017 15:51:27 -0800 Subject: [PATCH] wifi: WifiManager API change for supporting Passpoint Release 2 The changes include: - Split WNM notifications intent to dedicated intent for each event: Deauth Imminent Notice and Subscription Remediation - Add intent for broadcast OSU Providers List - Update Passpoint icon intent definitions to conform to the API guide - Make WifiManager#queryPasspointIcon public All added/updated intents will required receiver to have android.Manifest.permission.ACCESS_WIFI_STATE in order to receive the intents. The deprecated hidden intent definitions will be removed once the WifiService is updated to use the new intents. Bug: 34198926 Test: make -j32 Change-Id: If28a5710f68271069c663a953538f920512e3240 Merged-In: Ic17eef8364d79144eb530c68c6877712efcb5209 --- api/current.txt | 17 +++ api/system-current.txt | 17 +++ api/test-current.txt | 17 +++ wifi/java/android/net/wifi/WifiManager.java | 131 ++++++++++++++++++-- 4 files changed, 175 insertions(+), 7 deletions(-) diff --git a/api/current.txt b/api/current.txt index 550e0188d5224..6977ed37d41df 100644 --- a/api/current.txt +++ b/api/current.txt @@ -24784,6 +24784,7 @@ package android.net.wifi { method public boolean isTdlsSupported(); method public boolean isWifiEnabled(); method public boolean pingSupplicant(); + method public void queryPasspointIcon(long, java.lang.String); method public boolean reassociate(); method public boolean reconnect(); method public boolean removeNetwork(int); @@ -24794,6 +24795,10 @@ package android.net.wifi { method public boolean startScan(); method public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback); method public int updateNetwork(android.net.wifi.WifiConfiguration); + field public static final java.lang.String ACTION_PASSPOINT_DEAUTH_IMMINENT = "android.net.wifi.action.PASSPOINT_DEAUTH_IMMINENT"; + field public static final java.lang.String ACTION_PASSPOINT_ICON = "android.net.wifi.action.PASSPOINT_ICON"; + field public static final java.lang.String ACTION_PASSPOINT_OSU_PROVIDERS_LIST = "android.net.wifi.action.PASSPOINT_OSU_PROVIDERS_LIST"; + field public static final java.lang.String ACTION_PASSPOINT_SUBSCRIPTION_REMEDIATION = "android.net.wifi.action.PASSPOINT_SUBSCRIPTION_REMEDIATION"; field public static final java.lang.String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK"; field public static final java.lang.String ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE = "android.net.wifi.action.REQUEST_SCAN_ALWAYS_AVAILABLE"; field public static final int ERROR_AUTHENTICATING = 1; // 0x1 @@ -24801,6 +24806,18 @@ package android.net.wifi { field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi"; field public static final java.lang.String EXTRA_NEW_STATE = "newState"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_BSSID = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_ESS = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_ESS"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REASON_URL = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REASON_URL"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_BSSID = "android.net.wifi.extra.PASSPOINT_ICON_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_DATA = "android.net.wifi.extra.PASSPOINT_ICON_DATA"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_FILENAME = "android.net.wifi.extra.PASSPOINT_ICON_FILENAME"; + field public static final java.lang.String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_BSSID = "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_DATA = "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_DATA"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL"; field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state"; field public static final java.lang.String EXTRA_RESULTS_UPDATED = "resultsUpdated"; field public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED = "connected"; diff --git a/api/system-current.txt b/api/system-current.txt index baf5d51335df9..ad157a7fdaeec 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -27167,6 +27167,7 @@ package android.net.wifi { method public boolean isWifiEnabled(); method public boolean isWifiScannerSupported(); method public boolean pingSupplicant(); + method public void queryPasspointIcon(long, java.lang.String); method public boolean reassociate(); method public boolean reconnect(); method public boolean removeNetwork(int); @@ -27181,6 +27182,10 @@ package android.net.wifi { method public boolean startScan(android.os.WorkSource); method public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback); method public int updateNetwork(android.net.wifi.WifiConfiguration); + field public static final java.lang.String ACTION_PASSPOINT_DEAUTH_IMMINENT = "android.net.wifi.action.PASSPOINT_DEAUTH_IMMINENT"; + field public static final java.lang.String ACTION_PASSPOINT_ICON = "android.net.wifi.action.PASSPOINT_ICON"; + field public static final java.lang.String ACTION_PASSPOINT_OSU_PROVIDERS_LIST = "android.net.wifi.action.PASSPOINT_OSU_PROVIDERS_LIST"; + field public static final java.lang.String ACTION_PASSPOINT_SUBSCRIPTION_REMEDIATION = "android.net.wifi.action.PASSPOINT_SUBSCRIPTION_REMEDIATION"; field public static final java.lang.String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK"; field public static final java.lang.String ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE = "android.net.wifi.action.REQUEST_SCAN_ALWAYS_AVAILABLE"; field public static final int CHANGE_REASON_ADDED = 0; // 0x0 @@ -27194,6 +27199,18 @@ package android.net.wifi { field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi"; field public static final java.lang.String EXTRA_NEW_STATE = "newState"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_BSSID = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_ESS = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_ESS"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REASON_URL = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REASON_URL"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_BSSID = "android.net.wifi.extra.PASSPOINT_ICON_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_DATA = "android.net.wifi.extra.PASSPOINT_ICON_DATA"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_FILENAME = "android.net.wifi.extra.PASSPOINT_ICON_FILENAME"; + field public static final java.lang.String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_BSSID = "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_DATA = "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_DATA"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL"; field public static final java.lang.String EXTRA_PREVIOUS_WIFI_AP_STATE = "previous_wifi_state"; field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state"; field public static final java.lang.String EXTRA_RESULTS_UPDATED = "resultsUpdated"; diff --git a/api/test-current.txt b/api/test-current.txt index 87ebde59e78b8..aaaf6f120d323 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -24857,6 +24857,7 @@ package android.net.wifi { method public boolean isTdlsSupported(); method public boolean isWifiEnabled(); method public boolean pingSupplicant(); + method public void queryPasspointIcon(long, java.lang.String); method public boolean reassociate(); method public boolean reconnect(); method public boolean removeNetwork(int); @@ -24867,6 +24868,10 @@ package android.net.wifi { method public boolean startScan(); method public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback); method public int updateNetwork(android.net.wifi.WifiConfiguration); + field public static final java.lang.String ACTION_PASSPOINT_DEAUTH_IMMINENT = "android.net.wifi.action.PASSPOINT_DEAUTH_IMMINENT"; + field public static final java.lang.String ACTION_PASSPOINT_ICON = "android.net.wifi.action.PASSPOINT_ICON"; + field public static final java.lang.String ACTION_PASSPOINT_OSU_PROVIDERS_LIST = "android.net.wifi.action.PASSPOINT_OSU_PROVIDERS_LIST"; + field public static final java.lang.String ACTION_PASSPOINT_SUBSCRIPTION_REMEDIATION = "android.net.wifi.action.PASSPOINT_SUBSCRIPTION_REMEDIATION"; field public static final java.lang.String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK"; field public static final java.lang.String ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE = "android.net.wifi.action.REQUEST_SCAN_ALWAYS_AVAILABLE"; field public static final int ERROR_AUTHENTICATING = 1; // 0x1 @@ -24874,6 +24879,18 @@ package android.net.wifi { field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo"; field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi"; field public static final java.lang.String EXTRA_NEW_STATE = "newState"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_BSSID = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_ESS = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_ESS"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REASON_URL = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REASON_URL"; + field public static final java.lang.String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY = "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_BSSID = "android.net.wifi.extra.PASSPOINT_ICON_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_DATA = "android.net.wifi.extra.PASSPOINT_ICON_DATA"; + field public static final java.lang.String EXTRA_PASSPOINT_ICON_FILENAME = "android.net.wifi.extra.PASSPOINT_ICON_FILENAME"; + field public static final java.lang.String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_BSSID = "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_DATA = "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_DATA"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD"; + field public static final java.lang.String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL = "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL"; field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state"; field public static final java.lang.String EXTRA_RESULTS_UPDATED = "resultsUpdated"; field public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED = "connected"; diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 3b6e76f766777..ab725e2f8a555 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -120,11 +120,7 @@ public class WifiManager { public static final String PASSPOINT_ICON_RECEIVED_ACTION = "android.net.wifi.PASSPOINT_ICON_RECEIVED"; /** @hide */ - public static final String EXTRA_PASSPOINT_ICON_BSSID = "bssid"; - /** @hide */ public static final String EXTRA_PASSPOINT_ICON_FILE = "file"; - /** @hide */ - public static final String EXTRA_PASSPOINT_ICON_DATA = "icon"; /** * Broadcast intent action indicating that the a Passpoint release @@ -158,6 +154,127 @@ public class WifiManager { * @hide */ public static final String EXTRA_PASSPOINT_WNM_DELAY = "delay"; + /** + * Broadcast intent action indicating that a Passpoint provider icon has been received. + * + * Receiver Required Permission: android.Manifest.permission.ACCESS_WIFI_STATE + */ + public static final String ACTION_PASSPOINT_ICON = + "android.net.wifi.action.PASSPOINT_ICON"; + /** + * BSSID of the sender. + * + * Type: long + */ + public static final String EXTRA_PASSPOINT_ICON_BSSID = + "android.net.wifi.extra.PASSPOINT_ICON_BSSID"; + /** + * Filename of the icon. + * + * Type: String + */ + public static final String EXTRA_PASSPOINT_ICON_FILENAME = + "android.net.wifi.extra.PASSPOINT_ICON_FILENAME"; + /** + * Binary blob of the icon. + * + * Type: byte[] + */ + public static final String EXTRA_PASSPOINT_ICON_DATA = + "android.net.wifi.extra.PASSPOINT_ICON_DATA"; + + /** + * Broadcast intent action indicating a Passpoint OSU Providers List element has been received. + * + * Receiver Required Permission: android.Manifest.permission.ACCESS_WIFI_STATE + */ + public static final String ACTION_PASSPOINT_OSU_PROVIDERS_LIST = + "android.net.wifi.action.PASSPOINT_OSU_PROVIDERS_LIST"; + /** + * BSSID of the sender. + * + * Type: long + */ + public static final String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_BSSID = + "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_BSSID"; + /** + * Raw data of OSU Providers List ANQP element. Refer to Section 4.8 of Hotspot 2.0 Release 2 + * Technical Specification for the exact data format. + * + * Type: byte[] + */ + public static final String EXTRA_PASSPOINT_OSU_PROVIDERS_LIST_DATA = + "android.net.wifi.extra.PASSPOINT_OSU_PROVIDERS_LIST_DATA"; + + /** + * Broadcast intent action indicating that a Passpoint Deauth Imminent frame has been received. + * + * Receiver Required Permission: android.Manifest.permission.ACCESS_WIFI_STATE + */ + public static final String ACTION_PASSPOINT_DEAUTH_IMMINENT = + "android.net.wifi.action.PASSPOINT_DEAUTH_IMMINENT"; + /** + * The BSSID of the sender. + * + * Type: long + */ + public static final String EXTRA_PASSPOINT_DEAUTH_IMMINENT_BSSID = + "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_BSSID"; + /** + * Flag indicating failure at BSS (Basic Service Set) or ESS (Extended Service Set) level. + * + * Type: boolean + */ + public static final String EXTRA_PASSPOINT_DEAUTH_IMMINENT_ESS = + "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_ESS"; + /** + * Delay in seconds that a device shall wait before attempting re-association to the same BSS + * or ESS (as indicated by {@link #EXTRA_PASSPOINT_DEAUTH_IMMINENT_ESS}. + * + * Type: int + */ + public static final String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY = + "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REAUTH_DELAY"; + /** + * URL that provides a webpage explaining the deauth reason. + * + * Type: String + */ + public static final String EXTRA_PASSPOINT_DEAUTH_IMMINENT_REASON_URL = + "android.net.wifi.extra.PASSPOINT_DEAUTH_IMMINENT_REASON_URL"; + + /** + * Broadcast intent action indicating a Passpoint subscription remediation frame has been + * received. + * + * Receiver Required Permission: android.Manifest.permission.ACCESS_WIFI_STATE + */ + public static final String ACTION_PASSPOINT_SUBSCRIPTION_REMEDIATION = + "android.net.wifi.action.PASSPOINT_SUBSCRIPTION_REMEDIATION"; + /** + * The BSSID of the sender. + * + * Type: long + */ + public static final String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID = + "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_BSSID"; + /** + * The protocol supported by the subscription remediation server. The possible values are: + * 0 - OMA DM + * 1 - SOAP XML SPP + * + * Type: int + */ + public static final String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD = + "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_METHOD"; + /** + * URL of the subscription remediation server. + * + * Type: String + */ + public static final String EXTRA_PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL = + "android.net.wifi.extra.PASSPOINT_SUBSCRIPTION_REMEDIATION_SERVER_URL"; + /** * Broadcast intent action indicating that Wi-Fi has been enabled, disabled, * enabling, disabling, or unknown. One extra provides this state as an int. @@ -898,10 +1015,10 @@ public class WifiManager { } /** - * Query for a Hotspot 2.0 release 2 OSU icon + * Query for a Hotspot 2.0 release 2 OSU icon file. + * * @param bssid The BSSID of the AP - * @param fileName Icon file name - * @hide + * @param fileName File name of the icon to query */ public void queryPasspointIcon(long bssid, String fileName) { try {