Merge "Add "not congested" network capability."
This commit is contained in:
@@ -107,6 +107,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
NET_CAPABILITY_CAPTIVE_PORTAL,
|
NET_CAPABILITY_CAPTIVE_PORTAL,
|
||||||
NET_CAPABILITY_NOT_ROAMING,
|
NET_CAPABILITY_NOT_ROAMING,
|
||||||
NET_CAPABILITY_FOREGROUND,
|
NET_CAPABILITY_FOREGROUND,
|
||||||
|
NET_CAPABILITY_NOT_CONGESTED,
|
||||||
})
|
})
|
||||||
public @interface NetCapability { }
|
public @interface NetCapability { }
|
||||||
|
|
||||||
@@ -234,8 +235,17 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
public static final int NET_CAPABILITY_FOREGROUND = 19;
|
public static final int NET_CAPABILITY_FOREGROUND = 19;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates that this network is not congested.
|
||||||
|
* <p>
|
||||||
|
* When a network is congested, the device should defer network traffic that
|
||||||
|
* can be done at a later time without breaking developer contracts.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int NET_CAPABILITY_NOT_CONGESTED = 20;
|
||||||
|
|
||||||
private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS;
|
private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS;
|
||||||
private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_FOREGROUND;
|
private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_NOT_CONGESTED;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Network capabilities that are expected to be mutable, i.e., can change while a particular
|
* Network capabilities that are expected to be mutable, i.e., can change while a particular
|
||||||
@@ -248,7 +258,8 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
(1 << NET_CAPABILITY_VALIDATED) |
|
(1 << NET_CAPABILITY_VALIDATED) |
|
||||||
(1 << NET_CAPABILITY_CAPTIVE_PORTAL) |
|
(1 << NET_CAPABILITY_CAPTIVE_PORTAL) |
|
||||||
(1 << NET_CAPABILITY_NOT_ROAMING) |
|
(1 << NET_CAPABILITY_NOT_ROAMING) |
|
||||||
(1 << NET_CAPABILITY_FOREGROUND);
|
(1 << NET_CAPABILITY_FOREGROUND) |
|
||||||
|
(1 << NET_CAPABILITY_NOT_CONGESTED);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Network capabilities that are not allowed in NetworkRequests. This exists because the
|
* Network capabilities that are not allowed in NetworkRequests. This exists because the
|
||||||
@@ -386,12 +397,9 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
public String describeFirstNonRequestableCapability() {
|
public String describeFirstNonRequestableCapability() {
|
||||||
if (hasCapability(NET_CAPABILITY_VALIDATED)) return "NET_CAPABILITY_VALIDATED";
|
final long nonRequestable = (mNetworkCapabilities & NON_REQUESTABLE_CAPABILITIES);
|
||||||
if (hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL)) return "NET_CAPABILITY_CAPTIVE_PORTAL";
|
if (nonRequestable != 0) {
|
||||||
if (hasCapability(NET_CAPABILITY_FOREGROUND)) return "NET_CAPABILITY_FOREGROUND";
|
return capabilityNameOf(BitUtils.unpackBits(nonRequestable)[0]);
|
||||||
// This cannot happen unless the preceding checks are incomplete.
|
|
||||||
if ((mNetworkCapabilities & NON_REQUESTABLE_CAPABILITIES) != 0) {
|
|
||||||
return "unknown non-requestable capabilities " + Long.toHexString(mNetworkCapabilities);
|
|
||||||
}
|
}
|
||||||
if (mLinkUpBandwidthKbps != 0 || mLinkDownBandwidthKbps != 0) return "link bandwidth";
|
if (mLinkUpBandwidthKbps != 0 || mLinkDownBandwidthKbps != 0) return "link bandwidth";
|
||||||
if (hasSignalStrength()) return "signalStrength";
|
if (hasSignalStrength()) return "signalStrength";
|
||||||
@@ -1056,6 +1064,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
case NET_CAPABILITY_CAPTIVE_PORTAL: return "CAPTIVE_PORTAL";
|
case NET_CAPABILITY_CAPTIVE_PORTAL: return "CAPTIVE_PORTAL";
|
||||||
case NET_CAPABILITY_NOT_ROAMING: return "NOT_ROAMING";
|
case NET_CAPABILITY_NOT_ROAMING: return "NOT_ROAMING";
|
||||||
case NET_CAPABILITY_FOREGROUND: return "FOREGROUND";
|
case NET_CAPABILITY_FOREGROUND: return "FOREGROUND";
|
||||||
|
case NET_CAPABILITY_NOT_CONGESTED: return "NOT_CONGESTED";
|
||||||
default: return Integer.toString(capability);
|
default: return Integer.toString(capability);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import static android.content.pm.UserInfo.FLAG_PRIMARY;
|
|||||||
import static android.content.pm.UserInfo.FLAG_RESTRICTED;
|
import static android.content.pm.UserInfo.FLAG_RESTRICTED;
|
||||||
import static android.net.NetworkCapabilities.LINK_BANDWIDTH_UNSPECIFIED;
|
import static android.net.NetworkCapabilities.LINK_BANDWIDTH_UNSPECIFIED;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||||
@@ -436,11 +437,13 @@ public class VpnTest {
|
|||||||
.addTransportType(TRANSPORT_CELLULAR)
|
.addTransportType(TRANSPORT_CELLULAR)
|
||||||
.addCapability(NET_CAPABILITY_INTERNET)
|
.addCapability(NET_CAPABILITY_INTERNET)
|
||||||
.addCapability(NET_CAPABILITY_NOT_METERED)
|
.addCapability(NET_CAPABILITY_NOT_METERED)
|
||||||
|
.addCapability(NET_CAPABILITY_NOT_CONGESTED)
|
||||||
.setLinkDownstreamBandwidthKbps(10));
|
.setLinkDownstreamBandwidthKbps(10));
|
||||||
networks.put(wifi, new NetworkCapabilities()
|
networks.put(wifi, new NetworkCapabilities()
|
||||||
.addTransportType(TRANSPORT_WIFI)
|
.addTransportType(TRANSPORT_WIFI)
|
||||||
.addCapability(NET_CAPABILITY_INTERNET)
|
.addCapability(NET_CAPABILITY_INTERNET)
|
||||||
.addCapability(NET_CAPABILITY_NOT_ROAMING)
|
.addCapability(NET_CAPABILITY_NOT_ROAMING)
|
||||||
|
.addCapability(NET_CAPABILITY_NOT_CONGESTED)
|
||||||
.setLinkUpstreamBandwidthKbps(20));
|
.setLinkUpstreamBandwidthKbps(20));
|
||||||
setMockedNetworks(networks);
|
setMockedNetworks(networks);
|
||||||
|
|
||||||
@@ -454,6 +457,7 @@ public class VpnTest {
|
|||||||
assertEquals(LINK_BANDWIDTH_UNSPECIFIED, caps.getLinkUpstreamBandwidthKbps());
|
assertEquals(LINK_BANDWIDTH_UNSPECIFIED, caps.getLinkUpstreamBandwidthKbps());
|
||||||
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
||||||
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
||||||
|
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
|
||||||
|
|
||||||
Vpn.updateCapabilities(mConnectivityManager, new Network[] { mobile }, caps);
|
Vpn.updateCapabilities(mConnectivityManager, new Network[] { mobile }, caps);
|
||||||
assertTrue(caps.hasTransport(TRANSPORT_VPN));
|
assertTrue(caps.hasTransport(TRANSPORT_VPN));
|
||||||
@@ -463,6 +467,7 @@ public class VpnTest {
|
|||||||
assertEquals(LINK_BANDWIDTH_UNSPECIFIED, caps.getLinkUpstreamBandwidthKbps());
|
assertEquals(LINK_BANDWIDTH_UNSPECIFIED, caps.getLinkUpstreamBandwidthKbps());
|
||||||
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
||||||
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
||||||
|
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
|
||||||
|
|
||||||
Vpn.updateCapabilities(mConnectivityManager, new Network[] { wifi }, caps);
|
Vpn.updateCapabilities(mConnectivityManager, new Network[] { wifi }, caps);
|
||||||
assertTrue(caps.hasTransport(TRANSPORT_VPN));
|
assertTrue(caps.hasTransport(TRANSPORT_VPN));
|
||||||
@@ -472,6 +477,7 @@ public class VpnTest {
|
|||||||
assertEquals(20, caps.getLinkUpstreamBandwidthKbps());
|
assertEquals(20, caps.getLinkUpstreamBandwidthKbps());
|
||||||
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
||||||
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
||||||
|
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
|
||||||
|
|
||||||
Vpn.updateCapabilities(mConnectivityManager, new Network[] { mobile, wifi }, caps);
|
Vpn.updateCapabilities(mConnectivityManager, new Network[] { mobile, wifi }, caps);
|
||||||
assertTrue(caps.hasTransport(TRANSPORT_VPN));
|
assertTrue(caps.hasTransport(TRANSPORT_VPN));
|
||||||
@@ -481,6 +487,7 @@ public class VpnTest {
|
|||||||
assertEquals(20, caps.getLinkUpstreamBandwidthKbps());
|
assertEquals(20, caps.getLinkUpstreamBandwidthKbps());
|
||||||
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_METERED));
|
||||||
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
assertFalse(caps.hasCapability(NET_CAPABILITY_NOT_ROAMING));
|
||||||
|
assertTrue(caps.hasCapability(NET_CAPABILITY_NOT_CONGESTED));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user