diff --git a/wifi/api/current.txt b/wifi/api/current.txt index 1ece79a374592a595322509bd012ed5816612f07..c6be9bf1af7fc03c8bb965ea1d70ba7e9ff809c7 100644 --- a/wifi/api/current.txt +++ b/wifi/api/current.txt @@ -270,7 +270,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); @@ -322,7 +322,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 257f9d53e59f143529415280ff11b9e49554685b..b7a1e4a84d92a779a37ce34aaa25f305e92b49dc 100644 --- a/wifi/api/system-current.txt +++ b/wifi/api/system-current.txt @@ -441,7 +441,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 6bd1ce54dc5b1d661a53ec0dbe03193badfa4b59..39a5a7d93b5bcaae63b978b8b4632077ddabcbf8 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; @@ -40,8 +41,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 6496cc7a3ba316b11e0fc9354dd06b7bf2d391da..c25e18623900e59fba89f1245c1351506e74c482 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -35,9 +35,11 @@ import android.app.ActivityManager; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; 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; @@ -2858,15 +2860,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(),