Loading core/java/android/net/NetworkCapabilities.java +17 −6 Original line number Diff line number Diff line Loading @@ -315,7 +315,7 @@ public final class NetworkCapabilities implements Parcelable { /** * Capabilities that suggest that a network is restricted. * {@see #maybeMarkCapabilitiesRestricted}. * {@see #maybeMarkCapabilitiesRestricted}, {@see #FORCE_RESTRICTED_CAPABILITIES} */ @VisibleForTesting /* package */ static final long RESTRICTED_CAPABILITIES = Loading @@ -326,7 +326,13 @@ public final class NetworkCapabilities implements Parcelable { (1 << NET_CAPABILITY_IA) | (1 << NET_CAPABILITY_IMS) | (1 << NET_CAPABILITY_RCS) | (1 << NET_CAPABILITY_XCAP) | (1 << NET_CAPABILITY_XCAP); /** * Capabilities that force network to be restricted. * {@see #maybeMarkCapabilitiesRestricted}. */ private static final long FORCE_RESTRICTED_CAPABILITIES = (1 << NET_CAPABILITY_OEM_PAID); /** Loading Loading @@ -531,16 +537,21 @@ public final class NetworkCapabilities implements Parcelable { * @hide */ public void maybeMarkCapabilitiesRestricted() { // Check if we have any capability that forces the network to be restricted. final boolean forceRestrictedCapability = (mNetworkCapabilities & FORCE_RESTRICTED_CAPABILITIES) != 0; // Verify there aren't any unrestricted capabilities. If there are we say // the whole thing is unrestricted. // the whole thing is unrestricted unless it is forced to be restricted. final boolean hasUnrestrictedCapabilities = ((mNetworkCapabilities & UNRESTRICTED_CAPABILITIES) != 0); (mNetworkCapabilities & UNRESTRICTED_CAPABILITIES) != 0; // Must have at least some restricted capabilities. final boolean hasRestrictedCapabilities = ((mNetworkCapabilities & RESTRICTED_CAPABILITIES) != 0); (mNetworkCapabilities & RESTRICTED_CAPABILITIES) != 0; if (hasRestrictedCapabilities && !hasUnrestrictedCapabilities) { if (forceRestrictedCapability || (hasRestrictedCapabilities && !hasUnrestrictedCapabilities)) { removeCapability(NET_CAPABILITY_NOT_RESTRICTED); } } Loading tests/net/java/android/net/NetworkCapabilitiesTest.java +17 −2 Original line number Diff line number Diff line Loading @@ -273,14 +273,28 @@ public class NetworkCapabilitiesTest { @Test public void testOemPaid() { NetworkCapabilities nc = new NetworkCapabilities(); nc.maybeMarkCapabilitiesRestricted(); // By default OEM_PAID is neither in the unwanted or required lists and the network is not // restricted. assertFalse(nc.hasUnwantedCapability(NET_CAPABILITY_OEM_PAID)); assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PAID)); nc.maybeMarkCapabilitiesRestricted(); assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); // Adding OEM_PAID to capability list should make network restricted. nc.addCapability(NET_CAPABILITY_OEM_PAID); nc.addCapability(NET_CAPABILITY_INTERNET); // Combine with unrestricted capability. nc.maybeMarkCapabilitiesRestricted(); assertTrue(nc.hasCapability(NET_CAPABILITY_OEM_PAID)); assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); // Now let's make request for OEM_PAID network. NetworkCapabilities nr = new NetworkCapabilities(); nr.addCapability(NET_CAPABILITY_OEM_PAID); nr.maybeMarkCapabilitiesRestricted(); assertTrue(nr.satisfiedByNetworkCapabilities(nc)); // Request fails for network with the default capabilities. assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities())); } @Test Loading @@ -295,7 +309,8 @@ public class NetworkCapabilitiesTest { request.addUnwantedCapability(NET_CAPABILITY_WIFI_P2P); request.addUnwantedCapability(NET_CAPABILITY_NOT_METERED); assertTrue(request.satisfiedByNetworkCapabilities(network)); assertArrayEquals(new int[] {NET_CAPABILITY_WIFI_P2P, NET_CAPABILITY_NOT_METERED}, assertArrayEquals(new int[] {NET_CAPABILITY_WIFI_P2P, NET_CAPABILITY_NOT_METERED}, request.getUnwantedCapabilities()); // This is a default capability, just want to make sure its there because we use it below. Loading Loading
core/java/android/net/NetworkCapabilities.java +17 −6 Original line number Diff line number Diff line Loading @@ -315,7 +315,7 @@ public final class NetworkCapabilities implements Parcelable { /** * Capabilities that suggest that a network is restricted. * {@see #maybeMarkCapabilitiesRestricted}. * {@see #maybeMarkCapabilitiesRestricted}, {@see #FORCE_RESTRICTED_CAPABILITIES} */ @VisibleForTesting /* package */ static final long RESTRICTED_CAPABILITIES = Loading @@ -326,7 +326,13 @@ public final class NetworkCapabilities implements Parcelable { (1 << NET_CAPABILITY_IA) | (1 << NET_CAPABILITY_IMS) | (1 << NET_CAPABILITY_RCS) | (1 << NET_CAPABILITY_XCAP) | (1 << NET_CAPABILITY_XCAP); /** * Capabilities that force network to be restricted. * {@see #maybeMarkCapabilitiesRestricted}. */ private static final long FORCE_RESTRICTED_CAPABILITIES = (1 << NET_CAPABILITY_OEM_PAID); /** Loading Loading @@ -531,16 +537,21 @@ public final class NetworkCapabilities implements Parcelable { * @hide */ public void maybeMarkCapabilitiesRestricted() { // Check if we have any capability that forces the network to be restricted. final boolean forceRestrictedCapability = (mNetworkCapabilities & FORCE_RESTRICTED_CAPABILITIES) != 0; // Verify there aren't any unrestricted capabilities. If there are we say // the whole thing is unrestricted. // the whole thing is unrestricted unless it is forced to be restricted. final boolean hasUnrestrictedCapabilities = ((mNetworkCapabilities & UNRESTRICTED_CAPABILITIES) != 0); (mNetworkCapabilities & UNRESTRICTED_CAPABILITIES) != 0; // Must have at least some restricted capabilities. final boolean hasRestrictedCapabilities = ((mNetworkCapabilities & RESTRICTED_CAPABILITIES) != 0); (mNetworkCapabilities & RESTRICTED_CAPABILITIES) != 0; if (hasRestrictedCapabilities && !hasUnrestrictedCapabilities) { if (forceRestrictedCapability || (hasRestrictedCapabilities && !hasUnrestrictedCapabilities)) { removeCapability(NET_CAPABILITY_NOT_RESTRICTED); } } Loading
tests/net/java/android/net/NetworkCapabilitiesTest.java +17 −2 Original line number Diff line number Diff line Loading @@ -273,14 +273,28 @@ public class NetworkCapabilitiesTest { @Test public void testOemPaid() { NetworkCapabilities nc = new NetworkCapabilities(); nc.maybeMarkCapabilitiesRestricted(); // By default OEM_PAID is neither in the unwanted or required lists and the network is not // restricted. assertFalse(nc.hasUnwantedCapability(NET_CAPABILITY_OEM_PAID)); assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PAID)); nc.maybeMarkCapabilitiesRestricted(); assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); // Adding OEM_PAID to capability list should make network restricted. nc.addCapability(NET_CAPABILITY_OEM_PAID); nc.addCapability(NET_CAPABILITY_INTERNET); // Combine with unrestricted capability. nc.maybeMarkCapabilitiesRestricted(); assertTrue(nc.hasCapability(NET_CAPABILITY_OEM_PAID)); assertFalse(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); // Now let's make request for OEM_PAID network. NetworkCapabilities nr = new NetworkCapabilities(); nr.addCapability(NET_CAPABILITY_OEM_PAID); nr.maybeMarkCapabilitiesRestricted(); assertTrue(nr.satisfiedByNetworkCapabilities(nc)); // Request fails for network with the default capabilities. assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities())); } @Test Loading @@ -295,7 +309,8 @@ public class NetworkCapabilitiesTest { request.addUnwantedCapability(NET_CAPABILITY_WIFI_P2P); request.addUnwantedCapability(NET_CAPABILITY_NOT_METERED); assertTrue(request.satisfiedByNetworkCapabilities(network)); assertArrayEquals(new int[] {NET_CAPABILITY_WIFI_P2P, NET_CAPABILITY_NOT_METERED}, assertArrayEquals(new int[] {NET_CAPABILITY_WIFI_P2P, NET_CAPABILITY_NOT_METERED}, request.getUnwantedCapabilities()); // This is a default capability, just want to make sure its there because we use it below. Loading