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

This commit is contained in:
Nagendra Prasad Nagarle Basavaraju 2024-02-27 09:28:55 +00:00 • committed by Gerrit Code Review
commit 8c0f67820d
2 changed files with 48 additions and 2 deletions

View file

@ -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");
}

View file

@ -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");