Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +18 −15 Original line number Diff line number Diff line Loading @@ -558,6 +558,16 @@ public class DataNetworkController extends Handler { + get(0) : "") + "]"; } /** * Print "capabilities - connectivity transport". e.g. INTERNET|NOT_RESTRICTED-SATELLITE */ @NonNull public String toStringSimplified() { return size() > 0 ? DataUtils.networkCapabilitiesToString(get(0).getCapabilities()) + "-" + DataUtils.connectivityTransportsToString(get(0).getTransportTypes()) : ""; } /** * Dump the network request list. * Loading Loading @@ -1838,8 +1848,7 @@ public class DataNetworkController extends Handler { log("Re-evaluating " + networkRequestLists.stream().mapToInt(List::size).sum() + " unsatisfied network requests in " + networkRequestLists.size() + " groups, " + networkRequestLists.stream().map( requestList -> DataUtils.networkCapabilitiesToString( requestList.get(0).getCapabilities())) NetworkRequestList::toStringSimplified) .collect(Collectors.joining(", ")) + " due to " + reason); // Second, see if any existing network can satisfy those network requests. Loading Loading @@ -2115,23 +2124,20 @@ public class DataNetworkController extends Handler { @NonNull TelephonyNetworkRequest networkRequest, @TransportType int transport) { // When the device is on satellite, only restricted network request can request network. if (mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.getNativeNetworkRequest().hasCapability( && networkRequest.hasCapability( NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)) { return false; } // If the network request does not specify cellular or satellite, then it can be // satisfied when the device is either on cellular ot satellite. if (!networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR) && !networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_SATELLITE)) { if (!networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) && !networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) { return true; } // Check if this is a IWLAN network request. if (networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR) if (networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) && transport == AccessNetworkConstants.TRANSPORT_TYPE_WLAN) { // If the cellular request would result in bringing up network on IWLAN, then no // need to check if the device is using satellite network. Loading @@ -2140,8 +2146,7 @@ public class DataNetworkController extends Handler { // As a short term solution, allowing some networks to be always marked as cellular // transport if certain capabilities are in the network request. if (networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR) && Arrays.stream( if (networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) && Arrays.stream( networkRequest.getCapabilities()) .anyMatch(mDataConfigManager.getForcedCellularTransportCapabilities()::contains)) { return true; Loading @@ -2151,11 +2156,9 @@ public class DataNetworkController extends Handler { // the network is satellite, then the request must specify satellite transport and // restricted. return (mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_SATELLITE)) && networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) || (!mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR)); && networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)); } /** Loading src/java/com/android/internal/telephony/data/DataUtils.java +40 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.AccessNetworkConstants.RadioAccessNetworkType; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.Annotation.ConnectivityTransport; import android.telephony.Annotation.DataActivityType; import android.telephony.Annotation.NetCapability; import android.telephony.Annotation.NetworkType; Loading Loading @@ -175,6 +176,44 @@ public class DataUtils { } } /** * Concat an array of {@link NetworkCapabilities.Transport} in string format. * * @param transports an array of connectivity transports * @return a string of the array of transports. */ @NonNull public static String connectivityTransportsToString( @NonNull @ConnectivityTransport int[] transports) { return Arrays.stream(transports).mapToObj(DataUtils::connectivityTransportToString) .collect(Collectors.joining("|")); } /** * Convert a {@link NetworkCapabilities.Transport} to a string. * * @param transport the connectivity transport * @return the transport in string */ @NonNull public static String connectivityTransportToString( @ConnectivityTransport int transport) { return switch (transport) { case NetworkCapabilities.TRANSPORT_CELLULAR -> "CELLULAR"; case NetworkCapabilities.TRANSPORT_WIFI -> "WIFI"; case NetworkCapabilities.TRANSPORT_BLUETOOTH -> "BLUETOOTH"; case NetworkCapabilities.TRANSPORT_ETHERNET -> "ETHERNET"; case NetworkCapabilities.TRANSPORT_VPN -> "VPN"; case NetworkCapabilities.TRANSPORT_WIFI_AWARE -> "WIFI_AWARE"; case NetworkCapabilities.TRANSPORT_LOWPAN -> "LOWPAN"; case NetworkCapabilities.TRANSPORT_TEST -> "TEST"; case NetworkCapabilities.TRANSPORT_USB -> "USB"; case NetworkCapabilities.TRANSPORT_THREAD -> "THREAD"; case NetworkCapabilities.TRANSPORT_SATELLITE -> "SATELLITE"; default -> "Unknown(" + transport + ")"; }; } /** * Convert network capabilities to string. * Loading Loading @@ -427,8 +466,7 @@ public class DataUtils { Arrays.stream(networkRequest.getNativeNetworkRequest() .getEnterpriseIds()) .boxed().collect(Collectors.toSet()), Arrays.stream(networkRequest.getNativeNetworkRequest() .getTransportTypes()) Arrays.stream(networkRequest.getTransportTypes()) .boxed().collect(Collectors.toSet()) ), v -> new NetworkRequestList()).add(networkRequest); Loading src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java +18 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.NetworkSpecifier; import android.os.SystemClock; import android.telephony.Annotation.ConnectivityTransport; import android.telephony.Annotation.NetCapability; import android.telephony.data.ApnSetting; import android.telephony.data.DataProfile; Loading Loading @@ -237,6 +238,23 @@ public class TelephonyNetworkRequest { return mNativeNetworkRequest.hasCapability(capability); } /** * @see NetworkRequest#getTransportTypes() */ @NonNull @ConnectivityTransport public int[] getTransportTypes() { return mNativeNetworkRequest.getTransportTypes(); } /** * @return {@code true} if the request can be served on the specified transport. * @see NetworkRequest#hasTransport */ public boolean hasTransport(@ConnectivityTransport int transport) { return mNativeNetworkRequest.hasTransport(transport); } /** * @see NetworkRequest#canBeSatisfiedBy(NetworkCapabilities) */ Loading Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +18 −15 Original line number Diff line number Diff line Loading @@ -558,6 +558,16 @@ public class DataNetworkController extends Handler { + get(0) : "") + "]"; } /** * Print "capabilities - connectivity transport". e.g. INTERNET|NOT_RESTRICTED-SATELLITE */ @NonNull public String toStringSimplified() { return size() > 0 ? DataUtils.networkCapabilitiesToString(get(0).getCapabilities()) + "-" + DataUtils.connectivityTransportsToString(get(0).getTransportTypes()) : ""; } /** * Dump the network request list. * Loading Loading @@ -1838,8 +1848,7 @@ public class DataNetworkController extends Handler { log("Re-evaluating " + networkRequestLists.stream().mapToInt(List::size).sum() + " unsatisfied network requests in " + networkRequestLists.size() + " groups, " + networkRequestLists.stream().map( requestList -> DataUtils.networkCapabilitiesToString( requestList.get(0).getCapabilities())) NetworkRequestList::toStringSimplified) .collect(Collectors.joining(", ")) + " due to " + reason); // Second, see if any existing network can satisfy those network requests. Loading Loading @@ -2115,23 +2124,20 @@ public class DataNetworkController extends Handler { @NonNull TelephonyNetworkRequest networkRequest, @TransportType int transport) { // When the device is on satellite, only restricted network request can request network. if (mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.getNativeNetworkRequest().hasCapability( && networkRequest.hasCapability( NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)) { return false; } // If the network request does not specify cellular or satellite, then it can be // satisfied when the device is either on cellular ot satellite. if (!networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR) && !networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_SATELLITE)) { if (!networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) && !networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) { return true; } // Check if this is a IWLAN network request. if (networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR) if (networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) && transport == AccessNetworkConstants.TRANSPORT_TYPE_WLAN) { // If the cellular request would result in bringing up network on IWLAN, then no // need to check if the device is using satellite network. Loading @@ -2140,8 +2146,7 @@ public class DataNetworkController extends Handler { // As a short term solution, allowing some networks to be always marked as cellular // transport if certain capabilities are in the network request. if (networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR) && Arrays.stream( if (networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) && Arrays.stream( networkRequest.getCapabilities()) .anyMatch(mDataConfigManager.getForcedCellularTransportCapabilities()::contains)) { return true; Loading @@ -2151,11 +2156,9 @@ public class DataNetworkController extends Handler { // the network is satellite, then the request must specify satellite transport and // restricted. return (mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_SATELLITE)) && networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) || (!mServiceState.isUsingNonTerrestrialNetwork() && networkRequest.getNativeNetworkRequest().hasTransport( NetworkCapabilities.TRANSPORT_CELLULAR)); && networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)); } /** Loading
src/java/com/android/internal/telephony/data/DataUtils.java +40 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.AccessNetworkConstants.RadioAccessNetworkType; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.Annotation.ConnectivityTransport; import android.telephony.Annotation.DataActivityType; import android.telephony.Annotation.NetCapability; import android.telephony.Annotation.NetworkType; Loading Loading @@ -175,6 +176,44 @@ public class DataUtils { } } /** * Concat an array of {@link NetworkCapabilities.Transport} in string format. * * @param transports an array of connectivity transports * @return a string of the array of transports. */ @NonNull public static String connectivityTransportsToString( @NonNull @ConnectivityTransport int[] transports) { return Arrays.stream(transports).mapToObj(DataUtils::connectivityTransportToString) .collect(Collectors.joining("|")); } /** * Convert a {@link NetworkCapabilities.Transport} to a string. * * @param transport the connectivity transport * @return the transport in string */ @NonNull public static String connectivityTransportToString( @ConnectivityTransport int transport) { return switch (transport) { case NetworkCapabilities.TRANSPORT_CELLULAR -> "CELLULAR"; case NetworkCapabilities.TRANSPORT_WIFI -> "WIFI"; case NetworkCapabilities.TRANSPORT_BLUETOOTH -> "BLUETOOTH"; case NetworkCapabilities.TRANSPORT_ETHERNET -> "ETHERNET"; case NetworkCapabilities.TRANSPORT_VPN -> "VPN"; case NetworkCapabilities.TRANSPORT_WIFI_AWARE -> "WIFI_AWARE"; case NetworkCapabilities.TRANSPORT_LOWPAN -> "LOWPAN"; case NetworkCapabilities.TRANSPORT_TEST -> "TEST"; case NetworkCapabilities.TRANSPORT_USB -> "USB"; case NetworkCapabilities.TRANSPORT_THREAD -> "THREAD"; case NetworkCapabilities.TRANSPORT_SATELLITE -> "SATELLITE"; default -> "Unknown(" + transport + ")"; }; } /** * Convert network capabilities to string. * Loading Loading @@ -427,8 +466,7 @@ public class DataUtils { Arrays.stream(networkRequest.getNativeNetworkRequest() .getEnterpriseIds()) .boxed().collect(Collectors.toSet()), Arrays.stream(networkRequest.getNativeNetworkRequest() .getTransportTypes()) Arrays.stream(networkRequest.getTransportTypes()) .boxed().collect(Collectors.toSet()) ), v -> new NetworkRequestList()).add(networkRequest); Loading
src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java +18 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.NetworkSpecifier; import android.os.SystemClock; import android.telephony.Annotation.ConnectivityTransport; import android.telephony.Annotation.NetCapability; import android.telephony.data.ApnSetting; import android.telephony.data.DataProfile; Loading Loading @@ -237,6 +238,23 @@ public class TelephonyNetworkRequest { return mNativeNetworkRequest.hasCapability(capability); } /** * @see NetworkRequest#getTransportTypes() */ @NonNull @ConnectivityTransport public int[] getTransportTypes() { return mNativeNetworkRequest.getTransportTypes(); } /** * @return {@code true} if the request can be served on the specified transport. * @see NetworkRequest#hasTransport */ public boolean hasTransport(@ConnectivityTransport int transport) { return mNativeNetworkRequest.hasTransport(transport); } /** * @see NetworkRequest#canBeSatisfiedBy(NetworkCapabilities) */ Loading