Merge "Fix Automated API Review issues."
am: acb5eca325
Change-Id: I9c007c129269a80d9aede31c8980dbd42e9f1f84
This commit is contained in:
@@ -4088,7 +4088,7 @@ public class ConnectivityManager {
|
||||
@SystemApi
|
||||
@TestApi
|
||||
@RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK)
|
||||
public void startCaptivePortalApp(Network network, Bundle appExtras) {
|
||||
public void startCaptivePortalApp(@NonNull Network network, @NonNull Bundle appExtras) {
|
||||
try {
|
||||
mService.startCaptivePortalAppInternal(network, appExtras);
|
||||
} catch (RemoteException e) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.net;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
import android.os.Parcel;
|
||||
@@ -70,7 +71,7 @@ public final class IpPrefix implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public IpPrefix(byte[] address, int prefixLength) {
|
||||
public IpPrefix(@NonNull byte[] address, int prefixLength) {
|
||||
this.address = address.clone();
|
||||
this.prefixLength = prefixLength;
|
||||
checkAndMaskAddressAndPrefixLength();
|
||||
@@ -87,7 +88,7 @@ public final class IpPrefix implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public IpPrefix(InetAddress address, int prefixLength) {
|
||||
public IpPrefix(@NonNull InetAddress address, int prefixLength) {
|
||||
// We don't reuse the (byte[], int) constructor because it calls clone() on the byte array,
|
||||
// which is unnecessary because getAddress() already returns a clone.
|
||||
this.address = address.getAddress();
|
||||
@@ -106,7 +107,7 @@ public final class IpPrefix implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public IpPrefix(String prefix) {
|
||||
public IpPrefix(@NonNull String prefix) {
|
||||
// We don't reuse the (InetAddress, int) constructor because "error: call to this must be
|
||||
// first statement in constructor". We could factor out setting the member variables to an
|
||||
// init() method, but if we did, then we'd have to make the members non-final, or "error:
|
||||
|
||||
@@ -26,6 +26,7 @@ import static android.system.OsConstants.RT_SCOPE_SITE;
|
||||
import static android.system.OsConstants.RT_SCOPE_UNIVERSE;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
import android.annotation.UnsupportedAppUsage;
|
||||
@@ -107,8 +108,8 @@ public class LinkAddress implements Parcelable {
|
||||
*
|
||||
* Per RFC 4193 section 8, fc00::/7 identifies these addresses.
|
||||
*/
|
||||
private boolean isIPv6ULA() {
|
||||
if (isIPv6()) {
|
||||
private boolean isIpv6ULA() {
|
||||
if (isIpv6()) {
|
||||
byte[] bytes = address.getAddress();
|
||||
return ((bytes[0] & (byte)0xfe) == (byte)0xfc);
|
||||
}
|
||||
@@ -121,17 +122,29 @@ public class LinkAddress implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean isIPv6() {
|
||||
public boolean isIpv6() {
|
||||
return address instanceof Inet6Address;
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return true if the address is IPv6.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean isIPv6() {
|
||||
return isIpv6();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the address is IPv4 or is a mapped IPv4 address.
|
||||
* @hide
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean isIPv4() {
|
||||
public boolean isIpv4() {
|
||||
return address instanceof Inet4Address;
|
||||
}
|
||||
|
||||
@@ -217,7 +230,7 @@ public class LinkAddress implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public LinkAddress(String address, int flags, int scope) {
|
||||
public LinkAddress(@NonNull String address, int flags, int scope) {
|
||||
// This may throw an IllegalArgumentException; catching it is the caller's responsibility.
|
||||
// TODO: consider rejecting mapped IPv4 addresses such as "::ffff:192.0.2.5/24".
|
||||
Pair<InetAddress, Integer> ipAndMask = NetworkUtils.parseIpAndMask(address);
|
||||
@@ -276,7 +289,10 @@ public class LinkAddress implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean isSameAddressAs(LinkAddress other) {
|
||||
public boolean isSameAddressAs(@Nullable LinkAddress other) {
|
||||
if (other == null) {
|
||||
return false;
|
||||
}
|
||||
return address.equals(other.address) && prefixLength == other.prefixLength;
|
||||
}
|
||||
|
||||
@@ -331,10 +347,10 @@ public class LinkAddress implements Parcelable {
|
||||
* state has cleared either DAD has succeeded or failed, and both
|
||||
* flags are cleared regardless).
|
||||
*/
|
||||
return (scope == RT_SCOPE_UNIVERSE &&
|
||||
!isIPv6ULA() &&
|
||||
(flags & (IFA_F_DADFAILED | IFA_F_DEPRECATED)) == 0L &&
|
||||
((flags & IFA_F_TENTATIVE) == 0L || (flags & IFA_F_OPTIMISTIC) != 0L));
|
||||
return (scope == RT_SCOPE_UNIVERSE
|
||||
&& !isIpv6ULA()
|
||||
&& (flags & (IFA_F_DADFAILED | IFA_F_DEPRECATED)) == 0L
|
||||
&& ((flags & IFA_F_TENTATIVE) == 0L || (flags & IFA_F_OPTIMISTIC) != 0L));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -54,11 +54,11 @@ public final class LinkProperties implements Parcelable {
|
||||
// The interface described by the network link.
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
|
||||
private String mIfaceName;
|
||||
private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<>();
|
||||
private ArrayList<InetAddress> mDnses = new ArrayList<>();
|
||||
private final ArrayList<LinkAddress> mLinkAddresses = new ArrayList<>();
|
||||
private final ArrayList<InetAddress> mDnses = new ArrayList<>();
|
||||
// PCSCF addresses are addresses of SIP proxies that only exist for the IMS core service.
|
||||
private ArrayList<InetAddress> mPcscfs = new ArrayList<InetAddress>();
|
||||
private ArrayList<InetAddress> mValidatedPrivateDnses = new ArrayList<>();
|
||||
private final ArrayList<InetAddress> mPcscfs = new ArrayList<InetAddress>();
|
||||
private final ArrayList<InetAddress> mValidatedPrivateDnses = new ArrayList<>();
|
||||
private boolean mUsePrivateDns;
|
||||
private String mPrivateDnsServerName;
|
||||
private String mDomains;
|
||||
@@ -150,8 +150,8 @@ public final class LinkProperties implements Parcelable {
|
||||
// connections getting stuck until timeouts fire and other
|
||||
// baffling failures. Therefore, loss of either IPv4 or IPv6 on a
|
||||
// previously dual-stack network is deemed a lost of provisioning.
|
||||
if ((before.isIPv4Provisioned() && !after.isIPv4Provisioned()) ||
|
||||
(before.isIPv6Provisioned() && !after.isIPv6Provisioned())) {
|
||||
if ((before.isIpv4Provisioned() && !after.isIpv4Provisioned())
|
||||
|| (before.isIpv6Provisioned() && !after.isIpv6Provisioned())) {
|
||||
return ProvisioningChange.LOST_PROVISIONING;
|
||||
}
|
||||
return ProvisioningChange.STILL_PROVISIONED;
|
||||
@@ -165,9 +165,8 @@ public final class LinkProperties implements Parcelable {
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Constructs a new {@code LinkProperties} with default values.
|
||||
*/
|
||||
@SystemApi
|
||||
public LinkProperties() {
|
||||
}
|
||||
|
||||
@@ -176,7 +175,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public LinkProperties(LinkProperties source) {
|
||||
public LinkProperties(@Nullable LinkProperties source) {
|
||||
if (source != null) {
|
||||
mIfaceName = source.mIfaceName;
|
||||
mLinkAddresses.addAll(source.mLinkAddresses);
|
||||
@@ -202,10 +201,8 @@ public final class LinkProperties implements Parcelable {
|
||||
* will have their interface changed to match this new value.
|
||||
*
|
||||
* @param iface The name of the network interface used for this link.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void setInterfaceName(String iface) {
|
||||
public void setInterfaceName(@Nullable String iface) {
|
||||
mIfaceName = iface;
|
||||
ArrayList<RouteInfo> newRoutes = new ArrayList<>(mRoutes.size());
|
||||
for (RouteInfo route : mRoutes) {
|
||||
@@ -227,7 +224,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public List<String> getAllInterfaceNames() {
|
||||
public @NonNull List<String> getAllInterfaceNames() {
|
||||
List<String> interfaceNames = new ArrayList<>(mStackedLinks.size() + 1);
|
||||
if (mIfaceName != null) interfaceNames.add(mIfaceName);
|
||||
for (LinkProperties stacked: mStackedLinks.values()) {
|
||||
@@ -247,8 +244,8 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public List<InetAddress> getAddresses() {
|
||||
List<InetAddress> addresses = new ArrayList<>();
|
||||
public @NonNull List<InetAddress> getAddresses() {
|
||||
final List<InetAddress> addresses = new ArrayList<>();
|
||||
for (LinkAddress linkAddress : mLinkAddresses) {
|
||||
addresses.add(linkAddress.getAddress());
|
||||
}
|
||||
@@ -260,7 +257,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public List<InetAddress> getAllAddresses() {
|
||||
public @NonNull List<InetAddress> getAllAddresses() {
|
||||
List<InetAddress> addresses = new ArrayList<>();
|
||||
for (LinkAddress linkAddress : mLinkAddresses) {
|
||||
addresses.add(linkAddress.getAddress());
|
||||
@@ -289,7 +286,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public boolean addLinkAddress(LinkAddress address) {
|
||||
public boolean addLinkAddress(@NonNull LinkAddress address) {
|
||||
if (address == null) {
|
||||
return false;
|
||||
}
|
||||
@@ -318,7 +315,10 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public boolean removeLinkAddress(LinkAddress toRemove) {
|
||||
public boolean removeLinkAddress(@NonNull LinkAddress toRemove) {
|
||||
if (toRemove == null) {
|
||||
return false;
|
||||
}
|
||||
int i = findLinkAddressIndex(toRemove);
|
||||
if (i >= 0) {
|
||||
mLinkAddresses.remove(i);
|
||||
@@ -333,7 +333,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*
|
||||
* @return An unmodifiable {@link List} of {@link LinkAddress} for this link.
|
||||
*/
|
||||
public List<LinkAddress> getLinkAddresses() {
|
||||
public @NonNull List<LinkAddress> getLinkAddresses() {
|
||||
return Collections.unmodifiableList(mLinkAddresses);
|
||||
}
|
||||
|
||||
@@ -356,10 +356,8 @@ public final class LinkProperties implements Parcelable {
|
||||
*
|
||||
* @param addresses The {@link Collection} of {@link LinkAddress} to set in this
|
||||
* object.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void setLinkAddresses(Collection<LinkAddress> addresses) {
|
||||
public void setLinkAddresses(@NonNull Collection<LinkAddress> addresses) {
|
||||
mLinkAddresses.clear();
|
||||
for (LinkAddress address: addresses) {
|
||||
addLinkAddress(address);
|
||||
@@ -375,7 +373,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean addDnsServer(InetAddress dnsServer) {
|
||||
public boolean addDnsServer(@NonNull InetAddress dnsServer) {
|
||||
if (dnsServer != null && !mDnses.contains(dnsServer)) {
|
||||
mDnses.add(dnsServer);
|
||||
return true;
|
||||
@@ -392,7 +390,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean removeDnsServer(InetAddress dnsServer) {
|
||||
public boolean removeDnsServer(@NonNull InetAddress dnsServer) {
|
||||
if (dnsServer != null) {
|
||||
return mDnses.remove(dnsServer);
|
||||
}
|
||||
@@ -404,10 +402,8 @@ public final class LinkProperties implements Parcelable {
|
||||
* the given {@link Collection} of {@link InetAddress} objects.
|
||||
*
|
||||
* @param dnsServers The {@link Collection} of DNS servers to set in this object.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void setDnsServers(Collection<InetAddress> dnsServers) {
|
||||
public void setDnsServers(@NonNull Collection<InetAddress> dnsServers) {
|
||||
mDnses.clear();
|
||||
for (InetAddress dnsServer: dnsServers) {
|
||||
addDnsServer(dnsServer);
|
||||
@@ -420,7 +416,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return An unmodifiable {@link List} of {@link InetAddress} for DNS servers on
|
||||
* this link.
|
||||
*/
|
||||
public List<InetAddress> getDnsServers() {
|
||||
public @NonNull List<InetAddress> getDnsServers() {
|
||||
return Collections.unmodifiableList(mDnses);
|
||||
}
|
||||
|
||||
@@ -490,7 +486,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return true if the DNS server was added, false if it was already present.
|
||||
* @hide
|
||||
*/
|
||||
public boolean addValidatedPrivateDnsServer(InetAddress dnsServer) {
|
||||
public boolean addValidatedPrivateDnsServer(@NonNull InetAddress dnsServer) {
|
||||
if (dnsServer != null && !mValidatedPrivateDnses.contains(dnsServer)) {
|
||||
mValidatedPrivateDnses.add(dnsServer);
|
||||
return true;
|
||||
@@ -506,11 +502,8 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return true if the DNS server was removed, false if it did not exist.
|
||||
* @hide
|
||||
*/
|
||||
public boolean removeValidatedPrivateDnsServer(InetAddress dnsServer) {
|
||||
if (dnsServer != null) {
|
||||
return mValidatedPrivateDnses.remove(dnsServer);
|
||||
}
|
||||
return false;
|
||||
public boolean removeValidatedPrivateDnsServer(@NonNull InetAddress dnsServer) {
|
||||
return mValidatedPrivateDnses.remove(dnsServer);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -523,7 +516,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public void setValidatedPrivateDnsServers(Collection<InetAddress> dnsServers) {
|
||||
public void setValidatedPrivateDnsServers(@NonNull Collection<InetAddress> dnsServers) {
|
||||
mValidatedPrivateDnses.clear();
|
||||
for (InetAddress dnsServer: dnsServers) {
|
||||
addValidatedPrivateDnsServer(dnsServer);
|
||||
@@ -534,13 +527,13 @@ public final class LinkProperties implements Parcelable {
|
||||
* Returns all the {@link InetAddress} for validated private DNS servers on this link.
|
||||
* These are resolved from the private DNS server name.
|
||||
*
|
||||
* @return An umodifiable {@link List} of {@link InetAddress} for validated private
|
||||
* @return An unmodifiable {@link List} of {@link InetAddress} for validated private
|
||||
* DNS servers on this link.
|
||||
* @hide
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public List<InetAddress> getValidatedPrivateDnsServers() {
|
||||
public @NonNull List<InetAddress> getValidatedPrivateDnsServers() {
|
||||
return Collections.unmodifiableList(mValidatedPrivateDnses);
|
||||
}
|
||||
|
||||
@@ -551,7 +544,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return true if the PCSCF server was added, false otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean addPcscfServer(InetAddress pcscfServer) {
|
||||
public boolean addPcscfServer(@NonNull InetAddress pcscfServer) {
|
||||
if (pcscfServer != null && !mPcscfs.contains(pcscfServer)) {
|
||||
mPcscfs.add(pcscfServer);
|
||||
return true;
|
||||
@@ -562,27 +555,24 @@ public final class LinkProperties implements Parcelable {
|
||||
/**
|
||||
* Removes the given {@link InetAddress} from the list of PCSCF servers.
|
||||
*
|
||||
* @param pcscf Server The {@link InetAddress} to remove from the list of PCSCF servers.
|
||||
* @param pcscfServer The {@link InetAddress} to remove from the list of PCSCF servers.
|
||||
* @return true if the PCSCF server was removed, false otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean removePcscfServer(InetAddress pcscfServer) {
|
||||
if (pcscfServer != null) {
|
||||
return mPcscfs.remove(pcscfServer);
|
||||
}
|
||||
return false;
|
||||
public boolean removePcscfServer(@NonNull InetAddress pcscfServer) {
|
||||
return mPcscfs.remove(pcscfServer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces the PCSCF servers in this {@code LinkProperties} with
|
||||
* the given {@link Collection} of {@link InetAddress} objects.
|
||||
*
|
||||
* @param addresses The {@link Collection} of PCSCF servers to set in this object.
|
||||
* @param pcscfServers The {@link Collection} of PCSCF servers to set in this object.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public void setPcscfServers(Collection<InetAddress> pcscfServers) {
|
||||
public void setPcscfServers(@NonNull Collection<InetAddress> pcscfServers) {
|
||||
mPcscfs.clear();
|
||||
for (InetAddress pcscfServer: pcscfServers) {
|
||||
addPcscfServer(pcscfServer);
|
||||
@@ -598,7 +588,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public List<InetAddress> getPcscfServers() {
|
||||
public @NonNull List<InetAddress> getPcscfServers() {
|
||||
return Collections.unmodifiableList(mPcscfs);
|
||||
}
|
||||
|
||||
@@ -607,20 +597,18 @@ public final class LinkProperties implements Parcelable {
|
||||
*
|
||||
* @param domains A {@link String} listing in priority order the comma separated
|
||||
* domains to search when resolving host names on this link.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void setDomains(String domains) {
|
||||
public void setDomains(@Nullable String domains) {
|
||||
mDomains = domains;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the DNS domains search path set for this link.
|
||||
* Get the DNS domains search path set for this link. May be {@code null} if not set.
|
||||
*
|
||||
* @return A {@link String} containing the comma separated domains to search when resolving
|
||||
* host names on this link.
|
||||
* @return A {@link String} containing the comma separated domains to search when resolving host
|
||||
* names on this link or {@code null}.
|
||||
*/
|
||||
public String getDomains() {
|
||||
public @Nullable String getDomains() {
|
||||
return mDomains;
|
||||
}
|
||||
|
||||
@@ -630,9 +618,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* 10000 will be ignored.
|
||||
*
|
||||
* @param mtu The MTU to use for this link.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void setMtu(int mtu) {
|
||||
mMtu = mtu;
|
||||
}
|
||||
@@ -657,20 +643,20 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public void setTcpBufferSizes(String tcpBufferSizes) {
|
||||
public void setTcpBufferSizes(@Nullable String tcpBufferSizes) {
|
||||
mTcpBufferSizes = tcpBufferSizes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the tcp buffer sizes.
|
||||
* Gets the tcp buffer sizes. May be {@code null} if not set.
|
||||
*
|
||||
* @return the tcp buffer sizes to use when this link is the system default.
|
||||
* @return the tcp buffer sizes to use when this link is the system default or {@code null}.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public String getTcpBufferSizes() {
|
||||
public @Nullable String getTcpBufferSizes() {
|
||||
return mTcpBufferSizes;
|
||||
}
|
||||
|
||||
@@ -690,23 +676,18 @@ public final class LinkProperties implements Parcelable {
|
||||
*
|
||||
* @param route A {@link RouteInfo} to add to this object.
|
||||
* @return {@code false} if the route was already present, {@code true} if it was added.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public boolean addRoute(RouteInfo route) {
|
||||
if (route != null) {
|
||||
String routeIface = route.getInterface();
|
||||
if (routeIface != null && !routeIface.equals(mIfaceName)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Route added with non-matching interface: " + routeIface +
|
||||
" vs. " + mIfaceName);
|
||||
}
|
||||
route = routeWithInterface(route);
|
||||
if (!mRoutes.contains(route)) {
|
||||
mRoutes.add(route);
|
||||
return true;
|
||||
}
|
||||
public boolean addRoute(@NonNull RouteInfo route) {
|
||||
String routeIface = route.getInterface();
|
||||
if (routeIface != null && !routeIface.equals(mIfaceName)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Route added with non-matching interface: " + routeIface
|
||||
+ " vs. " + mIfaceName);
|
||||
}
|
||||
route = routeWithInterface(route);
|
||||
if (!mRoutes.contains(route)) {
|
||||
mRoutes.add(route);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -722,10 +703,8 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean removeRoute(RouteInfo route) {
|
||||
return route != null &&
|
||||
Objects.equals(mIfaceName, route.getInterface()) &&
|
||||
mRoutes.remove(route);
|
||||
public boolean removeRoute(@NonNull RouteInfo route) {
|
||||
return Objects.equals(mIfaceName, route.getInterface()) && mRoutes.remove(route);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -733,7 +712,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*
|
||||
* @return An unmodifiable {@link List} of {@link RouteInfo} for this link.
|
||||
*/
|
||||
public List<RouteInfo> getRoutes() {
|
||||
public @NonNull List<RouteInfo> getRoutes() {
|
||||
return Collections.unmodifiableList(mRoutes);
|
||||
}
|
||||
|
||||
@@ -753,7 +732,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public List<RouteInfo> getAllRoutes() {
|
||||
public @NonNull List<RouteInfo> getAllRoutes() {
|
||||
List<RouteInfo> routes = new ArrayList<>(mRoutes);
|
||||
for (LinkProperties stacked: mStackedLinks.values()) {
|
||||
routes.addAll(stacked.getAllRoutes());
|
||||
@@ -767,26 +746,24 @@ public final class LinkProperties implements Parcelable {
|
||||
* not enforce it and applications may ignore them.
|
||||
*
|
||||
* @param proxy A {@link ProxyInfo} defining the HTTP Proxy to use on this link.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void setHttpProxy(ProxyInfo proxy) {
|
||||
public void setHttpProxy(@Nullable ProxyInfo proxy) {
|
||||
mHttpProxy = proxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the recommended {@link ProxyInfo} (or {@code null}) set on this link.
|
||||
*
|
||||
* @return The {@link ProxyInfo} set on this link
|
||||
* @return The {@link ProxyInfo} set on this link or {@code null}.
|
||||
*/
|
||||
public ProxyInfo getHttpProxy() {
|
||||
public @Nullable ProxyInfo getHttpProxy() {
|
||||
return mHttpProxy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the NAT64 prefix in use on this link, if any.
|
||||
*
|
||||
* @return the NAT64 prefix.
|
||||
* @return the NAT64 prefix or {@code null}.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@@ -799,14 +776,14 @@ public final class LinkProperties implements Parcelable {
|
||||
* Sets the NAT64 prefix in use on this link.
|
||||
*
|
||||
* Currently, only 96-bit prefixes (i.e., where the 32-bit IPv4 address is at the end of the
|
||||
* 128-bit IPv6 address) are supported.
|
||||
* 128-bit IPv6 address) are supported or {@code null} for no prefix.
|
||||
*
|
||||
* @param prefix the NAT64 prefix.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public void setNat64Prefix(IpPrefix prefix) {
|
||||
public void setNat64Prefix(@Nullable IpPrefix prefix) {
|
||||
if (prefix != null && prefix.getPrefixLength() != 96) {
|
||||
throw new IllegalArgumentException("Only 96-bit prefixes are supported: " + prefix);
|
||||
}
|
||||
@@ -818,15 +795,15 @@ public final class LinkProperties implements Parcelable {
|
||||
*
|
||||
* If there is already a stacked link with the same interface name as link,
|
||||
* that link is replaced with link. Otherwise, link is added to the list
|
||||
* of stacked links. If link is null, nothing changes.
|
||||
* of stacked links.
|
||||
*
|
||||
* @param link The link to add.
|
||||
* @return true if the link was stacked, false otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean addStackedLink(LinkProperties link) {
|
||||
if (link != null && link.getInterfaceName() != null) {
|
||||
public boolean addStackedLink(@NonNull LinkProperties link) {
|
||||
if (link.getInterfaceName() != null) {
|
||||
mStackedLinks.put(link.getInterfaceName(), link);
|
||||
return true;
|
||||
}
|
||||
@@ -843,12 +820,9 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return true if the link was removed, false otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean removeStackedLink(String iface) {
|
||||
if (iface != null) {
|
||||
LinkProperties removed = mStackedLinks.remove(iface);
|
||||
return removed != null;
|
||||
}
|
||||
return false;
|
||||
public boolean removeStackedLink(@NonNull String iface) {
|
||||
LinkProperties removed = mStackedLinks.remove(iface);
|
||||
return removed != null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -860,7 +834,7 @@ public final class LinkProperties implements Parcelable {
|
||||
if (mStackedLinks.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<LinkProperties> stacked = new ArrayList<>();
|
||||
final List<LinkProperties> stacked = new ArrayList<>();
|
||||
for (LinkProperties link : mStackedLinks.values()) {
|
||||
stacked.add(new LinkProperties(link));
|
||||
}
|
||||
@@ -869,9 +843,7 @@ public final class LinkProperties implements Parcelable {
|
||||
|
||||
/**
|
||||
* Clears this object to its initial state.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void clear() {
|
||||
mIfaceName = null;
|
||||
mLinkAddresses.clear();
|
||||
@@ -988,7 +960,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean hasIPv4Address() {
|
||||
public boolean hasIpv4Address() {
|
||||
for (LinkAddress address : mLinkAddresses) {
|
||||
if (address.getAddress() instanceof Inet4Address) {
|
||||
return true;
|
||||
@@ -997,16 +969,28 @@ public final class LinkProperties implements Parcelable {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return {@code true} if there is an IPv4 address, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean hasIPv4Address() {
|
||||
return hasIpv4Address();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this link or any of its stacked interfaces has an IPv4 address.
|
||||
*
|
||||
* @return {@code true} if there is an IPv4 address, {@code false} otherwise.
|
||||
*/
|
||||
private boolean hasIPv4AddressOnInterface(String iface) {
|
||||
private boolean hasIpv4AddressOnInterface(String iface) {
|
||||
// mIfaceName can be null.
|
||||
return (Objects.equals(iface, mIfaceName) && hasIPv4Address()) ||
|
||||
(iface != null && mStackedLinks.containsKey(iface) &&
|
||||
mStackedLinks.get(iface).hasIPv4Address());
|
||||
return (Objects.equals(iface, mIfaceName) && hasIpv4Address())
|
||||
|| (iface != null && mStackedLinks.containsKey(iface)
|
||||
&& mStackedLinks.get(iface).hasIpv4Address());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1017,7 +1001,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean hasGlobalIPv6Address() {
|
||||
public boolean hasGlobalIpv6Address() {
|
||||
for (LinkAddress address : mLinkAddresses) {
|
||||
if (address.getAddress() instanceof Inet6Address && address.isGlobalPreferred()) {
|
||||
return true;
|
||||
@@ -1026,6 +1010,18 @@ public final class LinkProperties implements Parcelable {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return {@code true} if there is a global preferred IPv6 address, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean hasGlobalIPv6Address() {
|
||||
return hasGlobalIpv6Address();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this link has an IPv4 default route.
|
||||
*
|
||||
@@ -1033,7 +1029,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean hasIPv4DefaultRoute() {
|
||||
public boolean hasIpv4DefaultRoute() {
|
||||
for (RouteInfo r : mRoutes) {
|
||||
if (r.isIPv4Default()) {
|
||||
return true;
|
||||
@@ -1042,6 +1038,18 @@ public final class LinkProperties implements Parcelable {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return {@code true} if there is an IPv4 default route, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean hasIPv4DefaultRoute() {
|
||||
return hasIpv4DefaultRoute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this link has an IPv6 default route.
|
||||
*
|
||||
@@ -1050,7 +1058,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean hasIPv6DefaultRoute() {
|
||||
public boolean hasIpv6DefaultRoute() {
|
||||
for (RouteInfo r : mRoutes) {
|
||||
if (r.isIPv6Default()) {
|
||||
return true;
|
||||
@@ -1059,6 +1067,18 @@ public final class LinkProperties implements Parcelable {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return {@code true} if there is an IPv6 default route, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean hasIPv6DefaultRoute() {
|
||||
return hasIpv6DefaultRoute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this link has an IPv4 DNS server.
|
||||
*
|
||||
@@ -1066,7 +1086,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean hasIPv4DnsServer() {
|
||||
public boolean hasIpv4DnsServer() {
|
||||
for (InetAddress ia : mDnses) {
|
||||
if (ia instanceof Inet4Address) {
|
||||
return true;
|
||||
@@ -1075,6 +1095,18 @@ public final class LinkProperties implements Parcelable {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return {@code true} if there is an IPv4 DNS server, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean hasIPv4DnsServer() {
|
||||
return hasIpv4DnsServer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this link has an IPv6 DNS server.
|
||||
*
|
||||
@@ -1082,7 +1114,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean hasIPv6DnsServer() {
|
||||
public boolean hasIpv6DnsServer() {
|
||||
for (InetAddress ia : mDnses) {
|
||||
if (ia instanceof Inet6Address) {
|
||||
return true;
|
||||
@@ -1091,13 +1123,25 @@ public final class LinkProperties implements Parcelable {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return {@code true} if there is an IPv6 DNS server, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean hasIPv6DnsServer() {
|
||||
return hasIpv6DnsServer();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this link has an IPv4 PCSCF server.
|
||||
*
|
||||
* @return {@code true} if there is an IPv4 PCSCF server, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean hasIPv4PcscfServer() {
|
||||
public boolean hasIpv4PcscfServer() {
|
||||
for (InetAddress ia : mPcscfs) {
|
||||
if (ia instanceof Inet4Address) {
|
||||
return true;
|
||||
@@ -1112,7 +1156,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return {@code true} if there is an IPv6 PCSCF server, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean hasIPv6PcscfServer() {
|
||||
public boolean hasIpv6PcscfServer() {
|
||||
for (InetAddress ia : mPcscfs) {
|
||||
if (ia instanceof Inet6Address) {
|
||||
return true;
|
||||
@@ -1130,10 +1174,10 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean isIPv4Provisioned() {
|
||||
return (hasIPv4Address() &&
|
||||
hasIPv4DefaultRoute() &&
|
||||
hasIPv4DnsServer());
|
||||
public boolean isIpv4Provisioned() {
|
||||
return (hasIpv4Address()
|
||||
&& hasIpv4DefaultRoute()
|
||||
&& hasIpv4DnsServer());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1145,12 +1189,25 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean isIPv6Provisioned() {
|
||||
return (hasGlobalIPv6Address() &&
|
||||
hasIPv6DefaultRoute() &&
|
||||
hasIPv6DnsServer());
|
||||
public boolean isIpv6Provisioned() {
|
||||
return (hasGlobalIpv6Address()
|
||||
&& hasIpv6DefaultRoute()
|
||||
&& hasIpv6DnsServer());
|
||||
}
|
||||
|
||||
/**
|
||||
* For backward compatibility.
|
||||
* This was annotated with @UnsupportedAppUsage in P, so we can't remove the method completely
|
||||
* just yet.
|
||||
* @return {@code true} if the link is provisioned, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
public boolean isIPv6Provisioned() {
|
||||
return isIpv6Provisioned();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns true if this link is provisioned for global connectivity,
|
||||
* for at least one Internet Protocol family.
|
||||
@@ -1161,7 +1218,7 @@ public final class LinkProperties implements Parcelable {
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean isProvisioned() {
|
||||
return (isIPv4Provisioned() || isIPv6Provisioned());
|
||||
return (isIpv4Provisioned() || isIpv6Provisioned());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1173,7 +1230,7 @@ public final class LinkProperties implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean isReachable(InetAddress ip) {
|
||||
public boolean isReachable(@NonNull InetAddress ip) {
|
||||
final List<RouteInfo> allRoutes = getAllRoutes();
|
||||
// If we don't have a route to this IP address, it's not reachable.
|
||||
final RouteInfo bestRoute = RouteInfo.selectBestRoute(allRoutes, ip);
|
||||
@@ -1185,7 +1242,7 @@ public final class LinkProperties implements Parcelable {
|
||||
|
||||
if (ip instanceof Inet4Address) {
|
||||
// For IPv4, it suffices for now to simply have any address.
|
||||
return hasIPv4AddressOnInterface(bestRoute.getInterface());
|
||||
return hasIpv4AddressOnInterface(bestRoute.getInterface());
|
||||
} else if (ip instanceof Inet6Address) {
|
||||
if (ip.isLinkLocalAddress()) {
|
||||
// For now, just make sure link-local destinations have
|
||||
@@ -1196,7 +1253,7 @@ public final class LinkProperties implements Parcelable {
|
||||
// For non-link-local destinations check that either the best route
|
||||
// is directly connected or that some global preferred address exists.
|
||||
// TODO: reconsider all cases (disconnected ULA networks, ...).
|
||||
return (!bestRoute.hasGateway() || hasGlobalIPv6Address());
|
||||
return (!bestRoute.hasGateway() || hasGlobalIpv6Address());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1211,7 +1268,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean isIdenticalInterfaceName(LinkProperties target) {
|
||||
public boolean isIdenticalInterfaceName(@NonNull LinkProperties target) {
|
||||
return TextUtils.equals(getInterfaceName(), target.getInterfaceName());
|
||||
}
|
||||
|
||||
@@ -1223,7 +1280,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean isIdenticalAddresses(LinkProperties target) {
|
||||
public boolean isIdenticalAddresses(@NonNull LinkProperties target) {
|
||||
Collection<InetAddress> targetAddresses = target.getAddresses();
|
||||
Collection<InetAddress> sourceAddresses = getAddresses();
|
||||
return (sourceAddresses.size() == targetAddresses.size()) ?
|
||||
@@ -1238,7 +1295,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean isIdenticalDnses(LinkProperties target) {
|
||||
public boolean isIdenticalDnses(@NonNull LinkProperties target) {
|
||||
Collection<InetAddress> targetDnses = target.getDnsServers();
|
||||
String targetDomains = target.getDomains();
|
||||
if (mDomains == null) {
|
||||
@@ -1258,7 +1315,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return {@code true} if both are identical, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean isIdenticalPrivateDns(LinkProperties target) {
|
||||
public boolean isIdenticalPrivateDns(@NonNull LinkProperties target) {
|
||||
return (isPrivateDnsActive() == target.isPrivateDnsActive()
|
||||
&& TextUtils.equals(getPrivateDnsServerName(),
|
||||
target.getPrivateDnsServerName()));
|
||||
@@ -1272,7 +1329,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return {@code true} if both are identical, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean isIdenticalValidatedPrivateDnses(LinkProperties target) {
|
||||
public boolean isIdenticalValidatedPrivateDnses(@NonNull LinkProperties target) {
|
||||
Collection<InetAddress> targetDnses = target.getValidatedPrivateDnsServers();
|
||||
return (mValidatedPrivateDnses.size() == targetDnses.size())
|
||||
? mValidatedPrivateDnses.containsAll(targetDnses) : false;
|
||||
@@ -1285,7 +1342,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return {@code true} if both are identical, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean isIdenticalPcscfs(LinkProperties target) {
|
||||
public boolean isIdenticalPcscfs(@NonNull LinkProperties target) {
|
||||
Collection<InetAddress> targetPcscfs = target.getPcscfServers();
|
||||
return (mPcscfs.size() == targetPcscfs.size()) ?
|
||||
mPcscfs.containsAll(targetPcscfs) : false;
|
||||
@@ -1299,7 +1356,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean isIdenticalRoutes(LinkProperties target) {
|
||||
public boolean isIdenticalRoutes(@NonNull LinkProperties target) {
|
||||
Collection<RouteInfo> targetRoutes = target.getRoutes();
|
||||
return (mRoutes.size() == targetRoutes.size()) ?
|
||||
mRoutes.containsAll(targetRoutes) : false;
|
||||
@@ -1313,7 +1370,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
|
||||
public boolean isIdenticalHttpProxy(LinkProperties target) {
|
||||
public boolean isIdenticalHttpProxy(@NonNull LinkProperties target) {
|
||||
return getHttpProxy() == null ? target.getHttpProxy() == null :
|
||||
getHttpProxy().equals(target.getHttpProxy());
|
||||
}
|
||||
@@ -1326,7 +1383,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public boolean isIdenticalStackedLinks(LinkProperties target) {
|
||||
public boolean isIdenticalStackedLinks(@NonNull LinkProperties target) {
|
||||
if (!mStackedLinks.keySet().equals(target.mStackedLinks.keySet())) {
|
||||
return false;
|
||||
}
|
||||
@@ -1347,7 +1404,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return {@code true} if both are identical, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean isIdenticalMtu(LinkProperties target) {
|
||||
public boolean isIdenticalMtu(@NonNull LinkProperties target) {
|
||||
return getMtu() == target.getMtu();
|
||||
}
|
||||
|
||||
@@ -1358,7 +1415,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return {@code true} if both are identical, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean isIdenticalTcpBufferSizes(LinkProperties target) {
|
||||
public boolean isIdenticalTcpBufferSizes(@NonNull LinkProperties target) {
|
||||
return Objects.equals(mTcpBufferSizes, target.mTcpBufferSizes);
|
||||
}
|
||||
|
||||
@@ -1369,7 +1426,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return {@code true} if both are identical, {@code false} otherwise.
|
||||
* @hide
|
||||
*/
|
||||
public boolean isIdenticalNat64Prefix(LinkProperties target) {
|
||||
public boolean isIdenticalNat64Prefix(@NonNull LinkProperties target) {
|
||||
return Objects.equals(mNat64Prefix, target.mNat64Prefix);
|
||||
}
|
||||
|
||||
@@ -1421,7 +1478,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return the differences between the addresses.
|
||||
* @hide
|
||||
*/
|
||||
public CompareResult<LinkAddress> compareAddresses(LinkProperties target) {
|
||||
public @NonNull CompareResult<LinkAddress> compareAddresses(@Nullable LinkProperties target) {
|
||||
/*
|
||||
* Duplicate the LinkAddresses into removed, we will be removing
|
||||
* address which are common between mLinkAddresses and target
|
||||
@@ -1441,7 +1498,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return the differences between the DNS addresses.
|
||||
* @hide
|
||||
*/
|
||||
public CompareResult<InetAddress> compareDnses(LinkProperties target) {
|
||||
public @NonNull CompareResult<InetAddress> compareDnses(@Nullable LinkProperties target) {
|
||||
/*
|
||||
* Duplicate the InetAddresses into removed, we will be removing
|
||||
* dns address which are common between mDnses and target
|
||||
@@ -1460,7 +1517,8 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return the differences between the DNS addresses.
|
||||
* @hide
|
||||
*/
|
||||
public CompareResult<InetAddress> compareValidatedPrivateDnses(LinkProperties target) {
|
||||
public @NonNull CompareResult<InetAddress> compareValidatedPrivateDnses(
|
||||
@Nullable LinkProperties target) {
|
||||
return new CompareResult<>(mValidatedPrivateDnses,
|
||||
target != null ? target.getValidatedPrivateDnsServers() : null);
|
||||
}
|
||||
@@ -1473,7 +1531,7 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return the differences between the routes.
|
||||
* @hide
|
||||
*/
|
||||
public CompareResult<RouteInfo> compareAllRoutes(LinkProperties target) {
|
||||
public @NonNull CompareResult<RouteInfo> compareAllRoutes(@Nullable LinkProperties target) {
|
||||
/*
|
||||
* Duplicate the RouteInfos into removed, we will be removing
|
||||
* routes which are common between mRoutes and target
|
||||
@@ -1491,7 +1549,8 @@ public final class LinkProperties implements Parcelable {
|
||||
* @return the differences between the interface names.
|
||||
* @hide
|
||||
*/
|
||||
public CompareResult<String> compareAllInterfaceNames(LinkProperties target) {
|
||||
public @NonNull CompareResult<String> compareAllInterfaceNames(
|
||||
@Nullable LinkProperties target) {
|
||||
/*
|
||||
* Duplicate the interface names into removed, we will be removing
|
||||
* interface names which are common between this and target
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.net;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
import android.annotation.UnsupportedAppUsage;
|
||||
@@ -125,7 +126,7 @@ public class Network implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public Network(Network that) {
|
||||
public Network(@NonNull Network that) {
|
||||
this(that.netId, that.mPrivateDnsBypass);
|
||||
}
|
||||
|
||||
@@ -163,7 +164,7 @@ public class Network implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public Network getPrivateDnsBypassingCopy() {
|
||||
public @NonNull Network getPrivateDnsBypassingCopy() {
|
||||
return new Network(netId, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package android.net;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
@@ -91,7 +92,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Set all contents of this object to the contents of a NetworkCapabilities.
|
||||
* @hide
|
||||
*/
|
||||
public void set(NetworkCapabilities nc) {
|
||||
public void set(@NonNull NetworkCapabilities nc) {
|
||||
mNetworkCapabilities = nc.mNetworkCapabilities;
|
||||
mTransportTypes = nc.mTransportTypes;
|
||||
mLinkUpBandwidthKbps = nc.mLinkUpBandwidthKbps;
|
||||
@@ -405,7 +406,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public NetworkCapabilities addCapability(@NetCapability int capability) {
|
||||
public @NonNull NetworkCapabilities addCapability(@NetCapability int capability) {
|
||||
checkValidCapability(capability);
|
||||
mNetworkCapabilities |= 1 << capability;
|
||||
mUnwantedNetworkCapabilities &= ~(1 << capability); // remove from unwanted capability list
|
||||
@@ -442,7 +443,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public NetworkCapabilities removeCapability(@NetCapability int capability) {
|
||||
public @NonNull NetworkCapabilities removeCapability(@NetCapability int capability) {
|
||||
checkValidCapability(capability);
|
||||
final long mask = ~(1 << capability);
|
||||
mNetworkCapabilities &= mask;
|
||||
@@ -456,7 +457,8 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setCapability(@NetCapability int capability, boolean value) {
|
||||
public @NonNull NetworkCapabilities setCapability(@NetCapability int capability,
|
||||
boolean value) {
|
||||
if (value) {
|
||||
addCapability(capability);
|
||||
} else {
|
||||
@@ -534,7 +536,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
}
|
||||
|
||||
/** Note this method may result in having the same capability in wanted and unwanted lists. */
|
||||
private void combineNetCapabilities(NetworkCapabilities nc) {
|
||||
private void combineNetCapabilities(@NonNull NetworkCapabilities nc) {
|
||||
this.mNetworkCapabilities |= nc.mNetworkCapabilities;
|
||||
this.mUnwantedNetworkCapabilities |= nc.mUnwantedNetworkCapabilities;
|
||||
}
|
||||
@@ -546,7 +548,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public String describeFirstNonRequestableCapability() {
|
||||
public @Nullable String describeFirstNonRequestableCapability() {
|
||||
final long nonRequestable = (mNetworkCapabilities | mUnwantedNetworkCapabilities)
|
||||
& NON_REQUESTABLE_CAPABILITIES;
|
||||
|
||||
@@ -558,7 +560,8 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean satisfiedByNetCapabilities(NetworkCapabilities nc, boolean onlyImmutable) {
|
||||
private boolean satisfiedByNetCapabilities(@NonNull NetworkCapabilities nc,
|
||||
boolean onlyImmutable) {
|
||||
long requestedCapabilities = mNetworkCapabilities;
|
||||
long requestedUnwantedCapabilities = mUnwantedNetworkCapabilities;
|
||||
long providedCapabilities = nc.mNetworkCapabilities;
|
||||
@@ -572,12 +575,12 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public boolean equalsNetCapabilities(NetworkCapabilities nc) {
|
||||
public boolean equalsNetCapabilities(@NonNull NetworkCapabilities nc) {
|
||||
return (nc.mNetworkCapabilities == this.mNetworkCapabilities)
|
||||
&& (nc.mUnwantedNetworkCapabilities == this.mUnwantedNetworkCapabilities);
|
||||
}
|
||||
|
||||
private boolean equalsNetCapabilitiesRequestable(NetworkCapabilities that) {
|
||||
private boolean equalsNetCapabilitiesRequestable(@NonNull NetworkCapabilities that) {
|
||||
return ((this.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES) ==
|
||||
(that.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES))
|
||||
&& ((this.mUnwantedNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES) ==
|
||||
@@ -713,7 +716,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public NetworkCapabilities addTransportType(@Transport int transportType) {
|
||||
public @NonNull NetworkCapabilities addTransportType(@Transport int transportType) {
|
||||
checkValidTransportType(transportType);
|
||||
mTransportTypes |= 1 << transportType;
|
||||
setNetworkSpecifier(mNetworkSpecifier); // used for exception checking
|
||||
@@ -727,7 +730,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @return This NetworkCapabilities instance, to facilitate chaining.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities removeTransportType(@Transport int transportType) {
|
||||
public @NonNull NetworkCapabilities removeTransportType(@Transport int transportType) {
|
||||
checkValidTransportType(transportType);
|
||||
mTransportTypes &= ~(1 << transportType);
|
||||
setNetworkSpecifier(mNetworkSpecifier); // used for exception checking
|
||||
@@ -740,7 +743,8 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setTransportType(@Transport int transportType, boolean value) {
|
||||
public @NonNull NetworkCapabilities setTransportType(@Transport int transportType,
|
||||
boolean value) {
|
||||
if (value) {
|
||||
addTransportType(transportType);
|
||||
} else {
|
||||
@@ -757,7 +761,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public @Transport int[] getTransportTypes() {
|
||||
@NonNull public @Transport int[] getTransportTypes() {
|
||||
return BitUtils.unpackBits(mTransportTypes);
|
||||
}
|
||||
|
||||
@@ -847,7 +851,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @param upKbps the estimated first hop upstream (device to network) bandwidth.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setLinkUpstreamBandwidthKbps(int upKbps) {
|
||||
public @NonNull NetworkCapabilities setLinkUpstreamBandwidthKbps(int upKbps) {
|
||||
mLinkUpBandwidthKbps = upKbps;
|
||||
return this;
|
||||
}
|
||||
@@ -877,7 +881,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @param downKbps the estimated first hop downstream (network to device) bandwidth.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setLinkDownstreamBandwidthKbps(int downKbps) {
|
||||
public @NonNull NetworkCapabilities setLinkDownstreamBandwidthKbps(int downKbps) {
|
||||
mLinkDownBandwidthKbps = downKbps;
|
||||
return this;
|
||||
}
|
||||
@@ -936,7 +940,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @return This NetworkCapabilities instance, to facilitate chaining.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setNetworkSpecifier(NetworkSpecifier networkSpecifier) {
|
||||
public @NonNull NetworkCapabilities setNetworkSpecifier(NetworkSpecifier networkSpecifier) {
|
||||
if (networkSpecifier != null && Long.bitCount(mTransportTypes) != 1) {
|
||||
throw new IllegalStateException("Must have a single transport specified to use " +
|
||||
"setNetworkSpecifier");
|
||||
@@ -955,20 +959,20 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @return This NetworkCapabilities instance, to facilitate chaining.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setTransportInfo(TransportInfo transportInfo) {
|
||||
public @NonNull NetworkCapabilities setTransportInfo(TransportInfo transportInfo) {
|
||||
mTransportInfo = transportInfo;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the optional bearer specific network specifier.
|
||||
* Gets the optional bearer specific network specifier. May be {@code null} if not set.
|
||||
*
|
||||
* @return The optional {@link NetworkSpecifier} specifying the bearer specific network
|
||||
* specifier. See {@link #setNetworkSpecifier}.
|
||||
* specifier or {@code null}. See {@link #setNetworkSpecifier}.
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
|
||||
public NetworkSpecifier getNetworkSpecifier() {
|
||||
public @Nullable NetworkSpecifier getNetworkSpecifier() {
|
||||
return mNetworkSpecifier;
|
||||
}
|
||||
|
||||
@@ -1015,8 +1019,6 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
/**
|
||||
* Magic value that indicates no signal strength provided. A request specifying this value is
|
||||
* always satisfied.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int SIGNAL_STRENGTH_UNSPECIFIED = Integer.MIN_VALUE;
|
||||
|
||||
@@ -1024,7 +1026,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Signal strength. This is a signed integer, and higher values indicate better signal.
|
||||
* The exact units are bearer-dependent. For example, Wi-Fi uses RSSI.
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
||||
private int mSignalStrength = SIGNAL_STRENGTH_UNSPECIFIED;
|
||||
|
||||
/**
|
||||
@@ -1041,7 +1043,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public NetworkCapabilities setSignalStrength(int signalStrength) {
|
||||
public @NonNull NetworkCapabilities setSignalStrength(int signalStrength) {
|
||||
mSignalStrength = signalStrength;
|
||||
return this;
|
||||
}
|
||||
@@ -1060,9 +1062,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Retrieves the signal strength.
|
||||
*
|
||||
* @return The bearer-specific signal strength.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public int getSignalStrength() {
|
||||
return mSignalStrength;
|
||||
}
|
||||
@@ -1120,7 +1120,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Convenience method to set the UIDs this network applies to to a single UID.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setSingleUid(int uid) {
|
||||
public @NonNull NetworkCapabilities setSingleUid(int uid) {
|
||||
final ArraySet<UidRange> identity = new ArraySet<>(1);
|
||||
identity.add(new UidRange(uid, uid));
|
||||
setUids(identity);
|
||||
@@ -1132,7 +1132,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* This makes a copy of the set so that callers can't modify it after the call.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setUids(Set<UidRange> uids) {
|
||||
public @NonNull NetworkCapabilities setUids(Set<UidRange> uids) {
|
||||
if (null == uids) {
|
||||
mUids = null;
|
||||
} else {
|
||||
@@ -1146,7 +1146,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* This returns a copy of the set so that callers can't modify the original object.
|
||||
* @hide
|
||||
*/
|
||||
public Set<UidRange> getUids() {
|
||||
public @Nullable Set<UidRange> getUids() {
|
||||
return null == mUids ? null : new ArraySet<>(mUids);
|
||||
}
|
||||
|
||||
@@ -1179,7 +1179,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public boolean equalsUids(NetworkCapabilities nc) {
|
||||
public boolean equalsUids(@NonNull NetworkCapabilities nc) {
|
||||
Set<UidRange> comparedUids = nc.mUids;
|
||||
if (null == comparedUids) return null == mUids;
|
||||
if (null == mUids) return false;
|
||||
@@ -1212,7 +1212,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @see #appliesToUid
|
||||
* @hide
|
||||
*/
|
||||
public boolean satisfiedByUids(NetworkCapabilities nc) {
|
||||
public boolean satisfiedByUids(@NonNull NetworkCapabilities nc) {
|
||||
if (null == nc.mUids || null == mUids) return true; // The network satisfies everything.
|
||||
for (UidRange requiredRange : mUids) {
|
||||
if (requiredRange.contains(nc.mEstablishingVpnAppUid)) return true;
|
||||
@@ -1232,7 +1232,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public boolean appliesToUidRange(UidRange requiredRange) {
|
||||
public boolean appliesToUidRange(@Nullable UidRange requiredRange) {
|
||||
if (null == mUids) return true;
|
||||
for (UidRange uidRange : mUids) {
|
||||
if (uidRange.containsRange(requiredRange)) {
|
||||
@@ -1247,7 +1247,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* NetworkCapabilities apply to.
|
||||
* nc is assumed nonnull.
|
||||
*/
|
||||
private void combineUids(NetworkCapabilities nc) {
|
||||
private void combineUids(@NonNull NetworkCapabilities nc) {
|
||||
if (null == nc.mUids || null == mUids) {
|
||||
mUids = null;
|
||||
return;
|
||||
@@ -1268,7 +1268,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Sets the SSID of this network.
|
||||
* @hide
|
||||
*/
|
||||
public NetworkCapabilities setSSID(String ssid) {
|
||||
public @NonNull NetworkCapabilities setSSID(@Nullable String ssid) {
|
||||
mSSID = ssid;
|
||||
return this;
|
||||
}
|
||||
@@ -1277,7 +1277,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Gets the SSID of this network, or null if none or unknown.
|
||||
* @hide
|
||||
*/
|
||||
public String getSSID() {
|
||||
public @Nullable String getSSID() {
|
||||
return mSSID;
|
||||
}
|
||||
|
||||
@@ -1285,7 +1285,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Tests if the SSID of this network is the same as the SSID of the passed network.
|
||||
* @hide
|
||||
*/
|
||||
public boolean equalsSSID(NetworkCapabilities nc) {
|
||||
public boolean equalsSSID(@NonNull NetworkCapabilities nc) {
|
||||
return Objects.equals(mSSID, nc.mSSID);
|
||||
}
|
||||
|
||||
@@ -1293,7 +1293,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* Check if the SSID requirements of this object are matched by the passed object.
|
||||
* @hide
|
||||
*/
|
||||
public boolean satisfiedBySSID(NetworkCapabilities nc) {
|
||||
public boolean satisfiedBySSID(@NonNull NetworkCapabilities nc) {
|
||||
return mSSID == null || mSSID.equals(nc.mSSID);
|
||||
}
|
||||
|
||||
@@ -1304,7 +1304,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* equal.
|
||||
* @hide
|
||||
*/
|
||||
private void combineSSIDs(NetworkCapabilities nc) {
|
||||
private void combineSSIDs(@NonNull NetworkCapabilities nc) {
|
||||
if (mSSID != null && !mSSID.equals(nc.mSSID)) {
|
||||
throw new IllegalStateException("Can't combine two SSIDs");
|
||||
}
|
||||
@@ -1319,7 +1319,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* both lists will never be satisfied.
|
||||
* @hide
|
||||
*/
|
||||
public void combineCapabilities(NetworkCapabilities nc) {
|
||||
public void combineCapabilities(@NonNull NetworkCapabilities nc) {
|
||||
combineNetCapabilities(nc);
|
||||
combineTransportTypes(nc);
|
||||
combineLinkBandwidths(nc);
|
||||
@@ -1359,7 +1359,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*/
|
||||
@TestApi
|
||||
@SystemApi
|
||||
public boolean satisfiedByNetworkCapabilities(NetworkCapabilities nc) {
|
||||
public boolean satisfiedByNetworkCapabilities(@Nullable NetworkCapabilities nc) {
|
||||
return satisfiedByNetworkCapabilities(nc, false);
|
||||
}
|
||||
|
||||
@@ -1370,7 +1370,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public boolean satisfiedByImmutableNetworkCapabilities(NetworkCapabilities nc) {
|
||||
public boolean satisfiedByImmutableNetworkCapabilities(@Nullable NetworkCapabilities nc) {
|
||||
return satisfiedByNetworkCapabilities(nc, true);
|
||||
}
|
||||
|
||||
@@ -1381,7 +1381,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public String describeImmutableDifferences(NetworkCapabilities that) {
|
||||
public String describeImmutableDifferences(@Nullable NetworkCapabilities that) {
|
||||
if (that == null) {
|
||||
return "other NetworkCapabilities was null";
|
||||
}
|
||||
@@ -1420,7 +1420,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public boolean equalRequestableCapabilities(NetworkCapabilities nc) {
|
||||
public boolean equalRequestableCapabilities(@Nullable NetworkCapabilities nc) {
|
||||
if (nc == null) return false;
|
||||
return (equalsNetCapabilitiesRequestable(nc) &&
|
||||
equalsTransportTypes(nc) &&
|
||||
@@ -1428,7 +1428,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
public boolean equals(@Nullable Object obj) {
|
||||
if (obj == null || (obj instanceof NetworkCapabilities == false)) return false;
|
||||
NetworkCapabilities that = (NetworkCapabilities) obj;
|
||||
return (equalsNetCapabilities(that)
|
||||
@@ -1502,7 +1502,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
};
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
public @NonNull String toString() {
|
||||
final StringBuilder sb = new StringBuilder("[");
|
||||
if (0 != mTransportTypes) {
|
||||
sb.append(" Transports: ");
|
||||
@@ -1561,8 +1561,8 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static void appendStringRepresentationOfBitMaskToStringBuilder(StringBuilder sb,
|
||||
long bitMask, NameOf nameFetcher, String separator) {
|
||||
public static void appendStringRepresentationOfBitMaskToStringBuilder(@NonNull StringBuilder sb,
|
||||
long bitMask, @NonNull NameOf nameFetcher, @NonNull String separator) {
|
||||
int bitPos = 0;
|
||||
boolean firstElementAdded = false;
|
||||
while (bitMask != 0) {
|
||||
@@ -1580,7 +1580,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public void writeToProto(ProtoOutputStream proto, long fieldId) {
|
||||
public void writeToProto(@NonNull ProtoOutputStream proto, long fieldId) {
|
||||
final long token = proto.start(fieldId);
|
||||
|
||||
for (int transport : getTransportTypes()) {
|
||||
@@ -1610,7 +1610,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static String capabilityNamesOf(@NetCapability int[] capabilities) {
|
||||
public static @NonNull String capabilityNamesOf(@Nullable @NetCapability int[] capabilities) {
|
||||
StringJoiner joiner = new StringJoiner("|");
|
||||
if (capabilities != null) {
|
||||
for (int c : capabilities) {
|
||||
@@ -1623,7 +1623,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static String capabilityNameOf(@NetCapability int capability) {
|
||||
public static @NonNull String capabilityNameOf(@NetCapability int capability) {
|
||||
switch (capability) {
|
||||
case NET_CAPABILITY_MMS: return "MMS";
|
||||
case NET_CAPABILITY_SUPL: return "SUPL";
|
||||
@@ -1658,7 +1658,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public static String transportNamesOf(@Transport int[] types) {
|
||||
public static @NonNull String transportNamesOf(@Nullable @Transport int[] types) {
|
||||
StringJoiner joiner = new StringJoiner("|");
|
||||
if (types != null) {
|
||||
for (int t : types) {
|
||||
@@ -1671,7 +1671,7 @@ public final class NetworkCapabilities implements Parcelable {
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
public static String transportNameOf(@Transport int transport) {
|
||||
public static @NonNull String transportNameOf(@Transport int transport) {
|
||||
if (!isValidTransport(transport)) {
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.net;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.UnsupportedAppUsage;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
@@ -138,7 +139,9 @@ public class NetworkInfo implements Parcelable {
|
||||
private int mSubtype;
|
||||
private String mTypeName;
|
||||
private String mSubtypeName;
|
||||
@NonNull
|
||||
private State mState;
|
||||
@NonNull
|
||||
private DetailedState mDetailedState;
|
||||
private String mReason;
|
||||
private String mExtraInfo;
|
||||
@@ -451,7 +454,7 @@ public class NetworkInfo implements Parcelable {
|
||||
* the device and let apps react more easily and quickly to changes.
|
||||
*/
|
||||
@Deprecated
|
||||
public DetailedState getDetailedState() {
|
||||
public @NonNull DetailedState getDetailedState() {
|
||||
synchronized (this) {
|
||||
return mDetailedState;
|
||||
}
|
||||
|
||||
@@ -347,7 +347,7 @@ public class NetworkRequest implements Parcelable {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public Builder setSignalStrength(int signalStrength) {
|
||||
public @NonNull Builder setSignalStrength(int signalStrength) {
|
||||
mNetworkCapabilities.setSignalStrength(signalStrength);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.net;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
import android.annotation.UnsupportedAppUsage;
|
||||
@@ -112,7 +113,8 @@ public final class RouteInfo implements Parcelable {
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public RouteInfo(IpPrefix destination, InetAddress gateway, String iface, int type) {
|
||||
public RouteInfo(@Nullable IpPrefix destination, @Nullable InetAddress gateway,
|
||||
@Nullable String iface, int type) {
|
||||
switch (type) {
|
||||
case RTN_UNICAST:
|
||||
case RTN_UNREACHABLE:
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.net.apf;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.TestApi;
|
||||
import android.content.Context;
|
||||
@@ -115,14 +116,14 @@ public final class ApfCapabilities implements Parcelable {
|
||||
/**
|
||||
* @return Whether the APF Filter in the device should filter out IEEE 802.3 Frames.
|
||||
*/
|
||||
public static boolean getApfDrop8023Frames(Context context) {
|
||||
public static boolean getApfDrop8023Frames(@NonNull Context context) {
|
||||
return context.getResources().getBoolean(R.bool.config_apfDrop802_3Frames);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return An array of blacklisted EtherType, packets with EtherTypes within it will be dropped.
|
||||
*/
|
||||
public static int[] getApfEthTypeBlackList(Context context) {
|
||||
public static @NonNull int[] getApfEthTypeBlackList(@NonNull Context context) {
|
||||
return context.getResources().getIntArray(R.array.config_apfEthTypeBlackList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2174,7 +2174,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
if (VDBG) log("identical MTU - not setting");
|
||||
return;
|
||||
}
|
||||
if (LinkProperties.isValidMtu(mtu, newLp.hasGlobalIPv6Address()) == false) {
|
||||
if (!LinkProperties.isValidMtu(mtu, newLp.hasGlobalIpv6Address())) {
|
||||
if (mtu != 0) loge("Unexpected mtu value: " + mtu + ", " + iface);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -107,8 +107,8 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
||||
// Only run clat on networks that have a global IPv6 address and don't have a native IPv4
|
||||
// address.
|
||||
LinkProperties lp = nai.linkProperties;
|
||||
final boolean isIpv6OnlyNetwork = (lp != null) && lp.hasGlobalIPv6Address()
|
||||
&& !lp.hasIPv4Address();
|
||||
final boolean isIpv6OnlyNetwork = (lp != null) && lp.hasGlobalIpv6Address()
|
||||
&& !lp.hasIpv4Address();
|
||||
|
||||
// If the network tells us it doesn't use clat, respect that.
|
||||
final boolean skip464xlat = (nai.netMisc() != null) && nai.netMisc().skip464xlat;
|
||||
|
||||
@@ -34,10 +34,12 @@ import android.util.Pair;
|
||||
|
||||
import com.android.internal.util.IndentingPrintWriter;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.Inet6Address;
|
||||
import java.net.InetAddress;
|
||||
@@ -48,17 +50,13 @@ import java.net.SocketException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* NetworkDiagnostics
|
||||
@@ -186,7 +184,7 @@ public class NetworkDiagnostics {
|
||||
// TODO: we could use mLinkProperties.isReachable(TEST_DNS6) here, because we won't set any
|
||||
// DNS servers for which isReachable() is false, but since this is diagnostic code, be extra
|
||||
// careful.
|
||||
if (mLinkProperties.hasGlobalIPv6Address() || mLinkProperties.hasIPv6DefaultRoute()) {
|
||||
if (mLinkProperties.hasGlobalIpv6Address() || mLinkProperties.hasIpv6DefaultRoute()) {
|
||||
mLinkProperties.addDnsServer(TEST_DNS6);
|
||||
}
|
||||
|
||||
|
||||
@@ -81,14 +81,14 @@ public class LinkAddressTest {
|
||||
assertEquals(25, address.getPrefixLength());
|
||||
assertEquals(0, address.getFlags());
|
||||
assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
|
||||
assertTrue(address.isIPv4());
|
||||
assertTrue(address.isIpv4());
|
||||
|
||||
address = new LinkAddress(V6_ADDRESS, 127);
|
||||
assertEquals(V6_ADDRESS, address.getAddress());
|
||||
assertEquals(127, address.getPrefixLength());
|
||||
assertEquals(0, address.getFlags());
|
||||
assertEquals(RT_SCOPE_UNIVERSE, address.getScope());
|
||||
assertTrue(address.isIPv6());
|
||||
assertTrue(address.isIpv6());
|
||||
|
||||
// Nonsensical flags/scopes or combinations thereof are acceptable.
|
||||
address = new LinkAddress(V6 + "/64", IFA_F_DEPRECATED | IFA_F_PERMANENT, RT_SCOPE_LINK);
|
||||
@@ -96,14 +96,14 @@ public class LinkAddressTest {
|
||||
assertEquals(64, address.getPrefixLength());
|
||||
assertEquals(IFA_F_DEPRECATED | IFA_F_PERMANENT, address.getFlags());
|
||||
assertEquals(RT_SCOPE_LINK, address.getScope());
|
||||
assertTrue(address.isIPv6());
|
||||
assertTrue(address.isIpv6());
|
||||
|
||||
address = new LinkAddress(V4 + "/23", 123, 456);
|
||||
assertEquals(V4_ADDRESS, address.getAddress());
|
||||
assertEquals(23, address.getPrefixLength());
|
||||
assertEquals(123, address.getFlags());
|
||||
assertEquals(456, address.getScope());
|
||||
assertTrue(address.isIPv4());
|
||||
assertTrue(address.isIpv4());
|
||||
|
||||
// InterfaceAddress doesn't have a constructor. Fetch some from an interface.
|
||||
List<InterfaceAddress> addrs = NetworkInterface.getByName("lo").getInterfaceAddresses();
|
||||
|
||||
@@ -405,8 +405,8 @@ public class LinkPropertiesTest {
|
||||
LinkProperties lp = new LinkProperties();
|
||||
|
||||
// No addresses.
|
||||
assertFalse(lp.hasIPv4Address());
|
||||
assertFalse(lp.hasGlobalIPv6Address());
|
||||
assertFalse(lp.hasIpv4Address());
|
||||
assertFalse(lp.hasGlobalIpv6Address());
|
||||
|
||||
// Addresses on stacked links don't count.
|
||||
LinkProperties stacked = new LinkProperties();
|
||||
@@ -414,53 +414,53 @@ public class LinkPropertiesTest {
|
||||
lp.addStackedLink(stacked);
|
||||
stacked.addLinkAddress(LINKADDRV4);
|
||||
stacked.addLinkAddress(LINKADDRV6);
|
||||
assertTrue(stacked.hasIPv4Address());
|
||||
assertTrue(stacked.hasGlobalIPv6Address());
|
||||
assertFalse(lp.hasIPv4Address());
|
||||
assertFalse(lp.hasGlobalIPv6Address());
|
||||
assertTrue(stacked.hasIpv4Address());
|
||||
assertTrue(stacked.hasGlobalIpv6Address());
|
||||
assertFalse(lp.hasIpv4Address());
|
||||
assertFalse(lp.hasGlobalIpv6Address());
|
||||
lp.removeStackedLink("stacked");
|
||||
assertFalse(lp.hasIPv4Address());
|
||||
assertFalse(lp.hasGlobalIPv6Address());
|
||||
assertFalse(lp.hasIpv4Address());
|
||||
assertFalse(lp.hasGlobalIpv6Address());
|
||||
|
||||
// Addresses on the base link.
|
||||
// Check the return values of hasIPvXAddress and ensure the add/remove methods return true
|
||||
// Check the return values of hasIpvXAddress and ensure the add/remove methods return true
|
||||
// iff something changes.
|
||||
assertEquals(0, lp.getLinkAddresses().size());
|
||||
assertTrue(lp.addLinkAddress(LINKADDRV6));
|
||||
assertEquals(1, lp.getLinkAddresses().size());
|
||||
assertFalse(lp.hasIPv4Address());
|
||||
assertTrue(lp.hasGlobalIPv6Address());
|
||||
assertFalse(lp.hasIpv4Address());
|
||||
assertTrue(lp.hasGlobalIpv6Address());
|
||||
|
||||
assertTrue(lp.removeLinkAddress(LINKADDRV6));
|
||||
assertEquals(0, lp.getLinkAddresses().size());
|
||||
|
||||
assertTrue(lp.addLinkAddress(LINKADDRV6LINKLOCAL));
|
||||
assertEquals(1, lp.getLinkAddresses().size());
|
||||
assertFalse(lp.hasGlobalIPv6Address());
|
||||
assertFalse(lp.hasGlobalIpv6Address());
|
||||
|
||||
assertTrue(lp.addLinkAddress(LINKADDRV4));
|
||||
assertEquals(2, lp.getLinkAddresses().size());
|
||||
assertTrue(lp.hasIPv4Address());
|
||||
assertFalse(lp.hasGlobalIPv6Address());
|
||||
assertTrue(lp.hasIpv4Address());
|
||||
assertFalse(lp.hasGlobalIpv6Address());
|
||||
|
||||
assertTrue(lp.addLinkAddress(LINKADDRV6));
|
||||
assertEquals(3, lp.getLinkAddresses().size());
|
||||
assertTrue(lp.hasIPv4Address());
|
||||
assertTrue(lp.hasGlobalIPv6Address());
|
||||
assertTrue(lp.hasIpv4Address());
|
||||
assertTrue(lp.hasGlobalIpv6Address());
|
||||
|
||||
assertTrue(lp.removeLinkAddress(LINKADDRV6LINKLOCAL));
|
||||
assertEquals(2, lp.getLinkAddresses().size());
|
||||
assertTrue(lp.hasIPv4Address());
|
||||
assertTrue(lp.hasGlobalIPv6Address());
|
||||
assertTrue(lp.hasIpv4Address());
|
||||
assertTrue(lp.hasGlobalIpv6Address());
|
||||
|
||||
// Adding an address twice has no effect.
|
||||
// Removing an address that's not present has no effect.
|
||||
assertFalse(lp.addLinkAddress(LINKADDRV4));
|
||||
assertEquals(2, lp.getLinkAddresses().size());
|
||||
assertTrue(lp.hasIPv4Address());
|
||||
assertTrue(lp.hasIpv4Address());
|
||||
assertTrue(lp.removeLinkAddress(LINKADDRV4));
|
||||
assertEquals(1, lp.getLinkAddresses().size());
|
||||
assertFalse(lp.hasIPv4Address());
|
||||
assertFalse(lp.hasIpv4Address());
|
||||
assertFalse(lp.removeLinkAddress(LINKADDRV4));
|
||||
assertEquals(1, lp.getLinkAddresses().size());
|
||||
|
||||
@@ -546,8 +546,8 @@ public class LinkPropertiesTest {
|
||||
assertFalse("v4only:addr+dns", lp4.isProvisioned());
|
||||
lp4.addRoute(new RouteInfo(GATEWAY1));
|
||||
assertTrue("v4only:addr+dns+route", lp4.isProvisioned());
|
||||
assertTrue("v4only:addr+dns+route", lp4.isIPv4Provisioned());
|
||||
assertFalse("v4only:addr+dns+route", lp4.isIPv6Provisioned());
|
||||
assertTrue("v4only:addr+dns+route", lp4.isIpv4Provisioned());
|
||||
assertFalse("v4only:addr+dns+route", lp4.isIpv6Provisioned());
|
||||
|
||||
LinkProperties lp6 = new LinkProperties();
|
||||
assertFalse("v6only:empty", lp6.isProvisioned());
|
||||
@@ -558,11 +558,11 @@ public class LinkPropertiesTest {
|
||||
lp6.addRoute(new RouteInfo(GATEWAY61));
|
||||
assertFalse("v6only:fe80+dns+route", lp6.isProvisioned());
|
||||
lp6.addLinkAddress(LINKADDRV6);
|
||||
assertTrue("v6only:fe80+global+dns+route", lp6.isIPv6Provisioned());
|
||||
assertTrue("v6only:fe80+global+dns+route", lp6.isIpv6Provisioned());
|
||||
assertTrue("v6only:fe80+global+dns+route", lp6.isProvisioned());
|
||||
lp6.removeLinkAddress(LINKADDRV6LINKLOCAL);
|
||||
assertFalse("v6only:global+dns+route", lp6.isIPv4Provisioned());
|
||||
assertTrue("v6only:global+dns+route", lp6.isIPv6Provisioned());
|
||||
assertFalse("v6only:global+dns+route", lp6.isIpv4Provisioned());
|
||||
assertTrue("v6only:global+dns+route", lp6.isIpv6Provisioned());
|
||||
assertTrue("v6only:global+dns+route", lp6.isProvisioned());
|
||||
|
||||
LinkProperties lp46 = new LinkProperties();
|
||||
@@ -572,12 +572,12 @@ public class LinkPropertiesTest {
|
||||
lp46.addDnsServer(DNS6);
|
||||
assertFalse("dualstack:missing-routes", lp46.isProvisioned());
|
||||
lp46.addRoute(new RouteInfo(GATEWAY1));
|
||||
assertTrue("dualstack:v4-provisioned", lp46.isIPv4Provisioned());
|
||||
assertFalse("dualstack:v4-provisioned", lp46.isIPv6Provisioned());
|
||||
assertTrue("dualstack:v4-provisioned", lp46.isIpv4Provisioned());
|
||||
assertFalse("dualstack:v4-provisioned", lp46.isIpv6Provisioned());
|
||||
assertTrue("dualstack:v4-provisioned", lp46.isProvisioned());
|
||||
lp46.addRoute(new RouteInfo(GATEWAY61));
|
||||
assertTrue("dualstack:both-provisioned", lp46.isIPv4Provisioned());
|
||||
assertTrue("dualstack:both-provisioned", lp46.isIPv6Provisioned());
|
||||
assertTrue("dualstack:both-provisioned", lp46.isIpv4Provisioned());
|
||||
assertTrue("dualstack:both-provisioned", lp46.isIpv6Provisioned());
|
||||
assertTrue("dualstack:both-provisioned", lp46.isProvisioned());
|
||||
|
||||
// A link with an IPv6 address and default route, but IPv4 DNS server.
|
||||
@@ -585,8 +585,8 @@ public class LinkPropertiesTest {
|
||||
mixed.addLinkAddress(LINKADDRV6);
|
||||
mixed.addDnsServer(DNS1);
|
||||
mixed.addRoute(new RouteInfo(GATEWAY61));
|
||||
assertFalse("mixed:addr6+route6+dns4", mixed.isIPv4Provisioned());
|
||||
assertFalse("mixed:addr6+route6+dns4", mixed.isIPv6Provisioned());
|
||||
assertFalse("mixed:addr6+route6+dns4", mixed.isIpv4Provisioned());
|
||||
assertFalse("mixed:addr6+route6+dns4", mixed.isIpv6Provisioned());
|
||||
assertFalse("mixed:addr6+route6+dns4", mixed.isProvisioned());
|
||||
}
|
||||
|
||||
@@ -617,16 +617,16 @@ public class LinkPropertiesTest {
|
||||
v6lp.addLinkAddress(LINKADDRV6);
|
||||
v6lp.addRoute(new RouteInfo(GATEWAY61));
|
||||
v6lp.addDnsServer(DNS6);
|
||||
assertFalse(v6lp.isIPv4Provisioned());
|
||||
assertTrue(v6lp.isIPv6Provisioned());
|
||||
assertFalse(v6lp.isIpv4Provisioned());
|
||||
assertTrue(v6lp.isIpv6Provisioned());
|
||||
assertTrue(v6lp.isProvisioned());
|
||||
|
||||
LinkProperties v46lp = new LinkProperties(v6lp);
|
||||
v46lp.addLinkAddress(LINKADDRV4);
|
||||
v46lp.addRoute(new RouteInfo(GATEWAY1));
|
||||
v46lp.addDnsServer(DNS1);
|
||||
assertTrue(v46lp.isIPv4Provisioned());
|
||||
assertTrue(v46lp.isIPv6Provisioned());
|
||||
assertTrue(v46lp.isIpv4Provisioned());
|
||||
assertTrue(v46lp.isIpv6Provisioned());
|
||||
assertTrue(v46lp.isProvisioned());
|
||||
|
||||
assertEquals(ProvisioningChange.STILL_PROVISIONED,
|
||||
|
||||
Reference in New Issue
Block a user