Skip to content
Snippets Groups Projects
Commit 8c0f6782 authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju Committed by Gerrit Code Review
Browse files

Merge "Udpate setNetworkSpecifier to support Satellite Transport." into main

parents bd447266 a8a74e2c
No related branches found
No related tags found
No related merge requests found
......@@ -1770,9 +1770,13 @@ public final class NetworkCapabilities implements Parcelable {
public @NonNull NetworkCapabilities setNetworkSpecifier(
@NonNull NetworkSpecifier networkSpecifier) {
if (networkSpecifier != null
// Transport can be test, or test + a single other transport
// Transport can be test, or test + a single other transport or cellular + satellite
// transport. Note: cellular + satellite combination is allowed since both transport
// use the same specifier, TelephonyNetworkSpecifier.
&& mTransportTypes != (1L << TRANSPORT_TEST)
&& Long.bitCount(mTransportTypes & ~(1L << TRANSPORT_TEST)) != 1) {
&& Long.bitCount(mTransportTypes & ~(1L << TRANSPORT_TEST)) != 1
&& (mTransportTypes & ~(1L << TRANSPORT_TEST))
!= (1 << TRANSPORT_CELLULAR | 1 << TRANSPORT_SATELLITE)) {
throw new IllegalStateException("Must have a single non-test transport specified to "
+ "use setNetworkSpecifier");
}
......
......@@ -54,6 +54,7 @@ import static android.net.NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS;
import static android.net.NetworkCapabilities.SIGNAL_STRENGTH_UNSPECIFIED;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
import static android.net.NetworkCapabilities.TRANSPORT_SATELLITE;
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
import static android.net.NetworkCapabilities.TRANSPORT_USB;
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
......@@ -760,6 +761,47 @@ public class NetworkCapabilitiesTest {
() -> nc2.addTransportType(TRANSPORT_WIFI));
}
@Test
public void testSetNetworkSpecifierWithCellularAndSatelliteMultiTransportNc() {
final TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier(1);
NetworkCapabilities nc = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_CELLULAR)
.addTransportType(TRANSPORT_SATELLITE)
.setNetworkSpecifier(specifier)
.build();
// Adding a specifier did not crash with 2 transports if it is cellular + satellite
assertEquals(specifier, nc.getNetworkSpecifier());
}
@Test
public void testSetNetworkSpecifierWithWifiAndSatelliteMultiTransportNc() {
final TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier(1);
NetworkCapabilities.Builder nc1 = new NetworkCapabilities.Builder();
nc1.addTransportType(TRANSPORT_SATELLITE).addTransportType(TRANSPORT_WIFI);
// Adding multiple transports specifier to crash, apart from cellular + satellite
// combination
assertThrows("Cannot set NetworkSpecifier on a NetworkCapability with multiple transports!",
IllegalStateException.class,
() -> nc1.build().setNetworkSpecifier(specifier));
assertThrows("Cannot set NetworkSpecifier on a NetworkCapability with multiple transports!",
IllegalStateException.class,
() -> nc1.setNetworkSpecifier(specifier));
}
@Test
public void testSetNetworkSpecifierOnTestWithCellularAndSatelliteMultiTransportNc() {
final TelephonyNetworkSpecifier specifier = new TelephonyNetworkSpecifier(1);
NetworkCapabilities nc = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_TEST)
.addTransportType(TRANSPORT_CELLULAR)
.addTransportType(TRANSPORT_SATELLITE)
.setNetworkSpecifier(specifier)
.build();
// Adding a specifier did not crash with 3 transports , TEST + CELLULAR + SATELLITE and if
// one is test
assertEquals(specifier, nc.getNetworkSpecifier());
}
@Test
public void testSetNetworkSpecifierOnTestMultiTransportNc() {
final NetworkSpecifier specifier = CompatUtil.makeEthernetNetworkSpecifier("eth0");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment