Add OEM_PRIVATE NetworkCapability

Adding network capability to be used with networks to be only used by
OEM apps.

Bug: 171505922
Test: atest CtsNetTestCasesLatestSdk:NetworkCapabilitiesTest
Change-Id: Ib55ebec0e178b6317d92f17e1aff060dacdfb2b1
This commit is contained in:
James Mattis
2020-10-23 15:53:15 -07:00
parent c04c6aaf58
commit 4fcbb03489
2 changed files with 40 additions and 2 deletions

View File

@@ -170,6 +170,7 @@ public final class NetworkCapabilities implements Parcelable {
NET_CAPABILITY_MCX, NET_CAPABILITY_MCX,
NET_CAPABILITY_PARTIAL_CONNECTIVITY, NET_CAPABILITY_PARTIAL_CONNECTIVITY,
NET_CAPABILITY_TEMPORARILY_NOT_METERED, NET_CAPABILITY_TEMPORARILY_NOT_METERED,
NET_CAPABILITY_OEM_PRIVATE,
}) })
public @interface NetCapability { } public @interface NetCapability { }
@@ -345,8 +346,15 @@ public final class NetworkCapabilities implements Parcelable {
*/ */
public static final int NET_CAPABILITY_TEMPORARILY_NOT_METERED = 25; public static final int NET_CAPABILITY_TEMPORARILY_NOT_METERED = 25;
/**
* Indicates that this network is private to the OEM and meant only for OEM use.
* @hide
*/
@SystemApi
public static final int NET_CAPABILITY_OEM_PRIVATE = 26;
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_TEMPORARILY_NOT_METERED; private static final int MAX_NET_CAPABILITY = NET_CAPABILITY_OEM_PRIVATE;
/** /**
* 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
@@ -404,7 +412,8 @@ public final class NetworkCapabilities implements Parcelable {
* {@see #maybeMarkCapabilitiesRestricted}. * {@see #maybeMarkCapabilitiesRestricted}.
*/ */
private static final long FORCE_RESTRICTED_CAPABILITIES = private static final long FORCE_RESTRICTED_CAPABILITIES =
(1 << NET_CAPABILITY_OEM_PAID); (1 << NET_CAPABILITY_OEM_PAID)
| (1 << NET_CAPABILITY_OEM_PRIVATE);
/** /**
* Capabilities that suggest that a network is unrestricted. * Capabilities that suggest that a network is unrestricted.
@@ -1910,6 +1919,7 @@ public final class NetworkCapabilities implements Parcelable {
case NET_CAPABILITY_MCX: return "MCX"; case NET_CAPABILITY_MCX: return "MCX";
case NET_CAPABILITY_PARTIAL_CONNECTIVITY: return "PARTIAL_CONNECTIVITY"; case NET_CAPABILITY_PARTIAL_CONNECTIVITY: return "PARTIAL_CONNECTIVITY";
case NET_CAPABILITY_TEMPORARILY_NOT_METERED: return "TEMPORARILY_NOT_METERED"; case NET_CAPABILITY_TEMPORARILY_NOT_METERED: return "TEMPORARILY_NOT_METERED";
case NET_CAPABILITY_OEM_PRIVATE: return "OEM_PRIVATE";
default: return Integer.toString(capability); default: return Integer.toString(capability);
} }
} }

View File

@@ -30,6 +30,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN; 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_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_PARTIAL_CONNECTIVITY;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_WIFI_P2P; import static android.net.NetworkCapabilities.NET_CAPABILITY_WIFI_P2P;
@@ -358,6 +359,33 @@ public class NetworkCapabilitiesTest {
assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities())); assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities()));
} }
@Test
public void testOemPrivate() {
NetworkCapabilities nc = new NetworkCapabilities();
// By default OEM_PRIVATE is neither in the unwanted or required lists and the network is
// not restricted.
assertFalse(nc.hasUnwantedCapability(NET_CAPABILITY_OEM_PRIVATE));
assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PRIVATE));
nc.maybeMarkCapabilitiesRestricted();
assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
// Adding OEM_PRIVATE to capability list should make network restricted.
nc.addCapability(NET_CAPABILITY_OEM_PRIVATE);
nc.addCapability(NET_CAPABILITY_INTERNET); // Combine with unrestricted capability.
nc.maybeMarkCapabilitiesRestricted();
assertTrue(nc.hasCapability(NET_CAPABILITY_OEM_PRIVATE));
assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
// Now let's make request for OEM_PRIVATE network.
NetworkCapabilities nr = new NetworkCapabilities();
nr.addCapability(NET_CAPABILITY_OEM_PRIVATE);
nr.maybeMarkCapabilitiesRestricted();
assertTrue(nr.satisfiedByNetworkCapabilities(nc));
// Request fails for network with the default capabilities.
assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities()));
}
@Test @Test
public void testUnwantedCapabilities() { public void testUnwantedCapabilities() {
NetworkCapabilities network = new NetworkCapabilities(); NetworkCapabilities network = new NetworkCapabilities();