From 4a2a0399de1c795d4135dc012d343e60816ba409 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: 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 637cdac5b4fb0..f5f04855cdca6 100644 --- a/api/current.txt +++ b/api/current.txt @@ -25322,6 +25322,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); @@ -25332,6 +25333,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 @@ -25339,6 +25344,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 bafc3657cf8f5..99795b5706031 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -27746,6 +27746,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); @@ -27760,6 +27761,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 @@ -27773,6 +27778,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 c4081f0d4b4d4..625554a269d42 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -25412,6 +25412,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); @@ -25422,6 +25423,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 @@ -25429,6 +25434,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 {