From f8eb713874d4b9259bfbd522ca6579b1af66eac0 Mon Sep 17 00:00:00 2001 From: Sooraj Sasindran Date: Mon, 17 Jan 2022 14:37:19 -0800 Subject: [PATCH] Add low latency and high bandwidth network capabilities Bug: 194332512 Test: build Change-Id: I415ca1ba90ea54c4106f806fe855bcb84d3e38ba --- framework/api/current.txt | 2 ++ .../src/android/net/NetworkCapabilities.java | 16 ++++++++++- .../android/net/NetworkCapabilitiesTest.java | 27 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/framework/api/current.txt b/framework/api/current.txt index ce0c86820a..a373b71e01 100644 --- a/framework/api/current.txt +++ b/framework/api/current.txt @@ -326,6 +326,8 @@ package android.net { field public static final int NET_CAPABILITY_NOT_ROAMING = 18; // 0x12 field public static final int NET_CAPABILITY_NOT_SUSPENDED = 21; // 0x15 field public static final int NET_CAPABILITY_NOT_VPN = 15; // 0xf + field public static final int NET_CAPABILITY_PRIORITIZE_BANDWIDTH = 35; // 0x23 + field public static final int NET_CAPABILITY_PRIORITIZE_LATENCY = 34; // 0x22 field public static final int NET_CAPABILITY_RCS = 8; // 0x8 field public static final int NET_CAPABILITY_SUPL = 1; // 0x1 field public static final int NET_CAPABILITY_TEMPORARILY_NOT_METERED = 25; // 0x19 diff --git a/framework/src/android/net/NetworkCapabilities.java b/framework/src/android/net/NetworkCapabilities.java index c98be471b6..4ae3a0650b 100644 --- a/framework/src/android/net/NetworkCapabilities.java +++ b/framework/src/android/net/NetworkCapabilities.java @@ -357,6 +357,8 @@ public final class NetworkCapabilities implements Parcelable { NET_CAPABILITY_BIP, NET_CAPABILITY_HEAD_UNIT, NET_CAPABILITY_MMTEL, + NET_CAPABILITY_PRIORITIZE_LATENCY, + NET_CAPABILITY_PRIORITIZE_BANDWIDTH, }) public @interface NetCapability { } @@ -600,8 +602,18 @@ public final class NetworkCapabilities implements Parcelable { */ public static final int NET_CAPABILITY_MMTEL = 33; + /** + * Indicates that this network should be able to prioritize latency for the internet. + */ + public static final int NET_CAPABILITY_PRIORITIZE_LATENCY = 34; + + /** + * Indicates that this network should be able to prioritize bandwidth for the internet. + */ + public static final int NET_CAPABILITY_PRIORITIZE_BANDWIDTH = 35; + private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS; - private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_MMTEL; + private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_PRIORITIZE_BANDWIDTH; /** * Network capabilities that are expected to be mutable, i.e., can change while a particular @@ -2241,6 +2253,8 @@ public final class NetworkCapabilities implements Parcelable { case NET_CAPABILITY_BIP: return "BIP"; case NET_CAPABILITY_HEAD_UNIT: return "HEAD_UNIT"; case NET_CAPABILITY_MMTEL: return "MMTEL"; + case NET_CAPABILITY_PRIORITIZE_LATENCY: return "PRIORITIZE_LATENCY"; + case NET_CAPABILITY_PRIORITIZE_BANDWIDTH: return "PRIORITIZE_BANDWIDTH"; default: return Integer.toString(capability); } } diff --git a/tests/common/java/android/net/NetworkCapabilitiesTest.java b/tests/common/java/android/net/NetworkCapabilitiesTest.java index d03629d6ee..bea00a9171 100644 --- a/tests/common/java/android/net/NetworkCapabilitiesTest.java +++ b/tests/common/java/android/net/NetworkCapabilitiesTest.java @@ -34,6 +34,8 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN; import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID; import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE; import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY; +import static android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH; +import static android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY; import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED; import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.NET_CAPABILITY_WIFI_P2P; @@ -415,6 +417,31 @@ public class NetworkCapabilitiesTest { assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities())); } + @Test @IgnoreUpTo(SC_V2) // TODO: Use to Build.VERSION_CODES.SC_V2 when available + public void testPrioritizeLatencyAndBandwidth() { + NetworkCapabilities netCap = new NetworkCapabilities(); + netCap.addCapability(NET_CAPABILITY_PRIORITIZE_LATENCY); + netCap.addCapability(NET_CAPABILITY_NOT_METERED); + netCap.maybeMarkCapabilitiesRestricted(); + assertTrue(netCap.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); + netCap = new NetworkCapabilities(); + netCap.addCapability(NET_CAPABILITY_PRIORITIZE_LATENCY); + netCap.removeCapability(NET_CAPABILITY_NOT_METERED); + netCap.maybeMarkCapabilitiesRestricted(); + assertTrue(netCap.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); + + netCap = new NetworkCapabilities(); + netCap.addCapability(NET_CAPABILITY_PRIORITIZE_BANDWIDTH); + netCap.addCapability(NET_CAPABILITY_NOT_METERED); + netCap.maybeMarkCapabilitiesRestricted(); + assertTrue(netCap.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); + netCap = new NetworkCapabilities(); + netCap.addCapability(NET_CAPABILITY_PRIORITIZE_BANDWIDTH); + netCap.removeCapability(NET_CAPABILITY_NOT_METERED); + netCap.maybeMarkCapabilitiesRestricted(); + assertTrue(netCap.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); + } + @Test @IgnoreUpTo(Build.VERSION_CODES.R) public void testOemPrivate() { NetworkCapabilities nc = new NetworkCapabilities();