Merge "Allow test+other networks to have specifiers"
This commit is contained in:
@@ -1536,9 +1536,12 @@ public final class NetworkCapabilities implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
public @NonNull NetworkCapabilities setNetworkSpecifier(
|
public @NonNull NetworkCapabilities setNetworkSpecifier(
|
||||||
@NonNull NetworkSpecifier networkSpecifier) {
|
@NonNull NetworkSpecifier networkSpecifier) {
|
||||||
if (networkSpecifier != null && Long.bitCount(mTransportTypes) != 1) {
|
if (networkSpecifier != null
|
||||||
throw new IllegalStateException("Must have a single transport specified to use " +
|
// Transport can be test, or test + a single other transport
|
||||||
"setNetworkSpecifier");
|
&& mTransportTypes != (1L << TRANSPORT_TEST)
|
||||||
|
&& Long.bitCount(mTransportTypes & ~(1L << TRANSPORT_TEST)) != 1) {
|
||||||
|
throw new IllegalStateException("Must have a single non-test transport specified to "
|
||||||
|
+ "use setNetworkSpecifier");
|
||||||
}
|
}
|
||||||
|
|
||||||
mNetworkSpecifier = networkSpecifier;
|
mNetworkSpecifier = networkSpecifier;
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ import static android.net.NetworkCapabilities.REDACT_FOR_LOCAL_MAC_ADDRESS;
|
|||||||
import static android.net.NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS;
|
import static android.net.NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS;
|
||||||
import static android.net.NetworkCapabilities.SIGNAL_STRENGTH_UNSPECIFIED;
|
import static android.net.NetworkCapabilities.SIGNAL_STRENGTH_UNSPECIFIED;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||||
|
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
|
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_USB;
|
import static android.net.NetworkCapabilities.TRANSPORT_USB;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
||||||
@@ -727,25 +728,38 @@ public class NetworkCapabilitiesTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testSetNetworkSpecifierOnMultiTransportNc() {
|
public void testSetNetworkSpecifierOnMultiTransportNc() {
|
||||||
// Sequence 1: Transport + Transport + NetworkSpecifier
|
// Sequence 1: Transport + Transport + NetworkSpecifier
|
||||||
NetworkCapabilities nc1 = new NetworkCapabilities();
|
NetworkCapabilities.Builder nc1 = new NetworkCapabilities.Builder();
|
||||||
nc1.addTransportType(TRANSPORT_CELLULAR).addTransportType(TRANSPORT_WIFI);
|
nc1.addTransportType(TRANSPORT_CELLULAR).addTransportType(TRANSPORT_WIFI);
|
||||||
try {
|
final NetworkSpecifier specifier = CompatUtil.makeEthernetNetworkSpecifier("eth0");
|
||||||
nc1.setNetworkSpecifier(CompatUtil.makeEthernetNetworkSpecifier("eth0"));
|
assertThrows("Cannot set NetworkSpecifier on a NetworkCapability with multiple transports!",
|
||||||
fail("Cannot set NetworkSpecifier on a NetworkCapability with multiple transports!");
|
IllegalStateException.class,
|
||||||
} catch (IllegalStateException expected) {
|
() -> nc1.build().setNetworkSpecifier(specifier));
|
||||||
// empty
|
assertThrows("Cannot set NetworkSpecifier on a NetworkCapability with multiple transports!",
|
||||||
}
|
IllegalStateException.class,
|
||||||
|
() -> nc1.setNetworkSpecifier(specifier));
|
||||||
|
|
||||||
// Sequence 2: Transport + NetworkSpecifier + Transport
|
// Sequence 2: Transport + NetworkSpecifier + Transport
|
||||||
NetworkCapabilities nc2 = new NetworkCapabilities();
|
NetworkCapabilities.Builder nc2 = new NetworkCapabilities.Builder();
|
||||||
nc2.addTransportType(TRANSPORT_CELLULAR).setNetworkSpecifier(
|
nc2.addTransportType(TRANSPORT_CELLULAR).setNetworkSpecifier(specifier);
|
||||||
CompatUtil.makeEthernetNetworkSpecifier("testtap3"));
|
|
||||||
try {
|
assertThrows("Cannot set a second TransportType of a network which has a NetworkSpecifier!",
|
||||||
nc2.addTransportType(TRANSPORT_WIFI);
|
IllegalStateException.class,
|
||||||
fail("Cannot set a second TransportType of a network which has a NetworkSpecifier!");
|
() -> nc2.build().addTransportType(TRANSPORT_WIFI));
|
||||||
} catch (IllegalStateException expected) {
|
assertThrows("Cannot set a second TransportType of a network which has a NetworkSpecifier!",
|
||||||
// empty
|
IllegalStateException.class,
|
||||||
|
() -> nc2.addTransportType(TRANSPORT_WIFI));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test @IgnoreUpTo(Build.VERSION_CODES.R) // New behavior in updatable NetworkCapabilities (S+)
|
||||||
|
public void testSetNetworkSpecifierOnTestMultiTransportNc() {
|
||||||
|
final NetworkSpecifier specifier = CompatUtil.makeEthernetNetworkSpecifier("eth0");
|
||||||
|
NetworkCapabilities nc = new NetworkCapabilities.Builder()
|
||||||
|
.addTransportType(TRANSPORT_TEST)
|
||||||
|
.addTransportType(TRANSPORT_ETHERNET)
|
||||||
|
.setNetworkSpecifier(specifier)
|
||||||
|
.build();
|
||||||
|
// Adding a specifier did not crash with 2 transports if one is TEST
|
||||||
|
assertEquals(specifier, nc.getNetworkSpecifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user