Merge "Rename unwanted capabilities to forbidden capabilities." am: dacc5e5f93

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1687485

Change-Id: Iaf8da730305ed7294cc624d4d41b0a11f2872863
This commit is contained in:
Lorenzo Colitti
2021-05-12 09:15:30 +00:00
committed by Automerger Merge Worker
4 changed files with 140 additions and 126 deletions

View File

@@ -109,7 +109,7 @@ package android.net {
public final class NetworkCapabilities implements android.os.Parcelable { public final class NetworkCapabilities implements android.os.Parcelable {
method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getUids(); method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getUids();
method public boolean hasUnwantedCapability(int); method public boolean hasForbiddenCapability(int);
field public static final long REDACT_ALL = -1L; // 0xffffffffffffffffL field public static final long REDACT_ALL = -1L; // 0xffffffffffffffffL
field public static final long REDACT_FOR_ACCESS_FINE_LOCATION = 1L; // 0x1L field public static final long REDACT_FOR_ACCESS_FINE_LOCATION = 1L; // 0x1L
field public static final long REDACT_FOR_LOCAL_MAC_ADDRESS = 2L; // 0x2L field public static final long REDACT_FOR_LOCAL_MAC_ADDRESS = 2L; // 0x2L
@@ -123,13 +123,13 @@ package android.net {
} }
public class NetworkRequest implements android.os.Parcelable { public class NetworkRequest implements android.os.Parcelable {
method @NonNull public int[] getUnwantedCapabilities(); method @NonNull public int[] getForbiddenCapabilities();
method public boolean hasUnwantedCapability(int); method public boolean hasForbiddenCapability(int);
} }
public static class NetworkRequest.Builder { public static class NetworkRequest.Builder {
method @NonNull public android.net.NetworkRequest.Builder addUnwantedCapability(int); method @NonNull public android.net.NetworkRequest.Builder addForbiddenCapability(int);
method @NonNull public android.net.NetworkRequest.Builder removeUnwantedCapability(int); method @NonNull public android.net.NetworkRequest.Builder removeForbiddenCapability(int);
method @NonNull public android.net.NetworkRequest.Builder setUids(@Nullable java.util.Set<android.util.Range<java.lang.Integer>>); method @NonNull public android.net.NetworkRequest.Builder setUids(@Nullable java.util.Set<android.util.Range<java.lang.Integer>>);
} }

View File

@@ -183,7 +183,7 @@ public final class NetworkCapabilities implements Parcelable {
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
"Cannot clear NetworkCapabilities when mRedactions is set"); "Cannot clear NetworkCapabilities when mRedactions is set");
} }
mNetworkCapabilities = mTransportTypes = mUnwantedNetworkCapabilities = 0; mNetworkCapabilities = mTransportTypes = mForbiddenNetworkCapabilities = 0;
mLinkUpBandwidthKbps = mLinkDownBandwidthKbps = LINK_BANDWIDTH_UNSPECIFIED; mLinkUpBandwidthKbps = mLinkDownBandwidthKbps = LINK_BANDWIDTH_UNSPECIFIED;
mNetworkSpecifier = null; mNetworkSpecifier = null;
mTransportInfo = null; mTransportInfo = null;
@@ -219,7 +219,7 @@ public final class NetworkCapabilities implements Parcelable {
mUids = (nc.mUids == null) ? null : new ArraySet<>(nc.mUids); mUids = (nc.mUids == null) ? null : new ArraySet<>(nc.mUids);
setAdministratorUids(nc.getAdministratorUids()); setAdministratorUids(nc.getAdministratorUids());
mOwnerUid = nc.mOwnerUid; mOwnerUid = nc.mOwnerUid;
mUnwantedNetworkCapabilities = nc.mUnwantedNetworkCapabilities; mForbiddenNetworkCapabilities = nc.mForbiddenNetworkCapabilities;
mSSID = nc.mSSID; mSSID = nc.mSSID;
mPrivateDnsBroken = nc.mPrivateDnsBroken; mPrivateDnsBroken = nc.mPrivateDnsBroken;
mRequestorUid = nc.mRequestorUid; mRequestorUid = nc.mRequestorUid;
@@ -237,7 +237,7 @@ public final class NetworkCapabilities implements Parcelable {
/** /**
* If any capabilities specified here they must not exist in the matching Network. * If any capabilities specified here they must not exist in the matching Network.
*/ */
private long mUnwantedNetworkCapabilities; private long mForbiddenNetworkCapabilities;
/** @hide */ /** @hide */
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@@ -586,21 +586,21 @@ public final class NetworkCapabilities implements Parcelable {
* @hide * @hide
*/ */
public @NonNull NetworkCapabilities addCapability(@NetCapability int capability) { public @NonNull NetworkCapabilities addCapability(@NetCapability int capability) {
// If the given capability was previously added to the list of unwanted capabilities // If the given capability was previously added to the list of forbidden capabilities
// then the capability will also be removed from the list of unwanted capabilities. // then the capability will also be removed from the list of forbidden capabilities.
// TODO: Consider adding unwanted capabilities to the public API and mention this // TODO: Consider adding forbidden capabilities to the public API and mention this
// in the documentation. // in the documentation.
checkValidCapability(capability); checkValidCapability(capability);
mNetworkCapabilities |= 1L << capability; mNetworkCapabilities |= 1L << capability;
// remove from unwanted capability list // remove from forbidden capability list
mUnwantedNetworkCapabilities &= ~(1L << capability); mForbiddenNetworkCapabilities &= ~(1L << capability);
return this; return this;
} }
/** /**
* Adds the given capability to the list of unwanted capabilities of this * Adds the given capability to the list of forbidden capabilities of this
* {@code NetworkCapability} instance. Note that when searching for a network to * {@code NetworkCapability} instance. Note that when searching for a network to
* satisfy a request, the network must not contain any capability from unwanted capability * satisfy a request, the network must not contain any capability from forbidden capability
* list. * list.
* <p> * <p>
* If the capability was previously added to the list of required capabilities (for * If the capability was previously added to the list of required capabilities (for
@@ -610,9 +610,9 @@ public final class NetworkCapabilities implements Parcelable {
* @see #addCapability(int) * @see #addCapability(int)
* @hide * @hide
*/ */
public void addUnwantedCapability(@NetCapability int capability) { public void addForbiddenCapability(@NetCapability int capability) {
checkValidCapability(capability); checkValidCapability(capability);
mUnwantedNetworkCapabilities |= 1L << capability; mForbiddenNetworkCapabilities |= 1L << capability;
mNetworkCapabilities &= ~(1L << capability); // remove from requested capabilities mNetworkCapabilities &= ~(1L << capability); // remove from requested capabilities
} }
@@ -632,16 +632,16 @@ public final class NetworkCapabilities implements Parcelable {
} }
/** /**
* Removes (if found) the given unwanted capability from this {@code NetworkCapability} * Removes (if found) the given forbidden capability from this {@code NetworkCapability}
* instance that were added via addUnwantedCapability(int) or setCapabilities(int[], int[]). * instance that were added via addForbiddenCapability(int) or setCapabilities(int[], int[]).
* *
* @param capability the capability to be removed. * @param capability the capability to be removed.
* @return This NetworkCapabilities instance, to facilitate chaining. * @return This NetworkCapabilities instance, to facilitate chaining.
* @hide * @hide
*/ */
public @NonNull NetworkCapabilities removeUnwantedCapability(@NetCapability int capability) { public @NonNull NetworkCapabilities removeForbiddenCapability(@NetCapability int capability) {
checkValidCapability(capability); checkValidCapability(capability);
mUnwantedNetworkCapabilities &= ~(1L << capability); mForbiddenNetworkCapabilities &= ~(1L << capability);
return this; return this;
} }
@@ -670,13 +670,13 @@ public final class NetworkCapabilities implements Parcelable {
} }
/** /**
* Gets all the unwanted capabilities set on this {@code NetworkCapability} instance. * Gets all the forbidden capabilities set on this {@code NetworkCapability} instance.
* *
* @return an array of unwanted capability values for this instance. * @return an array of forbidden capability values for this instance.
* @hide * @hide
*/ */
public @NetCapability int[] getUnwantedCapabilities() { public @NetCapability int[] getForbiddenCapabilities() {
return NetworkCapabilitiesUtils.unpackBits(mUnwantedNetworkCapabilities); return NetworkCapabilitiesUtils.unpackBits(mForbiddenNetworkCapabilities);
} }
@@ -687,9 +687,9 @@ public final class NetworkCapabilities implements Parcelable {
* @hide * @hide
*/ */
public void setCapabilities(@NetCapability int[] capabilities, public void setCapabilities(@NetCapability int[] capabilities,
@NetCapability int[] unwantedCapabilities) { @NetCapability int[] forbiddenCapabilities) {
mNetworkCapabilities = NetworkCapabilitiesUtils.packBits(capabilities); mNetworkCapabilities = NetworkCapabilitiesUtils.packBits(capabilities);
mUnwantedNetworkCapabilities = NetworkCapabilitiesUtils.packBits(unwantedCapabilities); mForbiddenNetworkCapabilities = NetworkCapabilitiesUtils.packBits(forbiddenCapabilities);
} }
/** /**
@@ -714,9 +714,9 @@ public final class NetworkCapabilities implements Parcelable {
/** @hide */ /** @hide */
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public boolean hasUnwantedCapability(@NetCapability int capability) { public boolean hasForbiddenCapability(@NetCapability int capability) {
return isValidCapability(capability) return isValidCapability(capability)
&& ((mUnwantedNetworkCapabilities & (1L << capability)) != 0); && ((mForbiddenNetworkCapabilities & (1L << capability)) != 0);
} }
/** /**
@@ -746,14 +746,14 @@ public final class NetworkCapabilities implements Parcelable {
private void combineNetCapabilities(@NonNull NetworkCapabilities nc) { private void combineNetCapabilities(@NonNull NetworkCapabilities nc) {
final long wantedCaps = this.mNetworkCapabilities | nc.mNetworkCapabilities; final long wantedCaps = this.mNetworkCapabilities | nc.mNetworkCapabilities;
final long unwantedCaps = final long forbiddenCaps =
this.mUnwantedNetworkCapabilities | nc.mUnwantedNetworkCapabilities; this.mForbiddenNetworkCapabilities | nc.mForbiddenNetworkCapabilities;
if ((wantedCaps & unwantedCaps) != 0) { if ((wantedCaps & forbiddenCaps) != 0) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Cannot have the same capability in wanted and unwanted lists."); "Cannot have the same capability in wanted and forbidden lists.");
} }
this.mNetworkCapabilities = wantedCaps; this.mNetworkCapabilities = wantedCaps;
this.mUnwantedNetworkCapabilities = unwantedCaps; this.mForbiddenNetworkCapabilities = forbiddenCaps;
} }
/** /**
@@ -764,7 +764,7 @@ public final class NetworkCapabilities implements Parcelable {
* @hide * @hide
*/ */
public @Nullable String describeFirstNonRequestableCapability() { public @Nullable String describeFirstNonRequestableCapability() {
final long nonRequestable = (mNetworkCapabilities | mUnwantedNetworkCapabilities) final long nonRequestable = (mNetworkCapabilities | mForbiddenNetworkCapabilities)
& NON_REQUESTABLE_CAPABILITIES; & NON_REQUESTABLE_CAPABILITIES;
if (nonRequestable != 0) { if (nonRequestable != 0) {
@@ -781,28 +781,28 @@ public final class NetworkCapabilities implements Parcelable {
private boolean satisfiedByNetCapabilities(@NonNull NetworkCapabilities nc, private boolean satisfiedByNetCapabilities(@NonNull NetworkCapabilities nc,
boolean onlyImmutable) { boolean onlyImmutable) {
long requestedCapabilities = mNetworkCapabilities; long requestedCapabilities = mNetworkCapabilities;
long requestedUnwantedCapabilities = mUnwantedNetworkCapabilities; long requestedForbiddenCapabilities = mForbiddenNetworkCapabilities;
long providedCapabilities = nc.mNetworkCapabilities; long providedCapabilities = nc.mNetworkCapabilities;
if (onlyImmutable) { if (onlyImmutable) {
requestedCapabilities &= ~MUTABLE_CAPABILITIES; requestedCapabilities &= ~MUTABLE_CAPABILITIES;
requestedUnwantedCapabilities &= ~MUTABLE_CAPABILITIES; requestedForbiddenCapabilities &= ~MUTABLE_CAPABILITIES;
} }
return ((providedCapabilities & requestedCapabilities) == requestedCapabilities) return ((providedCapabilities & requestedCapabilities) == requestedCapabilities)
&& ((requestedUnwantedCapabilities & providedCapabilities) == 0); && ((requestedForbiddenCapabilities & providedCapabilities) == 0);
} }
/** @hide */ /** @hide */
public boolean equalsNetCapabilities(@NonNull NetworkCapabilities nc) { public boolean equalsNetCapabilities(@NonNull NetworkCapabilities nc) {
return (nc.mNetworkCapabilities == this.mNetworkCapabilities) return (nc.mNetworkCapabilities == this.mNetworkCapabilities)
&& (nc.mUnwantedNetworkCapabilities == this.mUnwantedNetworkCapabilities); && (nc.mForbiddenNetworkCapabilities == this.mForbiddenNetworkCapabilities);
} }
private boolean equalsNetCapabilitiesRequestable(@NonNull NetworkCapabilities that) { private boolean equalsNetCapabilitiesRequestable(@NonNull NetworkCapabilities that) {
return ((this.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES) == return ((this.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES)
(that.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES)) == (that.mNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES))
&& ((this.mUnwantedNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES) == && ((this.mForbiddenNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES)
(that.mUnwantedNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES)); == (that.mForbiddenNetworkCapabilities & ~NON_REQUESTABLE_CAPABILITIES));
} }
/** /**
@@ -1718,7 +1718,7 @@ public final class NetworkCapabilities implements Parcelable {
* Combine a set of Capabilities to this one. Useful for coming up with the complete set. * Combine a set of Capabilities to this one. Useful for coming up with the complete set.
* <p> * <p>
* Note that this method may break an invariant of having a particular capability in either * Note that this method may break an invariant of having a particular capability in either
* wanted or unwanted lists but never in both. Requests that have the same capability in * wanted or forbidden lists but never in both. Requests that have the same capability in
* both lists will never be satisfied. * both lists will never be satisfied.
* @hide * @hide
*/ */
@@ -1859,8 +1859,8 @@ public final class NetworkCapabilities implements Parcelable {
public int hashCode() { public int hashCode() {
return (int) (mNetworkCapabilities & 0xFFFFFFFF) return (int) (mNetworkCapabilities & 0xFFFFFFFF)
+ ((int) (mNetworkCapabilities >> 32) * 3) + ((int) (mNetworkCapabilities >> 32) * 3)
+ ((int) (mUnwantedNetworkCapabilities & 0xFFFFFFFF) * 5) + ((int) (mForbiddenNetworkCapabilities & 0xFFFFFFFF) * 5)
+ ((int) (mUnwantedNetworkCapabilities >> 32) * 7) + ((int) (mForbiddenNetworkCapabilities >> 32) * 7)
+ ((int) (mTransportTypes & 0xFFFFFFFF) * 11) + ((int) (mTransportTypes & 0xFFFFFFFF) * 11)
+ ((int) (mTransportTypes >> 32) * 13) + ((int) (mTransportTypes >> 32) * 13)
+ mLinkUpBandwidthKbps * 17 + mLinkUpBandwidthKbps * 17
@@ -1895,7 +1895,7 @@ public final class NetworkCapabilities implements Parcelable {
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(mNetworkCapabilities); dest.writeLong(mNetworkCapabilities);
dest.writeLong(mUnwantedNetworkCapabilities); dest.writeLong(mForbiddenNetworkCapabilities);
dest.writeLong(mTransportTypes); dest.writeLong(mTransportTypes);
dest.writeInt(mLinkUpBandwidthKbps); dest.writeInt(mLinkUpBandwidthKbps);
dest.writeInt(mLinkDownBandwidthKbps); dest.writeInt(mLinkDownBandwidthKbps);
@@ -1919,7 +1919,7 @@ public final class NetworkCapabilities implements Parcelable {
NetworkCapabilities netCap = new NetworkCapabilities(); NetworkCapabilities netCap = new NetworkCapabilities();
netCap.mNetworkCapabilities = in.readLong(); netCap.mNetworkCapabilities = in.readLong();
netCap.mUnwantedNetworkCapabilities = in.readLong(); netCap.mForbiddenNetworkCapabilities = in.readLong();
netCap.mTransportTypes = in.readLong(); netCap.mTransportTypes = in.readLong();
netCap.mLinkUpBandwidthKbps = in.readInt(); netCap.mLinkUpBandwidthKbps = in.readInt();
netCap.mLinkDownBandwidthKbps = in.readInt(); netCap.mLinkDownBandwidthKbps = in.readInt();
@@ -1973,9 +1973,9 @@ public final class NetworkCapabilities implements Parcelable {
appendStringRepresentationOfBitMaskToStringBuilder(sb, mNetworkCapabilities, appendStringRepresentationOfBitMaskToStringBuilder(sb, mNetworkCapabilities,
NetworkCapabilities::capabilityNameOf, "&"); NetworkCapabilities::capabilityNameOf, "&");
} }
if (0 != mUnwantedNetworkCapabilities) { if (0 != mForbiddenNetworkCapabilities) {
sb.append(" Unwanted: "); sb.append(" Forbidden: ");
appendStringRepresentationOfBitMaskToStringBuilder(sb, mUnwantedNetworkCapabilities, appendStringRepresentationOfBitMaskToStringBuilder(sb, mForbiddenNetworkCapabilities,
NetworkCapabilities::capabilityNameOf, "&"); NetworkCapabilities::capabilityNameOf, "&");
} }
if (mLinkUpBandwidthKbps > 0) { if (mLinkUpBandwidthKbps > 0) {

View File

@@ -311,7 +311,7 @@ public class NetworkRequest implements Parcelable {
* *
* @see #addCapability(int) * @see #addCapability(int)
* *
* @param capability The capability to add to unwanted capability list. * @param capability The capability to add to forbidden capability list.
* @return The builder to facilitate chaining. * @return The builder to facilitate chaining.
* *
* @hide * @hide
@@ -319,15 +319,15 @@ public class NetworkRequest implements Parcelable {
@NonNull @NonNull
@SuppressLint("MissingGetterMatchingBuilder") @SuppressLint("MissingGetterMatchingBuilder")
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public Builder addUnwantedCapability(@NetworkCapabilities.NetCapability int capability) { public Builder addForbiddenCapability(@NetworkCapabilities.NetCapability int capability) {
mNetworkCapabilities.addUnwantedCapability(capability); mNetworkCapabilities.addForbiddenCapability(capability);
return this; return this;
} }
/** /**
* Removes (if found) the given unwanted capability from this builder instance. * Removes (if found) the given forbidden capability from this builder instance.
* *
* @param capability The unwanted capability to remove. * @param capability The forbidden capability to remove.
* @return The builder to facilitate chaining. * @return The builder to facilitate chaining.
* *
* @hide * @hide
@@ -335,8 +335,9 @@ public class NetworkRequest implements Parcelable {
@NonNull @NonNull
@SuppressLint("BuilderSetStyle") @SuppressLint("BuilderSetStyle")
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public Builder removeUnwantedCapability(@NetworkCapabilities.NetCapability int capability) { public Builder removeForbiddenCapability(
mNetworkCapabilities.removeUnwantedCapability(capability); @NetworkCapabilities.NetCapability int capability) {
mNetworkCapabilities.removeForbiddenCapability(capability);
return this; return this;
} }
@@ -598,13 +599,13 @@ public class NetworkRequest implements Parcelable {
} }
/** /**
* @see Builder#addUnwantedCapability(int) * @see Builder#addForbiddenCapability(int)
* *
* @hide * @hide
*/ */
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public boolean hasUnwantedCapability(@NetCapability int capability) { public boolean hasForbiddenCapability(@NetCapability int capability) {
return networkCapabilities.hasUnwantedCapability(capability); return networkCapabilities.hasForbiddenCapability(capability);
} }
/** /**
@@ -709,18 +710,18 @@ public class NetworkRequest implements Parcelable {
} }
/** /**
* Gets all the unwanted capabilities set on this {@code NetworkRequest} instance. * Gets all the forbidden capabilities set on this {@code NetworkRequest} instance.
* *
* @return an array of unwanted capability values for this instance. * @return an array of forbidden capability values for this instance.
* *
* @hide * @hide
*/ */
@NonNull @NonNull
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public @NetCapability int[] getUnwantedCapabilities() { public @NetCapability int[] getForbiddenCapabilities() {
// No need to make a defensive copy here as NC#getUnwantedCapabilities() already returns // No need to make a defensive copy here as NC#getForbiddenCapabilities() already returns
// a new array. // a new array.
return networkCapabilities.getUnwantedCapabilities(); return networkCapabilities.getForbiddenCapabilities();
} }
/** /**

View File

@@ -390,9 +390,11 @@ public class NetworkCapabilitiesTest {
@Test @Test
public void testOemPaid() { public void testOemPaid() {
NetworkCapabilities nc = new NetworkCapabilities(); NetworkCapabilities nc = new NetworkCapabilities();
// By default OEM_PAID is neither in the unwanted or required lists and the network is not // By default OEM_PAID is neither in the required or forbidden lists and the network is not
// restricted. // restricted.
assertFalse(nc.hasUnwantedCapability(NET_CAPABILITY_OEM_PAID)); if (isAtLeastS()) {
assertFalse(nc.hasForbiddenCapability(NET_CAPABILITY_OEM_PAID));
}
assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PAID)); assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PAID));
nc.maybeMarkCapabilitiesRestricted(); nc.maybeMarkCapabilitiesRestricted();
assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
@@ -417,9 +419,9 @@ public class NetworkCapabilitiesTest {
@Test @IgnoreUpTo(Build.VERSION_CODES.R) @Test @IgnoreUpTo(Build.VERSION_CODES.R)
public void testOemPrivate() { public void testOemPrivate() {
NetworkCapabilities nc = new NetworkCapabilities(); NetworkCapabilities nc = new NetworkCapabilities();
// By default OEM_PRIVATE is neither in the unwanted or required lists and the network is // By default OEM_PRIVATE is neither in the required or forbidden lists and the network is
// not restricted. // not restricted.
assertFalse(nc.hasUnwantedCapability(NET_CAPABILITY_OEM_PRIVATE)); assertFalse(nc.hasForbiddenCapability(NET_CAPABILITY_OEM_PRIVATE));
assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PRIVATE)); assertFalse(nc.hasCapability(NET_CAPABILITY_OEM_PRIVATE));
nc.maybeMarkCapabilitiesRestricted(); nc.maybeMarkCapabilitiesRestricted();
assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertTrue(nc.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
@@ -441,8 +443,8 @@ public class NetworkCapabilitiesTest {
assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities())); assertFalse(nr.satisfiedByNetworkCapabilities(new NetworkCapabilities()));
} }
@Test @Test @IgnoreUpTo(Build.VERSION_CODES.R)
public void testUnwantedCapabilities() { public void testForbiddenCapabilities() {
NetworkCapabilities network = new NetworkCapabilities(); NetworkCapabilities network = new NetworkCapabilities();
NetworkCapabilities request = new NetworkCapabilities(); NetworkCapabilities request = new NetworkCapabilities();
@@ -450,19 +452,19 @@ public class NetworkCapabilitiesTest {
request.satisfiedByNetworkCapabilities(network)); request.satisfiedByNetworkCapabilities(network));
// Requesting absence of capabilities that network doesn't have. Request should satisfy. // Requesting absence of capabilities that network doesn't have. Request should satisfy.
request.addUnwantedCapability(NET_CAPABILITY_WIFI_P2P); request.addForbiddenCapability(NET_CAPABILITY_WIFI_P2P);
request.addUnwantedCapability(NET_CAPABILITY_NOT_METERED); request.addForbiddenCapability(NET_CAPABILITY_NOT_METERED);
assertTrue(request.satisfiedByNetworkCapabilities(network)); assertTrue(request.satisfiedByNetworkCapabilities(network));
assertArrayEquals(new int[] {NET_CAPABILITY_WIFI_P2P, assertArrayEquals(new int[]{NET_CAPABILITY_WIFI_P2P,
NET_CAPABILITY_NOT_METERED}, NET_CAPABILITY_NOT_METERED},
request.getUnwantedCapabilities()); request.getForbiddenCapabilities());
// This is a default capability, just want to make sure its there because we use it below. // This is a default capability, just want to make sure its there because we use it below.
assertTrue(network.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertTrue(network.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
// Verify that adding unwanted capability will effectively remove it from capability list. // Verify that adding forbidden capability will effectively remove it from capability list.
request.addUnwantedCapability(NET_CAPABILITY_NOT_RESTRICTED); request.addForbiddenCapability(NET_CAPABILITY_NOT_RESTRICTED);
assertTrue(request.hasUnwantedCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertTrue(request.hasForbiddenCapability(NET_CAPABILITY_NOT_RESTRICTED));
assertFalse(request.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertFalse(request.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
// Now this request won't be satisfied because network contains NOT_RESTRICTED. // Now this request won't be satisfied because network contains NOT_RESTRICTED.
@@ -470,10 +472,10 @@ public class NetworkCapabilitiesTest {
network.removeCapability(NET_CAPABILITY_NOT_RESTRICTED); network.removeCapability(NET_CAPABILITY_NOT_RESTRICTED);
assertTrue(request.satisfiedByNetworkCapabilities(network)); assertTrue(request.satisfiedByNetworkCapabilities(network));
// Verify that adding capability will effectively remove it from unwanted list // Verify that adding capability will effectively remove it from forbidden list
request.addCapability(NET_CAPABILITY_NOT_RESTRICTED); request.addCapability(NET_CAPABILITY_NOT_RESTRICTED);
assertTrue(request.hasCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertTrue(request.hasCapability(NET_CAPABILITY_NOT_RESTRICTED));
assertFalse(request.hasUnwantedCapability(NET_CAPABILITY_NOT_RESTRICTED)); assertFalse(request.hasForbiddenCapability(NET_CAPABILITY_NOT_RESTRICTED));
assertFalse(request.satisfiedByNetworkCapabilities(network)); assertFalse(request.satisfiedByNetworkCapabilities(network));
network.addCapability(NET_CAPABILITY_NOT_RESTRICTED); network.addCapability(NET_CAPABILITY_NOT_RESTRICTED);
@@ -512,24 +514,20 @@ public class NetworkCapabilitiesTest {
assertTrue(nc1.equalsNetCapabilities(nc2)); assertTrue(nc1.equalsNetCapabilities(nc2));
assertEquals(nc1, nc2); assertEquals(nc1, nc2);
nc1.addUnwantedCapability(NET_CAPABILITY_INTERNET);
assertFalse(nc1.equalsNetCapabilities(nc2));
nc2.addUnwantedCapability(NET_CAPABILITY_INTERNET);
assertTrue(nc1.equalsNetCapabilities(nc2));
if (isAtLeastS()) { if (isAtLeastS()) {
// Remove a required capability doesn't affect unwanted capabilities. nc1.addForbiddenCapability(NET_CAPABILITY_INTERNET);
// This is a behaviour change from S. assertFalse(nc1.equalsNetCapabilities(nc2));
nc2.addForbiddenCapability(NET_CAPABILITY_INTERNET);
assertTrue(nc1.equalsNetCapabilities(nc2));
// Remove a required capability doesn't affect forbidden capabilities.
// This is a behaviour change from R to S.
nc1.removeCapability(NET_CAPABILITY_INTERNET); nc1.removeCapability(NET_CAPABILITY_INTERNET);
assertTrue(nc1.equalsNetCapabilities(nc2)); assertTrue(nc1.equalsNetCapabilities(nc2));
nc1.removeUnwantedCapability(NET_CAPABILITY_INTERNET); nc1.removeForbiddenCapability(NET_CAPABILITY_INTERNET);
assertFalse(nc1.equalsNetCapabilities(nc2)); assertFalse(nc1.equalsNetCapabilities(nc2));
nc2.removeUnwantedCapability(NET_CAPABILITY_INTERNET); nc2.removeForbiddenCapability(NET_CAPABILITY_INTERNET);
assertTrue(nc1.equalsNetCapabilities(nc2));
} else {
nc1.removeCapability(NET_CAPABILITY_INTERNET);
assertFalse(nc1.equalsNetCapabilities(nc2));
nc2.removeCapability(NET_CAPABILITY_INTERNET);
assertTrue(nc1.equalsNetCapabilities(nc2)); assertTrue(nc1.equalsNetCapabilities(nc2));
} }
} }
@@ -581,31 +579,25 @@ public class NetworkCapabilitiesTest {
NetworkCapabilities nc1 = new NetworkCapabilities(); NetworkCapabilities nc1 = new NetworkCapabilities();
NetworkCapabilities nc2 = new NetworkCapabilities(); NetworkCapabilities nc2 = new NetworkCapabilities();
nc1.addUnwantedCapability(NET_CAPABILITY_CAPTIVE_PORTAL); if (isAtLeastS()) {
nc1.addForbiddenCapability(NET_CAPABILITY_CAPTIVE_PORTAL);
}
nc1.addCapability(NET_CAPABILITY_NOT_ROAMING); nc1.addCapability(NET_CAPABILITY_NOT_ROAMING);
assertNotEquals(nc1, nc2); assertNotEquals(nc1, nc2);
nc2.combineCapabilities(nc1); nc2.combineCapabilities(nc1);
assertEquals(nc1, nc2); assertEquals(nc1, nc2);
assertTrue(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING)); assertTrue(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING));
assertTrue(nc2.hasUnwantedCapability(NET_CAPABILITY_CAPTIVE_PORTAL)); if (isAtLeastS()) {
assertTrue(nc2.hasForbiddenCapability(NET_CAPABILITY_CAPTIVE_PORTAL));
// This will effectively move NOT_ROAMING capability from required to unwanted for nc1. }
nc1.addUnwantedCapability(NET_CAPABILITY_NOT_ROAMING);
if (isAtLeastS()) { if (isAtLeastS()) {
// From S, it is not allowed to have the same capability in both wanted and // This will effectively move NOT_ROAMING capability from required to forbidden for nc1.
// unwanted list. nc1.addForbiddenCapability(NET_CAPABILITY_NOT_ROAMING);
// It is not allowed to have the same capability in both wanted and forbidden list.
assertThrows(IllegalArgumentException.class, () -> nc2.combineCapabilities(nc1)); assertThrows(IllegalArgumentException.class, () -> nc2.combineCapabilities(nc1));
// Remove unwanted capability to continue other tests. // Remove forbidden capability to continue other tests.
nc1.removeUnwantedCapability(NET_CAPABILITY_NOT_ROAMING); nc1.removeForbiddenCapability(NET_CAPABILITY_NOT_ROAMING);
} else {
nc2.combineCapabilities(nc1);
// We will get this capability in both requested and unwanted lists thus this request
// will never be satisfied.
assertTrue(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING));
assertTrue(nc2.hasUnwantedCapability(NET_CAPABILITY_NOT_ROAMING));
// For R or below, remove unwanted capability via removeCapability.
nc1.removeCapability(NET_CAPABILITY_NOT_ROAMING);
} }
nc1.setSSID(TEST_SSID); nc1.setSSID(TEST_SSID);
@@ -683,14 +675,11 @@ public class NetworkCapabilitiesTest {
public void testSetCapabilities() { public void testSetCapabilities() {
final int[] REQUIRED_CAPABILITIES = new int[] { final int[] REQUIRED_CAPABILITIES = new int[] {
NET_CAPABILITY_INTERNET, NET_CAPABILITY_NOT_VPN }; NET_CAPABILITY_INTERNET, NET_CAPABILITY_NOT_VPN };
final int[] UNWANTED_CAPABILITIES = new int[] {
NET_CAPABILITY_NOT_RESTRICTED, NET_CAPABILITY_NOT_METERED
};
NetworkCapabilities nc1 = new NetworkCapabilities(); NetworkCapabilities nc1 = new NetworkCapabilities();
NetworkCapabilities nc2 = new NetworkCapabilities(); NetworkCapabilities nc2 = new NetworkCapabilities();
nc1.setCapabilities(REQUIRED_CAPABILITIES, UNWANTED_CAPABILITIES); nc1.setCapabilities(REQUIRED_CAPABILITIES);
assertArrayEquals(REQUIRED_CAPABILITIES, nc1.getCapabilities()); assertArrayEquals(REQUIRED_CAPABILITIES, nc1.getCapabilities());
// Verify that setting and adding capabilities leads to the same object state. // Verify that setting and adding capabilities leads to the same object state.
@@ -698,10 +687,25 @@ public class NetworkCapabilitiesTest {
for (int cap : REQUIRED_CAPABILITIES) { for (int cap : REQUIRED_CAPABILITIES) {
nc2.addCapability(cap); nc2.addCapability(cap);
} }
for (int cap : UNWANTED_CAPABILITIES) {
nc2.addUnwantedCapability(cap);
}
assertEquals(nc1, nc2); assertEquals(nc1, nc2);
if (isAtLeastS()) {
final int[] forbiddenCapabilities = new int[]{
NET_CAPABILITY_NOT_METERED, NET_CAPABILITY_NOT_RESTRICTED };
nc1.setCapabilities(REQUIRED_CAPABILITIES, forbiddenCapabilities);
assertArrayEquals(REQUIRED_CAPABILITIES, nc1.getCapabilities());
assertArrayEquals(forbiddenCapabilities, nc1.getForbiddenCapabilities());
nc2.clearAll();
for (int cap : REQUIRED_CAPABILITIES) {
nc2.addCapability(cap);
}
for (int cap : forbiddenCapabilities) {
nc2.addForbiddenCapability(cap);
}
assertEquals(nc1, nc2);
}
} }
@Test @Test
@@ -769,23 +773,32 @@ public class NetworkCapabilitiesTest {
NetworkCapabilities nc1 = new NetworkCapabilities(); NetworkCapabilities nc1 = new NetworkCapabilities();
NetworkCapabilities nc2 = new NetworkCapabilities(); NetworkCapabilities nc2 = new NetworkCapabilities();
nc1.addUnwantedCapability(NET_CAPABILITY_CAPTIVE_PORTAL); if (isAtLeastS()) {
nc1.addForbiddenCapability(NET_CAPABILITY_CAPTIVE_PORTAL);
}
nc1.addCapability(NET_CAPABILITY_NOT_ROAMING); nc1.addCapability(NET_CAPABILITY_NOT_ROAMING);
assertNotEquals(nc1, nc2); assertNotEquals(nc1, nc2);
nc2.set(nc1); nc2.set(nc1);
assertEquals(nc1, nc2); assertEquals(nc1, nc2);
assertTrue(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING)); assertTrue(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING));
assertTrue(nc2.hasUnwantedCapability(NET_CAPABILITY_CAPTIVE_PORTAL)); if (isAtLeastS()) {
assertTrue(nc2.hasForbiddenCapability(NET_CAPABILITY_CAPTIVE_PORTAL));
}
// This will effectively move NOT_ROAMING capability from required to unwanted for nc1. if (isAtLeastS()) {
nc1.addUnwantedCapability(NET_CAPABILITY_NOT_ROAMING); // This will effectively move NOT_ROAMING capability from required to forbidden for nc1.
nc1.addForbiddenCapability(NET_CAPABILITY_NOT_ROAMING);
}
nc1.setSSID(TEST_SSID); nc1.setSSID(TEST_SSID);
nc2.set(nc1); nc2.set(nc1);
assertEquals(nc1, nc2); assertEquals(nc1, nc2);
// Contrary to combineCapabilities, set() will have removed the NOT_ROAMING capability if (isAtLeastS()) {
// from nc2. // Contrary to combineCapabilities, set() will have removed the NOT_ROAMING capability
assertFalse(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING)); // from nc2.
assertTrue(nc2.hasUnwantedCapability(NET_CAPABILITY_NOT_ROAMING)); assertFalse(nc2.hasCapability(NET_CAPABILITY_NOT_ROAMING));
assertTrue(nc2.hasForbiddenCapability(NET_CAPABILITY_NOT_ROAMING));
}
if (isAtLeastR()) { if (isAtLeastR()) {
assertTrue(TEST_SSID.equals(nc2.getSsid())); assertTrue(TEST_SSID.equals(nc2.getSsid()));
} }