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
This commit is contained in:
Roshan Pius
2020-08-14 07:17:59 -07:00
parent f2fdcff51e
commit 6c5626edfc
4 changed files with 60 additions and 10 deletions

View File

@@ -264,7 +264,7 @@ package android.net.wifi {
field public static final int SIM = 5; // 0x5 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 int describeContents();
method public String getBSSID(); method public String getBSSID();
method public static android.net.NetworkInfo.DetailedState getDetailedStateOf(android.net.wifi.SupplicantState); 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 disconnect();
method @Deprecated public boolean enableNetwork(int, boolean); 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 @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 android.net.DhcpInfo getDhcpInfo();
method public int getMaxNumberOfNetworkSuggestionsPerApp(); method public int getMaxNumberOfNetworkSuggestionsPerApp();
method @IntRange(from=0) public int getMaxSignalLevel(); method @IntRange(from=0) public int getMaxSignalLevel();

View File

@@ -401,7 +401,7 @@ package android.net.wifi {
method public static void registerServiceWrappers(); 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 public double getLostTxPacketsPerSecond();
method @Nullable public String getRequestingPackageName(); method @Nullable public String getRequestingPackageName();
method public double getRetriedTxPacketsPerSecond(); method public double getRetriedTxPacketsPerSecond();

View File

@@ -22,6 +22,7 @@ import android.annotation.Nullable;
import android.annotation.SystemApi; import android.annotation.SystemApi;
import android.compat.annotation.UnsupportedAppUsage; import android.compat.annotation.UnsupportedAppUsage;
import android.net.NetworkInfo.DetailedState; import android.net.NetworkInfo.DetailedState;
import android.net.TransportInfo;
import android.os.Build; import android.os.Build;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -38,8 +39,17 @@ import java.util.Locale;
/** /**
* Describes the state of any Wi-Fi connection that is active or * Describes the state of any Wi-Fi connection that is active or
* is in the process of being set up. * 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"; private static final String TAG = "WifiInfo";
/** /**
* This is the map described in the Javadoc comment above. The positions * This is the map described in the Javadoc comment above. The positions

View File

@@ -36,9 +36,11 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context; import android.content.Context;
import android.content.pm.ParceledListSlice; import android.content.pm.ParceledListSlice;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.DhcpInfo; import android.net.DhcpInfo;
import android.net.MacAddress; import android.net.MacAddress;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkStack; import android.net.NetworkStack;
import android.net.wifi.hotspot2.IProvisioningCallback; import android.net.wifi.hotspot2.IProvisioningCallback;
import android.net.wifi.hotspot2.OsuProvider; 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. * Return dynamic information about the current Wi-Fi connection, if any is active.
* <p> * <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}. * @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() { public WifiInfo getConnectionInfo() {
try { try {
return mService.getConnectionInfo(mContext.getOpPackageName(), return mService.getConnectionInfo(mContext.getOpPackageName(),