Merge "Add enterpriseSpecifier"
This commit is contained in:
@@ -294,6 +294,7 @@ package android.net {
|
|||||||
ctor public NetworkCapabilities(android.net.NetworkCapabilities);
|
ctor public NetworkCapabilities(android.net.NetworkCapabilities);
|
||||||
method public int describeContents();
|
method public int describeContents();
|
||||||
method @NonNull public int[] getCapabilities();
|
method @NonNull public int[] getCapabilities();
|
||||||
|
method @NonNull public int[] getEnterpriseCapabilitySubLevels();
|
||||||
method public int getLinkDownstreamBandwidthKbps();
|
method public int getLinkDownstreamBandwidthKbps();
|
||||||
method public int getLinkUpstreamBandwidthKbps();
|
method public int getLinkUpstreamBandwidthKbps();
|
||||||
method @Nullable public android.net.NetworkSpecifier getNetworkSpecifier();
|
method @Nullable public android.net.NetworkSpecifier getNetworkSpecifier();
|
||||||
|
|||||||
@@ -121,6 +121,11 @@ 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 hasForbiddenCapability(int);
|
method public boolean hasForbiddenCapability(int);
|
||||||
|
field public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1 = 1; // 0x1
|
||||||
|
field public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2 = 2; // 0x2
|
||||||
|
field public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_3 = 3; // 0x3
|
||||||
|
field public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_4 = 4; // 0x4
|
||||||
|
field public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_5 = 5; // 0x5
|
||||||
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
|
||||||
|
|||||||
@@ -294,9 +294,11 @@ package android.net {
|
|||||||
ctor public NetworkCapabilities.Builder();
|
ctor public NetworkCapabilities.Builder();
|
||||||
ctor public NetworkCapabilities.Builder(@NonNull android.net.NetworkCapabilities);
|
ctor public NetworkCapabilities.Builder(@NonNull android.net.NetworkCapabilities);
|
||||||
method @NonNull public android.net.NetworkCapabilities.Builder addCapability(int);
|
method @NonNull public android.net.NetworkCapabilities.Builder addCapability(int);
|
||||||
|
method @NonNull public android.net.NetworkCapabilities.Builder addEnterpriseCapabilitySubLevel(int);
|
||||||
method @NonNull public android.net.NetworkCapabilities.Builder addTransportType(int);
|
method @NonNull public android.net.NetworkCapabilities.Builder addTransportType(int);
|
||||||
method @NonNull public android.net.NetworkCapabilities build();
|
method @NonNull public android.net.NetworkCapabilities build();
|
||||||
method @NonNull public android.net.NetworkCapabilities.Builder removeCapability(int);
|
method @NonNull public android.net.NetworkCapabilities.Builder removeCapability(int);
|
||||||
|
method @NonNull public android.net.NetworkCapabilities.Builder removeEnterpriseCapabilitySubLevel(int);
|
||||||
method @NonNull public android.net.NetworkCapabilities.Builder removeTransportType(int);
|
method @NonNull public android.net.NetworkCapabilities.Builder removeTransportType(int);
|
||||||
method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setAdministratorUids(@NonNull int[]);
|
method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setAdministratorUids(@NonNull int[]);
|
||||||
method @NonNull public android.net.NetworkCapabilities.Builder setLinkDownstreamBandwidthKbps(int);
|
method @NonNull public android.net.NetworkCapabilities.Builder setLinkDownstreamBandwidthKbps(int);
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package android.net;
|
package android.net;
|
||||||
|
|
||||||
|
import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
|
||||||
|
|
||||||
import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE;
|
import static com.android.internal.annotations.VisibleForTesting.Visibility.PRIVATE;
|
||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
@@ -146,6 +148,70 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
private String mRequestorPackageName;
|
private String mRequestorPackageName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enterprise capability sub level 1
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
|
public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1 = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enterprise capability sub level 2
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
|
public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2 = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enterprise capability sub level 3
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
|
public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_3 = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enterprise capability sub level 4
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
|
public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_4 = 4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enterprise capability sub level 5
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi(client = MODULE_LIBRARIES)
|
||||||
|
public static final int NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_5 = 5;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(prefix = { "NET_CAPABILITY_ENTERPRISE_SUB_LEVEL" }, value = {
|
||||||
|
NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1,
|
||||||
|
NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2,
|
||||||
|
NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_3,
|
||||||
|
NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_4,
|
||||||
|
NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_5,
|
||||||
|
})
|
||||||
|
|
||||||
|
public @interface EnterpriseCapabilitySubLevel {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bitfield representing the network's enterprise capability sublevel. If any are specified
|
||||||
|
* they will be satisfied by any Network that matches all of them.
|
||||||
|
* {@see addEnterpriseCapabilitySubLevel} for details on how masks are added
|
||||||
|
*/
|
||||||
|
private int mEnterpriseCapabilitySubLevel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return all the enteprise capabilities sub level set on this {@code NetworkCapability}
|
||||||
|
* instance.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public @NonNull @EnterpriseCapabilitySubLevel int[] getEnterpriseCapabilitySubLevels() {
|
||||||
|
return NetworkCapabilitiesUtils.unpackBits(mEnterpriseCapabilitySubLevel);
|
||||||
|
}
|
||||||
|
|
||||||
public NetworkCapabilities() {
|
public NetworkCapabilities() {
|
||||||
clearAll();
|
clearAll();
|
||||||
mNetworkCapabilities = DEFAULT_CAPABILITIES;
|
mNetworkCapabilities = DEFAULT_CAPABILITIES;
|
||||||
@@ -192,6 +258,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
mRequestorPackageName = null;
|
mRequestorPackageName = null;
|
||||||
mSubIds = new ArraySet<>();
|
mSubIds = new ArraySet<>();
|
||||||
mUnderlyingNetworks = null;
|
mUnderlyingNetworks = null;
|
||||||
|
mEnterpriseCapabilitySubLevel = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -224,6 +291,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
// mUnderlyingNetworks is an unmodifiable list if non-null, so a defensive copy is not
|
// mUnderlyingNetworks is an unmodifiable list if non-null, so a defensive copy is not
|
||||||
// necessary.
|
// necessary.
|
||||||
mUnderlyingNetworks = nc.mUnderlyingNetworks;
|
mUnderlyingNetworks = nc.mUnderlyingNetworks;
|
||||||
|
mEnterpriseCapabilitySubLevel = nc.mEnterpriseCapabilitySubLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -715,6 +783,38 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
setCapabilities(capabilities, new int[] {});
|
setCapabilities(capabilities, new int[] {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the given enterprise capability sub level to this {@code NetworkCapability} instance.
|
||||||
|
* Note that when searching for a network to satisfy a request, all capabilities sub level
|
||||||
|
* requested must be satisfied.
|
||||||
|
*
|
||||||
|
* @param enterpriseCapabilitySubLevel the enterprise capability sub level to be added.
|
||||||
|
* @return This NetworkCapabilities instance, to facilitate chaining.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
private @NonNull NetworkCapabilities addEnterpriseCapabilitySubLevel(
|
||||||
|
@EnterpriseCapabilitySubLevel int enterpriseCapabilitySubLevel) {
|
||||||
|
checkValidEnterpriseCapabilitySublevel(enterpriseCapabilitySubLevel);
|
||||||
|
mEnterpriseCapabilitySubLevel |= 1 << enterpriseCapabilitySubLevel;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes (if found) the given enterprise capability sublevel from this
|
||||||
|
* {@code NetworkCapability} instance that were added via addEnterpriseCapabilitySubLevel(int)
|
||||||
|
*
|
||||||
|
* @param enterpriseCapabilitySubLevel the enterprise capability sublevel to be removed.
|
||||||
|
* @return This NetworkCapabilities instance, to facilitate chaining.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
private @NonNull NetworkCapabilities removeEnterpriseCapabilitySubLevel(
|
||||||
|
@EnterpriseCapabilitySubLevel int enterpriseCapabilitySubLevel) {
|
||||||
|
checkValidEnterpriseCapabilitySublevel(enterpriseCapabilitySubLevel);
|
||||||
|
final int mask = ~(1 << enterpriseCapabilitySubLevel);
|
||||||
|
mEnterpriseCapabilitySubLevel &= mask;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the underlying networks of this network.
|
* Set the underlying networks of this network.
|
||||||
*
|
*
|
||||||
@@ -815,6 +915,22 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean equalsEnterpriseCapabilitiesSubLevel(@NonNull NetworkCapabilities nc) {
|
||||||
|
return nc.mEnterpriseCapabilitySubLevel == this.mEnterpriseCapabilitySubLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean satisfiedByEnterpriseCapabilitiesSubLevel(@NonNull NetworkCapabilities nc) {
|
||||||
|
final int requestedEnterpriseCapabilitiesSubLevel = mEnterpriseCapabilitySubLevel;
|
||||||
|
final int providedEnterpriseCapabailitiesSubLevel = nc.mEnterpriseCapabilitySubLevel;
|
||||||
|
|
||||||
|
if ((providedEnterpriseCapabailitiesSubLevel & requestedEnterpriseCapabilitiesSubLevel)
|
||||||
|
== requestedEnterpriseCapabilitiesSubLevel) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean satisfiedByNetCapabilities(@NonNull NetworkCapabilities nc,
|
private boolean satisfiedByNetCapabilities(@NonNull NetworkCapabilities nc,
|
||||||
boolean onlyImmutable) {
|
boolean onlyImmutable) {
|
||||||
long requestedCapabilities = mNetworkCapabilities;
|
long requestedCapabilities = mNetworkCapabilities;
|
||||||
@@ -1720,6 +1836,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
&& satisfiedByTransportTypes(nc)
|
&& satisfiedByTransportTypes(nc)
|
||||||
&& (onlyImmutable || satisfiedByLinkBandwidths(nc))
|
&& (onlyImmutable || satisfiedByLinkBandwidths(nc))
|
||||||
&& satisfiedBySpecifier(nc)
|
&& satisfiedBySpecifier(nc)
|
||||||
|
&& satisfiedByEnterpriseCapabilitiesSubLevel(nc)
|
||||||
&& (onlyImmutable || satisfiedBySignalStrength(nc))
|
&& (onlyImmutable || satisfiedBySignalStrength(nc))
|
||||||
&& (onlyImmutable || satisfiedByUids(nc))
|
&& (onlyImmutable || satisfiedByUids(nc))
|
||||||
&& (onlyImmutable || satisfiedBySSID(nc))
|
&& (onlyImmutable || satisfiedBySSID(nc))
|
||||||
@@ -1822,7 +1939,8 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
&& equalsRequestor(that)
|
&& equalsRequestor(that)
|
||||||
&& equalsAdministratorUids(that)
|
&& equalsAdministratorUids(that)
|
||||||
&& equalsSubscriptionIds(that)
|
&& equalsSubscriptionIds(that)
|
||||||
&& equalsUnderlyingNetworks(that);
|
&& equalsUnderlyingNetworks(that)
|
||||||
|
&& equalsEnterpriseCapabilitiesSubLevel(that);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1846,7 +1964,8 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
+ Objects.hashCode(mRequestorPackageName) * 59
|
+ Objects.hashCode(mRequestorPackageName) * 59
|
||||||
+ Arrays.hashCode(mAdministratorUids) * 61
|
+ Arrays.hashCode(mAdministratorUids) * 61
|
||||||
+ Objects.hashCode(mSubIds) * 67
|
+ Objects.hashCode(mSubIds) * 67
|
||||||
+ Objects.hashCode(mUnderlyingNetworks) * 71;
|
+ Objects.hashCode(mUnderlyingNetworks) * 71
|
||||||
|
+ mEnterpriseCapabilitySubLevel * 73;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1882,6 +2001,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
dest.writeString(mRequestorPackageName);
|
dest.writeString(mRequestorPackageName);
|
||||||
dest.writeIntArray(CollectionUtils.toIntArray(mSubIds));
|
dest.writeIntArray(CollectionUtils.toIntArray(mSubIds));
|
||||||
dest.writeTypedList(mUnderlyingNetworks);
|
dest.writeTypedList(mUnderlyingNetworks);
|
||||||
|
dest.writeInt(mEnterpriseCapabilitySubLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final @android.annotation.NonNull Creator<NetworkCapabilities> CREATOR =
|
public static final @android.annotation.NonNull Creator<NetworkCapabilities> CREATOR =
|
||||||
@@ -1911,6 +2031,7 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
netCap.mSubIds.add(subIdInts[i]);
|
netCap.mSubIds.add(subIdInts[i]);
|
||||||
}
|
}
|
||||||
netCap.setUnderlyingNetworks(in.createTypedArrayList(Network.CREATOR));
|
netCap.setUnderlyingNetworks(in.createTypedArrayList(Network.CREATOR));
|
||||||
|
netCap.mEnterpriseCapabilitySubLevel = in.readInt();
|
||||||
return netCap;
|
return netCap;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@@ -2002,6 +2123,12 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
sb.append(" SubscriptionIds: ").append(mSubIds);
|
sb.append(" SubscriptionIds: ").append(mSubIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (0 != mEnterpriseCapabilitySubLevel) {
|
||||||
|
sb.append(" EnterpriseCapabilitySublevel: ");
|
||||||
|
appendStringRepresentationOfBitMaskToStringBuilder(sb, mEnterpriseCapabilitySubLevel,
|
||||||
|
NetworkCapabilities::enterpriseCapabilitySublevelNameOf, "&");
|
||||||
|
}
|
||||||
|
|
||||||
sb.append(" UnderlyingNetworks: ");
|
sb.append(" UnderlyingNetworks: ");
|
||||||
if (mUnderlyingNetworks != null) {
|
if (mUnderlyingNetworks != null) {
|
||||||
sb.append("[");
|
sb.append("[");
|
||||||
@@ -2101,6 +2228,11 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static @NonNull String enterpriseCapabilitySublevelNameOf(
|
||||||
|
@NetCapability int capability) {
|
||||||
|
return Integer.toString(capability);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -2141,6 +2273,20 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isValidEnterpriseCapabilitySubLevel(
|
||||||
|
@NetworkCapabilities.EnterpriseCapabilitySubLevel int enterpriseCapabilitySubLevel) {
|
||||||
|
return enterpriseCapabilitySubLevel >= NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1
|
||||||
|
&& enterpriseCapabilitySubLevel <= NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_5;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkValidEnterpriseCapabilitySublevel(
|
||||||
|
@NetworkCapabilities.EnterpriseCapabilitySubLevel int enterpriseCapabilitySubLevel) {
|
||||||
|
if (!isValidEnterpriseCapabilitySubLevel(enterpriseCapabilitySubLevel)) {
|
||||||
|
throw new IllegalArgumentException("enterprise capability sublevel "
|
||||||
|
+ enterpriseCapabilitySubLevel + " is out of range");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if this {@code NetworkCapability} instance is metered.
|
* Check if this {@code NetworkCapability} instance is metered.
|
||||||
*
|
*
|
||||||
@@ -2466,6 +2612,37 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the given enterprise capability sub level.
|
||||||
|
* Note that when searching for a network to satisfy a request, all capabilities sub level
|
||||||
|
* requested must be satisfied. Enterprise capability sub-level is applicable only
|
||||||
|
* for NET_CAPABILITY_ENTERPRISE capability
|
||||||
|
*
|
||||||
|
* @param enterpriseCapabilitySubLevel enterprise capability sub-level.
|
||||||
|
*
|
||||||
|
* @return this builder
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder addEnterpriseCapabilitySubLevel(
|
||||||
|
@EnterpriseCapabilitySubLevel int enterpriseCapabilitySubLevel) {
|
||||||
|
mCaps.addEnterpriseCapabilitySubLevel(enterpriseCapabilitySubLevel);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the given enterprise capability sub level. Enterprise capability sub-level is
|
||||||
|
* applicable only for NET_CAPABILITY_ENTERPRISE capability
|
||||||
|
*
|
||||||
|
* @param enterpriseCapabilitySubLevel the enterprise capability subLevel
|
||||||
|
* @return this builder
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder removeEnterpriseCapabilitySubLevel(
|
||||||
|
@EnterpriseCapabilitySubLevel int enterpriseCapabilitySubLevel) {
|
||||||
|
mCaps.removeEnterpriseCapabilitySubLevel(enterpriseCapabilitySubLevel);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the owner UID.
|
* Sets the owner UID.
|
||||||
*
|
*
|
||||||
@@ -2724,6 +2901,12 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
+ " administrator UIDs.");
|
+ " administrator UIDs.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((mCaps.getEnterpriseCapabilitySubLevels().length != 0)
|
||||||
|
&& !mCaps.hasCapability(NET_CAPABILITY_ENTERPRISE)) {
|
||||||
|
throw new IllegalStateException("Enterprise capability sublevel is applicable only"
|
||||||
|
+ " with ENTERPRISE capability.");
|
||||||
|
}
|
||||||
return new NetworkCapabilities(mCaps);
|
return new NetworkCapabilities(mCaps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,12 @@ import static android.net.NetworkCapabilities.MIN_TRANSPORT;
|
|||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_CBS;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_CBS;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_EIMS;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_EIMS;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_ENTERPRISE;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_3;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_4;
|
||||||
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_5;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_FOREGROUND;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_FOREGROUND;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_MMS;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_MMS;
|
||||||
@@ -347,7 +353,7 @@ public class NetworkCapabilitiesTest {
|
|||||||
if (isAtLeastS()) {
|
if (isAtLeastS()) {
|
||||||
// When this test is run on S+, NetworkCapabilities is as recent as the test,
|
// When this test is run on S+, NetworkCapabilities is as recent as the test,
|
||||||
// so this should be the most recent known number of fields.
|
// so this should be the most recent known number of fields.
|
||||||
assertParcelSane(cap, 17);
|
assertParcelSane(cap, 18);
|
||||||
} else if (isAtLeastR()) {
|
} else if (isAtLeastR()) {
|
||||||
assertParcelSane(cap, 15);
|
assertParcelSane(cap, 15);
|
||||||
} else {
|
} else {
|
||||||
@@ -797,6 +803,87 @@ public class NetworkCapabilitiesTest {
|
|||||||
} catch (IllegalStateException expected) { }
|
} catch (IllegalStateException expected) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test @IgnoreUpTo(Build.VERSION_CODES.S)
|
||||||
|
public void testEnterpriseCapabilitySubLevel() {
|
||||||
|
final NetworkCapabilities nc1 = new NetworkCapabilities.Builder()
|
||||||
|
.addCapability(NET_CAPABILITY_ENTERPRISE)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.build();
|
||||||
|
assertEquals(1, nc1.getEnterpriseCapabilitySubLevels().length);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1,
|
||||||
|
nc1.getEnterpriseCapabilitySubLevels()[0]);
|
||||||
|
final NetworkCapabilities nc2 = new NetworkCapabilities.Builder()
|
||||||
|
.addCapability(NET_CAPABILITY_ENTERPRISE)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2)
|
||||||
|
.build();
|
||||||
|
assertEquals(2, nc2.getEnterpriseCapabilitySubLevels().length);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1,
|
||||||
|
nc2.getEnterpriseCapabilitySubLevels()[0]);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2,
|
||||||
|
nc2.getEnterpriseCapabilitySubLevels()[1]);
|
||||||
|
final NetworkCapabilities nc3 = new NetworkCapabilities.Builder()
|
||||||
|
.addCapability(NET_CAPABILITY_ENTERPRISE)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_3)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_4)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_5)
|
||||||
|
.build();
|
||||||
|
assertEquals(5, nc3.getEnterpriseCapabilitySubLevels().length);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1,
|
||||||
|
nc3.getEnterpriseCapabilitySubLevels()[0]);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2,
|
||||||
|
nc3.getEnterpriseCapabilitySubLevels()[1]);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_3,
|
||||||
|
nc3.getEnterpriseCapabilitySubLevels()[2]);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_4,
|
||||||
|
nc3.getEnterpriseCapabilitySubLevels()[3]);
|
||||||
|
assertEquals(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_5,
|
||||||
|
nc3.getEnterpriseCapabilitySubLevels()[4]);
|
||||||
|
|
||||||
|
final Class<IllegalArgumentException> illegalArgumentExceptionClass =
|
||||||
|
IllegalArgumentException.class;
|
||||||
|
assertThrows(illegalArgumentExceptionClass, () -> new NetworkCapabilities.Builder()
|
||||||
|
.addEnterpriseCapabilitySubLevel(6)
|
||||||
|
.build());
|
||||||
|
assertThrows(illegalArgumentExceptionClass, () -> new NetworkCapabilities.Builder()
|
||||||
|
.removeEnterpriseCapabilitySubLevel(6)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
final Class<IllegalStateException> illegalStateException =
|
||||||
|
IllegalStateException.class;
|
||||||
|
assertThrows(illegalStateException, () -> new NetworkCapabilities.Builder()
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
final NetworkCapabilities nc4 = new NetworkCapabilities.Builder()
|
||||||
|
.addCapability(NET_CAPABILITY_ENTERPRISE)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2)
|
||||||
|
.removeEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.removeEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2)
|
||||||
|
.build();
|
||||||
|
assertEquals(0, nc4.getEnterpriseCapabilitySubLevels().length);
|
||||||
|
|
||||||
|
final NetworkCapabilities nc5 = new NetworkCapabilities.Builder()
|
||||||
|
.addCapability(NET_CAPABILITY_CBS)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.addEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2)
|
||||||
|
.removeEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_1)
|
||||||
|
.removeEnterpriseCapabilitySubLevel(NET_CAPABILITY_ENTERPRISE_SUB_LEVEL_2)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
assertTrue(nc4.satisfiedByNetworkCapabilities(nc1));
|
||||||
|
assertFalse(nc1.satisfiedByNetworkCapabilities(nc4));
|
||||||
|
|
||||||
|
assertFalse(nc3.satisfiedByNetworkCapabilities(nc2));
|
||||||
|
assertTrue(nc2.satisfiedByNetworkCapabilities(nc3));
|
||||||
|
|
||||||
|
assertFalse(nc1.satisfiedByNetworkCapabilities(nc5));
|
||||||
|
assertFalse(nc5.satisfiedByNetworkCapabilities(nc1));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWifiAwareNetworkSpecifier() {
|
public void testWifiAwareNetworkSpecifier() {
|
||||||
final NetworkCapabilities nc = new NetworkCapabilities()
|
final NetworkCapabilities nc = new NetworkCapabilities()
|
||||||
|
|||||||
Reference in New Issue
Block a user