diff options
author | Roshan Pius <rpius@google.com> | 2020-08-14 07:17:59 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2020-12-23 00:19:06 -0800 |
commit | 6c5626edfc621e190408101e95c225549afa9943 (patch) | |
tree | 7228998725dde7f2a79a637e2c76126bc39e6e2a /wifi | |
parent | f2fdcff51e6de1db97dbd29f85787dcd6e29b25f (diff) |
Convert WifiInfo to TransportInfo
Also, deprecate WifiManager.getConnectionInfo() and add a note to
help apps to migrate. The deprecation is purely cosmetic, no plans to
remove any existing functionality from the WifiManager API.
Bug: 162602799
Test: Compiles
Change-Id: I12c473185dc5518f5684e83c2f49e07271738cb5
Merged-In: I12c473185dc5518f5684e83c2f49e07271738cb5
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/api/current.txt | 4 | ||||
-rw-r--r-- | wifi/api/system-current.txt | 2 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiInfo.java | 12 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiManager.java | 52 |
4 files changed, 60 insertions, 10 deletions
diff --git a/wifi/api/current.txt b/wifi/api/current.txt index 53c3b33d9845..28224cf4ef2d 100644 --- a/wifi/api/current.txt +++ b/wifi/api/current.txt @@ -264,7 +264,7 @@ package android.net.wifi { field public static final int SIM = 5; // 0x5 } - public class WifiInfo implements android.os.Parcelable { + public class WifiInfo implements android.os.Parcelable android.net.TransportInfo { method public int describeContents(); method public String getBSSID(); method public static android.net.NetworkInfo.DetailedState getDetailedStateOf(android.net.wifi.SupplicantState); @@ -315,7 +315,7 @@ package android.net.wifi { method @Deprecated public boolean disconnect(); method @Deprecated public boolean enableNetwork(int, boolean); method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public java.util.List<android.net.wifi.WifiConfiguration> getConfiguredNetworks(); - method public android.net.wifi.WifiInfo getConnectionInfo(); + method @Deprecated public android.net.wifi.WifiInfo getConnectionInfo(); method public android.net.DhcpInfo getDhcpInfo(); method public int getMaxNumberOfNetworkSuggestionsPerApp(); method @IntRange(from=0) public int getMaxSignalLevel(); diff --git a/wifi/api/system-current.txt b/wifi/api/system-current.txt index 07793c1eb02a..afc39b97501f 100644 --- a/wifi/api/system-current.txt +++ b/wifi/api/system-current.txt @@ -401,7 +401,7 @@ package android.net.wifi { method public static void registerServiceWrappers(); } - public class WifiInfo implements android.os.Parcelable { + public class WifiInfo implements android.os.Parcelable android.net.TransportInfo { method public double getLostTxPacketsPerSecond(); method @Nullable public String getRequestingPackageName(); method public double getRetriedTxPacketsPerSecond(); diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index 53883674e058..cc437a8e552a 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; import android.net.NetworkInfo.DetailedState; +import android.net.TransportInfo; import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -38,8 +39,17 @@ import java.util.Locale; /** * Describes the state of any Wi-Fi connection that is active or * is in the process of being set up. + * + * In the connected state, access to location sensitive fields requires + * the same permissions as {@link WifiManager#getScanResults}. If such access is not allowed, + * {@link #getSSID} will return {@link WifiManager#UNKNOWN_SSID} and + * {@link #getBSSID} will return {@code "02:00:00:00:00:00"}. + * {@link #getNetworkId()} will return {@code -1}. + * {@link #getPasspointFqdn()} will return null. + * {@link #getPasspointProviderFriendlyName()} will return null. */ -public class WifiInfo implements Parcelable { +public class WifiInfo implements TransportInfo, Parcelable { + // TODO(b/162602799): Implement equals/hahscode methods. private static final String TAG = "WifiInfo"; /** * This is the map described in the Javadoc comment above. The positions diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index ccf8a80665aa..9844e4b3ec7f 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -36,9 +36,11 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.pm.ParceledListSlice; import android.net.ConnectivityManager; +import android.net.ConnectivityManager.NetworkCallback; import android.net.DhcpInfo; import android.net.MacAddress; import android.net.Network; +import android.net.NetworkCapabilities; import android.net.NetworkStack; import android.net.wifi.hotspot2.IProvisioningCallback; import android.net.wifi.hotspot2.OsuProvider; @@ -2744,15 +2746,53 @@ public class WifiManager { /** * Return dynamic information about the current Wi-Fi connection, if any is active. * <p> - * In the connected state, access to the SSID and BSSID requires - * the same permissions as {@link #getScanResults}. If such access is not allowed, - * {@link WifiInfo#getSSID} will return {@link #UNKNOWN_SSID} and - * {@link WifiInfo#getBSSID} will return {@code "02:00:00:00:00:00"}. - * {@link WifiInfo#getPasspointFqdn()} will return null. - * {@link WifiInfo#getPasspointProviderFriendlyName()} will return null. * * @return the Wi-Fi information, contained in {@link WifiInfo}. + * + * @deprecated Starting with {@link Build.VERSION_CODES#S}, WifiInfo retrieval is moved to + * {@link ConnectivityManager} API surface. WifiInfo is attached in + * {@link NetworkCapabilities#getTransportInfo()} which is available via callback in + * {@link NetworkCallback#onCapabilitiesChanged(Network, NetworkCapabilities)} or on-demand from + * {@link ConnectivityManager#getNetworkCapabilities(Network)}. + * + *</p> + * Usage example: + * <pre>{@code + * final NetworkRequest request = + * new NetworkRequest.Builder() + * .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + * .build(); + * final ConnectivityManager connectivityManager = + * context.getSystemService(ConnectivityManager.class); + * final NetworkCallback networkCallback = new NetworkCallback() { + * ... + * {@literal @}Override + * void onAvailable(Network network) {} + * + * {@literal @}Override + * void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { + * WifiInfo wifiInfo = (WifiInfo) networkCapabilities.getTransportInfo(); + * } + * // etc. + * }; + * connectivityManager.requestNetwork(request, networkCallback); // For request + * connectivityManager.registerNetworkCallback(request, networkCallback); // For listen + * }</pre> + * <p> + * <b>Compatibility Note:</b> + * <li>Apps can continue using this API, however newer features + * such as ability to mask out location sensitive data in WifiInfo will not be supported + * via this API. </li> + * <li>On devices supporting concurrent connections (indicated via + * {@link #isMultiStaConcurrencySupported()}), this API will return the details + * of the internet providing connection (if any) to all apps, except for the apps that triggered + * the creation of the concurrent connection. For such apps, this API will return the details of + * the connection they created. For ex: apps using {@link WifiNetworkSpecifier} will + * will trigger a concurrent connection on supported devices and hence this API will provide + * details of their peer to peer connection (not the internet providing connection). </li> + * </p> */ + @Deprecated public WifiInfo getConnectionInfo() { try { return mService.getConnectionInfo(mContext.getOpPackageName(), |