diff options
author | Nagendra Prasad Nagarle Basavaraju <nagendranb@google.com> | 2024-02-09 03:35:53 +0000 |
---|---|---|
committer | Jack Yu <jackyu@google.com> | 2024-03-04 00:05:39 -0800 |
commit | 7304925011cd970cda191284bf3984b7f487b741 (patch) | |
tree | c17da284330fe4c4cfae93b54ff6c15d3e107e99 | |
parent | bb8e7f93bd0f4483a1a65dcf03c76db153d93b01 (diff) | |
download | telephony-7304925011cd970cda191284bf3984b7f487b741.tar.gz |
Satellite Internet Support
1. Restrict network on satellite.
2. Support satellite transport.
3. For a short term solution, add possibility to mark satellite
network with cellular transport.
Bug: 326972202
Test: atest FrameworksTelephonyTests, CtsTelephonyTestCases,
Test: Device test at b/324536098#comment76
Test: Basic telephony functionality tests
Change-Id: I62ca42a254d6faa15a3adaef5ead9a1b9d17d2b1
18 files changed, 785 insertions, 306 deletions
diff --git a/src/java/com/android/internal/telephony/data/DataConfigManager.java b/src/java/com/android/internal/telephony/data/DataConfigManager.java index 0e06dad972..6ad89ce15c 100644 --- a/src/java/com/android/internal/telephony/data/DataConfigManager.java +++ b/src/java/com/android/internal/telephony/data/DataConfigManager.java @@ -1436,6 +1436,18 @@ public class DataConfigManager extends Handler { } /** + * @return The capabilities that network will be forced to mark as cellular transport. + */ + public @NetCapability Set<Integer> getForcedCellularTransportCapabilities() { + String[] forcedCellularTransportCapabilities = mResources.getStringArray( + com.android.internal.R.array.config_force_cellular_transport_capabilities); + + return Arrays.stream(forcedCellularTransportCapabilities) + .map(DataUtils::getNetworkCapabilityFromString) + .collect(Collectors.toSet()); + } + + /** * Log debug messages. * @param s debug messages */ @@ -1543,6 +1555,9 @@ public class DataConfigManager extends Handler { pw.println("isTetheringProfileDisabledForRoaming=" + isTetheringProfileDisabledForRoaming()); pw.println("allowClearInitialAttachDataProfile=" + allowClearInitialAttachDataProfile()); + pw.println("forcedCellularTransportCapabilities=" + getForcedCellularTransportCapabilities() + .stream().map(DataUtils::networkCapabilityToString) + .collect(Collectors.joining(","))); pw.decreaseIndent(); } } diff --git a/src/java/com/android/internal/telephony/data/DataEvaluation.java b/src/java/com/android/internal/telephony/data/DataEvaluation.java index 3d10e9cd22..a54884f911 100644 --- a/src/java/com/android/internal/telephony/data/DataEvaluation.java +++ b/src/java/com/android/internal/telephony/data/DataEvaluation.java @@ -346,7 +346,9 @@ public class DataEvaluation { /** Handover max retry stopped but network is not on the preferred transport. */ HANDOVER_RETRY_STOPPED(true), /** BootStrap sim data limit reached. */ - DATA_LIMIT_REACHED(true); + DATA_LIMIT_REACHED(true), + /** Data network connectivity transport not allowed. */ + DATA_NETWORK_TRANSPORT_NOT_ALLOWED(true); private final boolean mIsHardReason; diff --git a/src/java/com/android/internal/telephony/data/DataNetwork.java b/src/java/com/android/internal/telephony/data/DataNetwork.java index 0dbbc5c024..02d2075a8c 100644 --- a/src/java/com/android/internal/telephony/data/DataNetwork.java +++ b/src/java/com/android/internal/telephony/data/DataNetwork.java @@ -314,6 +314,7 @@ public class DataNetwork extends StateMachine { TEAR_DOWN_REASON_ONLY_ALLOWED_SINGLE_NETWORK, TEAR_DOWN_REASON_PREFERRED_DATA_SWITCHED, TEAR_DOWN_REASON_DATA_LIMIT_REACHED, + TEAR_DOWN_REASON_DATA_NETWORK_TRANSPORT_NOT_ALLOWED, }) public @interface TearDownReason {} @@ -413,6 +414,9 @@ public class DataNetwork extends StateMachine { /** Data network tear down due to bootstrap sim data limit reached. */ public static final int TEAR_DOWN_REASON_DATA_LIMIT_REACHED = 31; + /** Data network tear down due to current data network transport mismatch. */ + public static final int TEAR_DOWN_REASON_DATA_NETWORK_TRANSPORT_NOT_ALLOWED = 32; + //********************************************************************************************// // WHENEVER ADD A NEW TEAR DOWN REASON, PLEASE UPDATE DataDeactivateReasonEnum in enums.proto // //********************************************************************************************// @@ -698,6 +702,11 @@ public class DataNetwork extends StateMachine { */ private boolean mLastKnownRoamingState; + /** + * The non-terrestrial status + */ + private final boolean mIsSatellite; + /** The reason that why setting up this data network is allowed. */ private @NonNull DataAllowedReason mDataAllowedReason; @@ -988,6 +997,8 @@ public class DataNetwork extends StateMachine { mTransport = transport; mLastKnownDataNetworkType = getDataNetworkType(); mLastKnownRoamingState = mPhone.getServiceState().getDataRoamingFromRegistration(); + mIsSatellite = mPhone.getServiceState().isUsingNonTerrestrialNetwork() + && transport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN; mDataAllowedReason = dataAllowedReason; dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime()); mAttachedNetworkRequestList.addAll(networkRequestList); @@ -2214,11 +2225,26 @@ public class DataNetwork extends StateMachine { } /** + * @return {@code true} if this is a satellite data network. + */ + public boolean isSatellite() { + return mIsSatellite; + } + + /** * Update the network capabilities. */ private void updateNetworkCapabilities() { - final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder() - .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(); + + if (mFlags.carrierEnabledSatelliteFlag() && mIsSatellite + && mDataConfigManager.getForcedCellularTransportCapabilities().stream() + .noneMatch(this::hasNetworkCapabilityInNetworkRequests)) { + builder.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); + } else { + builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + } + boolean roaming = mPhone.getServiceState().getDataRoaming(); builder.setNetworkSpecifier(new TelephonyNetworkSpecifier.Builder() @@ -2385,6 +2411,11 @@ public class DataNetwork extends StateMachine { builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); } + // mark the network as restricted when service state is non-terrestrial(satellite network) + if (mFlags.carrierEnabledSatelliteFlag() && mIsSatellite) { + builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + } + // Check if the feature force MMS on IWLAN is enabled. When the feature is enabled, MMS // will be attempted on IWLAN if possible, even if existing cellular networks already // supports IWLAN. @@ -2401,7 +2432,7 @@ public class DataNetwork extends StateMachine { DataProfile dataProfile = mDataNetworkController.getDataProfileManager() .getDataProfileForNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest.Builder().addCapability( - NetworkCapabilities.NET_CAPABILITY_MMS).build(), mPhone), + NetworkCapabilities.NET_CAPABILITY_MMS).build(), mPhone, mFlags), TelephonyManager.NETWORK_TYPE_IWLAN, false, false, false); // If we find another data data profile that can support MMS on IWLAN, then remove // the MMS capability from this cellular network. This will allow IWLAN to be @@ -3790,6 +3821,8 @@ public class DataNetwork extends StateMachine { return "TEAR_DOWN_REASON_PREFERRED_DATA_SWITCHED"; case TEAR_DOWN_REASON_DATA_LIMIT_REACHED: return "TEAR_DOWN_REASON_DATA_LIMIT_REACHED"; + case TEAR_DOWN_REASON_DATA_NETWORK_TRANSPORT_NOT_ALLOWED: + return "TEAR_DOWN_REASON_DATA_NETWORK_TRANSPORT_NOT_ALLOWED"; default: return "UNKNOWN(" + reason + ")"; } diff --git a/src/java/com/android/internal/telephony/data/DataNetworkController.java b/src/java/com/android/internal/telephony/data/DataNetworkController.java index 70d3b23142..7eb7c164c7 100644 --- a/src/java/com/android/internal/telephony/data/DataNetworkController.java +++ b/src/java/com/android/internal/telephony/data/DataNetworkController.java @@ -1455,7 +1455,7 @@ public class DataNetworkController extends Handler { new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); // If we don't skip checking existing network, then we should check If one of the // existing networks can satisfy the internet request, then internet is allowed. if ((!mFeatureFlags.ignoreExistingNetworksForInternetAllowedChecking() @@ -1515,7 +1515,7 @@ public class DataNetworkController extends Handler { new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataEvaluation evaluation = evaluateNetworkRequest(internetRequest, DataEvaluationReason.EXTERNAL_QUERY); return evaluation.getDataDisallowedReasons(); @@ -1535,6 +1535,13 @@ public class DataNetworkController extends Handler { int transport = mAccessNetworksManager.getPreferredTransportByNetworkCapability( networkRequest.getApnTypeNetworkCapability()); + // Check if the request can be satisfied by cellular network or satellite network. + if (mFeatureFlags.carrierEnabledSatelliteFlag() + && !canConnectivityTransportSatisfyNetworkRequest(networkRequest, transport)) { + evaluation.addDataDisallowedReason( + DataDisallowedReason.DATA_NETWORK_TRANSPORT_NOT_ALLOWED); + } + // Bypass all checks for emergency network request. if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_EIMS)) { DataProfile emergencyProfile = mDataProfileManager.getDataProfileForNetworkRequest( @@ -1549,14 +1556,13 @@ public class DataNetworkController extends Handler { evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_THROTTLED); log("Emergency network request is throttled by the previous setup data " + "call response."); - log(evaluation.toString()); - networkRequest.setEvaluation(evaluation); - return evaluation; } - evaluation.addDataAllowedReason(DataAllowedReason.EMERGENCY_REQUEST); - if (emergencyProfile != null) { - evaluation.setCandidateDataProfile(emergencyProfile); + if (!evaluation.containsDisallowedReasons()) { + evaluation.addDataAllowedReason(DataAllowedReason.EMERGENCY_REQUEST); + if (emergencyProfile != null) { + evaluation.setCandidateDataProfile(emergencyProfile); + } } networkRequest.setEvaluation(evaluation); log(evaluation.toString()); @@ -1645,11 +1651,6 @@ public class DataNetworkController extends Handler { evaluation.addDataDisallowedReason(DataDisallowedReason.CDMA_EMERGENCY_CALLBACK_MODE); } - // Check whether data is disallowed while using satellite - if (isDataDisallowedDueToSatellite(networkRequest.getCapabilities())) { - evaluation.addDataDisallowedReason(DataDisallowedReason.SERVICE_OPTION_NOT_SUPPORTED); - } - // Check if only one data network is allowed. if (isOnlySingleDataNetworkAllowed(transport) && !hasCapabilityExemptsFromSinglePdnRule(networkRequest.getCapabilities())) { @@ -1822,7 +1823,7 @@ public class DataNetworkController extends Handler { networkRequestList.add(networkRequest); } } - return DataUtils.getGroupedNetworkRequestList(networkRequestList); + return DataUtils.getGroupedNetworkRequestList(networkRequestList, mFeatureFlags); } /** @@ -1891,10 +1892,26 @@ public class DataNetworkController extends Handler { evaluation.addDataDisallowedReason(DataDisallowedReason.CDMA_EMERGENCY_CALLBACK_MODE); } - // Check whether data is disallowed while using satellite - if (isDataDisallowedDueToSatellite(dataNetwork.getNetworkCapabilities() - .getCapabilities())) { - evaluation.addDataDisallowedReason(DataDisallowedReason.SERVICE_OPTION_NOT_SUPPORTED); + // If the network is satellite, then the network must be restricted. + if (mFeatureFlags.carrierEnabledSatelliteFlag()) { + // The IWLAN data network should remain intact even when satellite is connected. + if (dataNetwork.getTransport() != AccessNetworkConstants.TRANSPORT_TYPE_WLAN) { + // On satellite, every data network needs to be restricted. + if (mServiceState.isUsingNonTerrestrialNetwork() + && dataNetwork.getNetworkCapabilities() + .hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)) { + evaluation.addDataDisallowedReason( + DataDisallowedReason.DATA_NETWORK_TRANSPORT_NOT_ALLOWED); + } + + // Check if the transport is compatible with the network + if (mServiceState.isUsingNonTerrestrialNetwork() != dataNetwork.isSatellite()) { + // Since we don't support satellite/cellular network handover, we should always + // tear down the network when transport changes. + evaluation.addDataDisallowedReason( + DataDisallowedReason.DATA_NETWORK_TRANSPORT_NOT_ALLOWED); + } + } } // Check whether data limit reached for bootstrap sim, else re-evaluate based on the timer @@ -2082,6 +2099,65 @@ public class DataNetworkController extends Handler { } /** + * Check if the transport from connectivity service can satisfy the network request. Note the + * transport here is connectivity service's transport (Wifi, cellular, satellite, etc..), not + * the widely used {@link AccessNetworkConstants#TRANSPORT_TYPE_WLAN WLAN}, + * {@link AccessNetworkConstants#TRANSPORT_TYPE_WWAN WWAN} transport in telephony. + * + * @param networkRequest Network request + * @param transport The preferred transport type for the request. The transport here is + * WWAN/WLAN. + * @return {@code true} if the connectivity transport can satisfy the network request, otherwise + * {@code false}. + */ + private boolean canConnectivityTransportSatisfyNetworkRequest( + @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( + 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)) { + return true; + } + + // Check if this is a IWLAN network request. + if (networkRequest.getNativeNetworkRequest().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. + return true; + } + + // 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( + networkRequest.getCapabilities()) + .anyMatch(mDataConfigManager.getForcedCellularTransportCapabilities()::contains)) { + return true; + } + + // If the network is cellular, then the request must specify cellular transport. Or if the + // the network is satellite, then the request must specify satellite transport and + // restricted. + return (mServiceState.isUsingNonTerrestrialNetwork() + && networkRequest.getNativeNetworkRequest().hasTransport( + NetworkCapabilities.TRANSPORT_SATELLITE)) + || (!mServiceState.isUsingNonTerrestrialNetwork() + && networkRequest.getNativeNetworkRequest().hasTransport( + NetworkCapabilities.TRANSPORT_CELLULAR)); + } + + /** * tethering and enterprise capabilities are not respected as restricted requests. For a request * with these capabilities, any soft disallowed reasons are honored. * @param networkRequest The network request to evaluate. @@ -2300,6 +2376,8 @@ public class DataNetworkController extends Handler { return DataNetwork.TEAR_DOWN_REASON_HANDOVER_FAILED; case DATA_LIMIT_REACHED: return DataNetwork.TEAR_DOWN_REASON_DATA_LIMIT_REACHED; + case DATA_NETWORK_TRANSPORT_NOT_ALLOWED: + return DataNetwork.TEAR_DOWN_REASON_DATA_NETWORK_TRANSPORT_NOT_ALLOWED; } } return DataNetwork.TEAR_DOWN_REASON_NONE; @@ -3590,7 +3668,7 @@ public class DataNetworkController extends Handler { return true; } - if (!oldNri.isNonTerrestrialNetwork() && newNri.isNonTerrestrialNetwork()) { + if (oldNri.isNonTerrestrialNetwork() != newNri.isNonTerrestrialNetwork()) { return true; } @@ -3647,7 +3725,7 @@ public class DataNetworkController extends Handler { return true; } - if (oldSS.isUsingNonTerrestrialNetwork() && !newSS.isUsingNonTerrestrialNetwork()) { + if (oldSS.isUsingNonTerrestrialNetwork() != newSS.isUsingNonTerrestrialNetwork()) { return true; } @@ -4023,41 +4101,6 @@ public class DataNetworkController extends Handler { } /** - * Check whether data is disallowed while using satellite - * @param capabilities An array of the NetworkCapabilities to be checked - * @return {@code true} if the capabilities contain any capability that are restricted - * while using satellite else {@code false} - */ - private boolean isDataDisallowedDueToSatellite(@NetCapability int[] capabilities) { - if (!mFeatureFlags.carrierEnabledSatelliteFlag()) { - return false; - } - - if (!mServiceState.isUsingNonTerrestrialNetwork()) { - // Device is not connected to satellite - return false; - } - - Set<Integer> restrictedCapabilities = Set.of(NetworkCapabilities.NET_CAPABILITY_INTERNET); - if (Arrays.stream(capabilities).noneMatch(restrictedCapabilities::contains)) { - // Only internet data disallowed while using satellite - return false; - } - - for (NetworkRegistrationInfo nri : mServiceState.getNetworkRegistrationInfoList()) { - if (nri.isNonTerrestrialNetwork() - && nri.getAvailableServices().contains( - NetworkRegistrationInfo.SERVICE_TYPE_DATA)) { - // Data is supported while using satellite - return false; - } - } - - // Data is disallowed while using satellite - return true; - } - - /** * Request network validation. * * Nnetwork validation request is sent to the DataNetwork that matches the network capability diff --git a/src/java/com/android/internal/telephony/data/DataProfileManager.java b/src/java/com/android/internal/telephony/data/DataProfileManager.java index 51fc71babb..0da220b057 100644 --- a/src/java/com/android/internal/telephony/data/DataProfileManager.java +++ b/src/java/com/android/internal/telephony/data/DataProfileManager.java @@ -899,7 +899,7 @@ public class DataProfileManager extends Handler { TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); return getDataProfileForNetworkRequest(networkRequest, networkType, mPhone.getServiceState().isUsingNonTerrestrialNetwork(), mDataNetworkController.isEsimBootStrapProvisioningActivated(), diff --git a/src/java/com/android/internal/telephony/data/DataRetryManager.java b/src/java/com/android/internal/telephony/data/DataRetryManager.java index 5933463517..1fdc1829d4 100644 --- a/src/java/com/android/internal/telephony/data/DataRetryManager.java +++ b/src/java/com/android/internal/telephony/data/DataRetryManager.java @@ -1192,7 +1192,7 @@ public class DataRetryManager extends Handler { boolean retryScheduled = false; List<NetworkRequestList> groupedNetworkRequestLists = - DataUtils.getGroupedNetworkRequestList(requestList); + DataUtils.getGroupedNetworkRequestList(requestList, mFlags); for (DataSetupRetryRule retryRule : mDataSetupRetryRuleList) { if (retryRule.isPermanentFailCauseRule() && retryRule.getFailCauses().contains(cause)) { if (dataProfile.getApnSetting() != null) { diff --git a/src/java/com/android/internal/telephony/data/DataUtils.java b/src/java/com/android/internal/telephony/data/DataUtils.java index 0dda7b53e5..2693902099 100644 --- a/src/java/com/android/internal/telephony/data/DataUtils.java +++ b/src/java/com/android/internal/telephony/data/DataUtils.java @@ -41,6 +41,7 @@ import android.telephony.ims.feature.ImsFeature; import android.util.ArrayMap; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; +import com.android.internal.telephony.flags.FeatureFlags; import com.android.telephony.Rlog; import java.text.SimpleDateFormat; @@ -406,35 +407,59 @@ public class DataUtils { * Group the network requests into several list that contains the same network capabilities. * * @param networkRequestList The provided network requests. + * @param featureFlags The feature flag. + * * @return The network requests after grouping. */ public static @NonNull List<NetworkRequestList> getGroupedNetworkRequestList( - @NonNull NetworkRequestList networkRequestList) { - // Key is the capabilities set. - Map<Set<Integer>, NetworkRequestList> requestsMap = new ArrayMap<>(); - for (TelephonyNetworkRequest networkRequest : networkRequestList) { - requestsMap.computeIfAbsent(Arrays.stream(networkRequest.getCapabilities()) - .boxed().collect(Collectors.toSet()), - v -> new NetworkRequestList()).add(networkRequest); - } + @NonNull NetworkRequestList networkRequestList, @NonNull FeatureFlags featureFlags) { List<NetworkRequestList> requests = new ArrayList<>(); - // Create separate groups for enterprise requests with different enterprise IDs. - for (NetworkRequestList requestList : requestsMap.values()) { - List<TelephonyNetworkRequest> enterpriseRequests = requestList.stream() - .filter(request -> - request.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)) - .collect(Collectors.toList()); - if (enterpriseRequests.isEmpty()) { - requests.add(requestList); - continue; + if (featureFlags.carrierEnabledSatelliteFlag()) { + record NetworkCapabilitiesKey(Set<Integer> caps, Set<Integer> enterpriseIds, + Set<Integer> transportTypes) { } + + // Key is the combination of capabilities, enterprise ids, and transport types. + Map<NetworkCapabilitiesKey, NetworkRequestList> requestsMap = new ArrayMap<>(); + for (TelephonyNetworkRequest networkRequest : networkRequestList) { + requestsMap.computeIfAbsent(new NetworkCapabilitiesKey( + Arrays.stream(networkRequest.getCapabilities()) + .boxed().collect(Collectors.toSet()), + Arrays.stream(networkRequest.getNativeNetworkRequest() + .getEnterpriseIds()) + .boxed().collect(Collectors.toSet()), + Arrays.stream(networkRequest.getNativeNetworkRequest() + .getTransportTypes()) + .boxed().collect(Collectors.toSet()) + ), + v -> new NetworkRequestList()).add(networkRequest); + } + requests.addAll(requestsMap.values()); + } else { + // Key is the capabilities set. + Map<Set<Integer>, NetworkRequestList> requestsMap = new ArrayMap<>(); + for (TelephonyNetworkRequest networkRequest : networkRequestList) { + requestsMap.computeIfAbsent(Arrays.stream(networkRequest.getCapabilities()) + .boxed().collect(Collectors.toSet()), + v -> new NetworkRequestList()).add(networkRequest); } - // Key is the enterprise ID - Map<Integer, NetworkRequestList> enterpriseRequestsMap = new ArrayMap<>(); - for (TelephonyNetworkRequest request : enterpriseRequests) { - enterpriseRequestsMap.computeIfAbsent(request.getCapabilityDifferentiator(), - v -> new NetworkRequestList()).add(request); + // Create separate groups for enterprise requests with different enterprise IDs. + for (NetworkRequestList requestList : requestsMap.values()) { + List<TelephonyNetworkRequest> enterpriseRequests = requestList.stream() + .filter(request -> request.hasCapability( + NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)) + .toList(); + if (enterpriseRequests.isEmpty()) { + requests.add(requestList); + continue; + } + // Key is the enterprise ID + Map<Integer, NetworkRequestList> enterpriseRequestsMap = new ArrayMap<>(); + for (TelephonyNetworkRequest request : enterpriseRequests) { + enterpriseRequestsMap.computeIfAbsent(request.getCapabilityDifferentiator(), + v -> new NetworkRequestList()).add(request); + } + requests.addAll(enterpriseRequestsMap.values()); } - requests.addAll(enterpriseRequestsMap.values()); } // Sort the requests so the network request list with higher priority will be at the front. return requests.stream() diff --git a/src/java/com/android/internal/telephony/data/PhoneSwitcher.java b/src/java/com/android/internal/telephony/data/PhoneSwitcher.java index 8dc8098aed..6dd4dd15da 100644 --- a/src/java/com/android/internal/telephony/data/PhoneSwitcher.java +++ b/src/java/com/android/internal/telephony/data/PhoneSwitcher.java @@ -17,6 +17,7 @@ package com.android.internal.telephony.data; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; +import static android.net.NetworkCapabilities.TRANSPORT_SATELLITE; import static android.telephony.CarrierConfigManager.KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG; import static android.telephony.SubscriptionManager.DEFAULT_PHONE_INDEX; import static android.telephony.SubscriptionManager.DEFAULT_SUBSCRIPTION_ID; @@ -570,6 +571,7 @@ public class PhoneSwitcher extends Handler { final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder() .addTransportType(TRANSPORT_CELLULAR) + .addTransportType(TRANSPORT_SATELLITE) .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) .addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL) .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN) @@ -987,7 +989,7 @@ public class PhoneSwitcher extends Handler { private void onRequestNetwork(NetworkRequest networkRequest) { TelephonyNetworkRequest telephonyNetworkRequest = new TelephonyNetworkRequest( - networkRequest, PhoneFactory.getDefaultPhone()); + networkRequest, PhoneFactory.getDefaultPhone(), mFlags); if (!mNetworkRequestList.contains(telephonyNetworkRequest)) { mNetworkRequestList.add(telephonyNetworkRequest); onEvaluate(REQUESTS_CHANGED, "netRequest"); @@ -996,7 +998,7 @@ public class PhoneSwitcher extends Handler { private void onReleaseNetwork(NetworkRequest networkRequest) { TelephonyNetworkRequest telephonyNetworkRequest = new TelephonyNetworkRequest( - networkRequest, PhoneFactory.getDefaultPhone()); + networkRequest, PhoneFactory.getDefaultPhone(), mFlags); if (mNetworkRequestList.remove(telephonyNetworkRequest)) { onEvaluate(REQUESTS_CHANGED, "netReleased"); collectReleaseNetworkMetrics(networkRequest); diff --git a/src/java/com/android/internal/telephony/data/TelephonyNetworkFactory.java b/src/java/com/android/internal/telephony/data/TelephonyNetworkFactory.java index 377c21990d..99a443d5df 100644 --- a/src/java/com/android/internal/telephony/data/TelephonyNetworkFactory.java +++ b/src/java/com/android/internal/telephony/data/TelephonyNetworkFactory.java @@ -138,6 +138,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { public NetworkCapabilities makeNetworkFilter(int subscriptionId) { final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE) .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) .addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL) .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN) @@ -263,7 +264,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { private void onNeedNetworkFor(Message msg) { TelephonyNetworkRequest networkRequest = - new TelephonyNetworkRequest((NetworkRequest) msg.obj, mPhone); + new TelephonyNetworkRequest((NetworkRequest) msg.obj, mPhone, mFlags); boolean shouldApply = mPhoneSwitcher.shouldApplyNetworkRequest( networkRequest, mPhone.getPhoneId()); @@ -289,7 +290,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { private void onReleaseNetworkFor(Message msg) { TelephonyNetworkRequest networkRequest = - new TelephonyNetworkRequest((NetworkRequest) msg.obj, mPhone); + new TelephonyNetworkRequest((NetworkRequest) msg.obj, mPhone, mFlags); boolean applied = mNetworkRequests.get(networkRequest) != AccessNetworkConstants.TRANSPORT_TYPE_INVALID; diff --git a/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java b/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java index 26683020a0..f0ba8d678a 100644 --- a/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java +++ b/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java @@ -31,6 +31,7 @@ import android.telephony.data.TrafficDescriptor; import android.telephony.data.TrafficDescriptor.OsAppId; import com.android.internal.telephony.Phone; +import com.android.internal.telephony.flags.FeatureFlags; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -182,15 +183,21 @@ public class TelephonyNetworkRequest { /** The data evaluation result. */ private @Nullable DataEvaluation mEvaluation; + /** Feature flag. */ + private final @NonNull FeatureFlags mFeatureFlags; + /** * Constructor * * @param request The native network request from the clients. * @param phone The phone instance + * @param featureFlags The feature flag */ - public TelephonyNetworkRequest(NetworkRequest request, Phone phone) { + public TelephonyNetworkRequest(@NonNull NetworkRequest request, @NonNull Phone phone, + @NonNull FeatureFlags featureFlags) { mPhone = phone; mNativeNetworkRequest = request; + mFeatureFlags = featureFlags; int capabilitiesAttributes = CAPABILITY_ATTRIBUTE_NONE; for (int networkCapability : mNativeNetworkRequest.getCapabilities()) { @@ -274,6 +281,31 @@ public class TelephonyNetworkRequest { if ((hasAttribute(CAPABILITY_ATTRIBUTE_APN_SETTING) || hasAttribute(CAPABILITY_ATTRIBUTE_TRAFFIC_DESCRIPTOR_DNN)) && dataProfile.getApnSetting() != null) { + if (mFeatureFlags.carrierEnabledSatelliteFlag()) { + if (mNativeNetworkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) + && !mNativeNetworkRequest.hasTransport( + NetworkCapabilities.TRANSPORT_SATELLITE)) { + if (Arrays.stream(getCapabilities()).noneMatch(mDataConfigManager + .getForcedCellularTransportCapabilities()::contains)) { + // If the request is explicitly for the cellular, then the data profile + // needs to support cellular. + if (!dataProfile.getApnSetting().isForInfrastructure( + ApnSetting.INFRASTRUCTURE_CELLULAR)) { + return false; + } + } + } else if (mNativeNetworkRequest.hasTransport( + NetworkCapabilities.TRANSPORT_SATELLITE) + && !mNativeNetworkRequest.hasTransport( + NetworkCapabilities.TRANSPORT_CELLULAR)) { + // If the request is explicitly for the satellite, then the data profile needs + // to support satellite. + if (!dataProfile.getApnSetting().isForInfrastructure( + ApnSetting.INFRASTRUCTURE_SATELLITE)) { + return false; + } + } + } // Fallback to the legacy APN type matching. List<Integer> apnTypes = Arrays.stream(getCapabilities()).boxed() .map(DataUtils::networkCapabilityToApnType) diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java index 9423551441..1a046325c7 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java @@ -182,7 +182,6 @@ public class DataNetworkControllerTest extends TelephonyTest { private LinkBandwidthEstimatorCallback mLinkBandwidthEstimatorCallback; private boolean mIsNonTerrestrialNetwork = false; - private ArrayList<Integer> mCarrierSupportedSatelliteServices = new ArrayList<>(); private FeatureFlags mFeatureFlags; private final DataProfile mGeneralPurposeDataProfile = new DataProfile.Builder() @@ -700,7 +699,6 @@ public class DataNetworkControllerTest extends TelephonyTest { .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setDataSpecificInfo(dsri) .setIsNonTerrestrialNetwork(mIsNonTerrestrialNetwork) - .setAvailableServices(mCarrierSupportedSatelliteServices) .setEmergencyOnly(isEmergencyOnly) .build()); @@ -710,7 +708,6 @@ public class DataNetworkControllerTest extends TelephonyTest { .setRegistrationState(iwlanRegState) .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setIsNonTerrestrialNetwork(mIsNonTerrestrialNetwork) - .setAvailableServices(mCarrierSupportedSatelliteServices) .setEmergencyOnly(isEmergencyOnly) .build()); @@ -854,6 +851,9 @@ public class DataNetworkControllerTest extends TelephonyTest { .config_enable_iwlan_handover_policy, true); mContextFixture.putBooleanResource(com.android.internal.R.bool .config_enhanced_iwlan_handover_check, true); + mContextFixture.putStringArrayResource(com.android.internal.R.array + .config_force_cellular_transport_capabilities, + new String[] {"ims", "eims", "xcap"}); } @Before @@ -896,6 +896,7 @@ public class DataNetworkControllerTest extends TelephonyTest { doReturn(PhoneConstants.State.IDLE).when(mCT).getState(); doReturn(new SubscriptionInfoInternal.Builder().setId(1).build()) .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt()); + doReturn(true).when(mFeatureFlags).carrierEnabledSatelliteFlag(); List<SubscriptionInfo> infoList = new ArrayList<>(); infoList.add(mMockSubInfo); @@ -1136,15 +1137,24 @@ public class DataNetworkControllerTest extends TelephonyTest { } private @NonNull TelephonyNetworkRequest createNetworkRequest(Integer... capabilities) { + return createNetworkRequest(false, capabilities); + } + + private @NonNull TelephonyNetworkRequest createNetworkRequest(boolean restricted, + Integer... capabilities) { NetworkCapabilities netCaps = new NetworkCapabilities(); for (int networkCapability : capabilities) { netCaps.addCapability(networkCapability); } + if (restricted) { + netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + } + NetworkRequest nativeNetworkRequest = new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); - return new TelephonyNetworkRequest(nativeNetworkRequest, mPhone); + return new TelephonyNetworkRequest(nativeNetworkRequest, mPhone, mFeatureFlags); } // The purpose of this test is to make sure the network request insertion/removal works as @@ -1405,7 +1415,7 @@ public class DataNetworkControllerTest extends TelephonyTest { netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, - NetworkRequest.Type.REQUEST), mPhone)); + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE); List<DataNetwork> dataNetworkList = getDataNetworks(); @@ -1708,73 +1718,124 @@ public class DataNetworkControllerTest extends TelephonyTest { } @Test - public void testNonTerrestrialNetworkChangedWithoutDataSupport() throws Exception { - when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true); + public void testIsNetworkRequestSatisfiedByTransportCellularTransportRequest() { mIsNonTerrestrialNetwork = true; - // Data is not supported while using satellite - mCarrierSupportedSatelliteServices.add(NetworkRegistrationInfo.SERVICE_TYPE_VOICE); + + // Data is not supported for cellular transport network request while using satellite + // network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); - mDataNetworkControllerUT.addNetworkRequest( - createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET)); + // Set network request transport as Cellular in satellite network + NetworkCapabilities netCaps = new NetworkCapabilities(); + netCaps.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( + new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); - // Data with internet capability should not be allowed - // when the device is using non-terrestrial network - verifyNoConnectedNetworkHasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + // Verify data is not connected since Network request cannot satisfy by transport + verify(mMockedDataNetworkControllerCallback, never()) + .onConnectedInternetDataNetworksChanged(any()); mIsNonTerrestrialNetwork = false; - mCarrierSupportedSatelliteServices.clear(); + } + + @Test + public void testIsNetworkRequestSatisfiedByTransportSatelliteTransportRequest_Terrestrial() { + // Set network request transport as satellite in satellite network + NetworkCapabilities netCaps = new NetworkCapabilities(); + netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); + netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( + new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); + processAllMessages(); + + // Verify data is not supported for satellite transport network request while using cellular + verify(mMockedDataNetworkControllerCallback, never()) + .onConnectedInternetDataNetworksChanged(any()); + + } + + @Test + public void testIsNetworkRequestSatisfiedByTransportSatelliteTransportRequest() { + mIsNonTerrestrialNetwork = true; + + // Data is supported for satellite transport network request while using satellite network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); - // Verify data is restored. - verifyInternetConnected(); + // Set network request transport as satellite while using satellite network + NetworkCapabilities netCaps = new NetworkCapabilities(); + netCaps.addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE); + netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( + new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); + processAllMessages(); + + // Verify data is connected since Network request satisfy by transport + verify(mMockedDataNetworkControllerCallback).onConnectedInternetDataNetworksChanged(any()); + + mIsNonTerrestrialNetwork = false; } @Test - public void testNonTerrestrialNetworkWithDataSupport() throws Exception { - when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true); + public void testIsNetworkRequestSatisfiedByTransportNoTransportRequest() { mIsNonTerrestrialNetwork = true; - // Data is supported while using satellite - mCarrierSupportedSatelliteServices.add(NetworkRegistrationInfo.SERVICE_TYPE_DATA); + + // Data is supported for no transport network request while using satellite network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); - mDataNetworkControllerUT.addNetworkRequest( - createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET)); + // Set network request transport as no transport with Internet capability + NetworkCapabilities netCaps = new NetworkCapabilities(); + netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( + new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); - // Verify data is connected. - verifyInternetConnected(); + // Verify data is connected since Network request satisfy by transport + verify(mMockedDataNetworkControllerCallback).onConnectedInternetDataNetworksChanged(any()); mIsNonTerrestrialNetwork = false; - mCarrierSupportedSatelliteServices.clear(); } @Test - public void testNonTerrestrialNetworkWithFlagDisabled() throws Exception { - when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(false); - + public void testIsNetworkCapabilitySatelliteAndCellularCapableImsCellularTransportRequest() + throws Exception { mIsNonTerrestrialNetwork = true; - // Data is not supported while using satellite - mCarrierSupportedSatelliteServices.add(NetworkRegistrationInfo.SERVICE_TYPE_VOICE); + + // IMS PDN is supported for cellular network request while using satellite network serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); - mDataNetworkControllerUT.addNetworkRequest( - createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET)); + // Set network request transport as Cellular + IMS + NetworkCapabilities netCaps = new NetworkCapabilities(); + netCaps.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS); + netCaps.addCapability(NetworkCapabilities.NET_CAPABILITY_MMTEL); + netCaps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); + mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( + new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags)); processAllMessages(); - // As feature is disabled, data is connected. - verifyInternetConnected(); + // Verify ims is connected since, cellular network request for ims is allowed while using + // satellite network + verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_IMS, + NetworkCapabilities.NET_CAPABILITY_MMTEL); mIsNonTerrestrialNetwork = false; - mCarrierSupportedSatelliteServices.clear(); } - @Test public void testRoamingDataChanged() throws Exception { doReturn(true).when(mServiceState).getDataRoaming(); @@ -3437,7 +3498,7 @@ public class DataNetworkControllerTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); mDataNetworkControllerUT.addNetworkRequest(tnr); processAllMessages(); @@ -3461,7 +3522,7 @@ public class DataNetworkControllerTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); mDataNetworkControllerUT.addNetworkRequest(tnr); processAllMessages(); @@ -3533,7 +3594,7 @@ public class DataNetworkControllerTest extends TelephonyTest { ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); mDataNetworkControllerUT.addNetworkRequest( - new TelephonyNetworkRequest(nativeNetworkRequest, mPhone)); + new TelephonyNetworkRequest(nativeNetworkRequest, mPhone, mFeatureFlags)); processAllMessages(); verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_DUN); @@ -3649,7 +3710,7 @@ public class DataNetworkControllerTest extends TelephonyTest { ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); mDataNetworkControllerUT.addNetworkRequest( - new TelephonyNetworkRequest(nativeNetworkRequest, mPhone)); + new TelephonyNetworkRequest(nativeNetworkRequest, mPhone, mFeatureFlags)); processAllMessages(); // Everything should be disconnected. @@ -3687,7 +3748,7 @@ public class DataNetworkControllerTest extends TelephonyTest { ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); mDataNetworkControllerUT.addNetworkRequest( - new TelephonyNetworkRequest(nativeNetworkRequest, mPhone)); + new TelephonyNetworkRequest(nativeNetworkRequest, mPhone, mFeatureFlags)); processAllMessages(); // Everything should be disconnected. @@ -3910,7 +3971,7 @@ public class DataNetworkControllerTest extends TelephonyTest { ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); mDataNetworkControllerUT.addNetworkRequest( - new TelephonyNetworkRequest(nativeNetworkRequest, mPhone)); + new TelephonyNetworkRequest(nativeNetworkRequest, mPhone, mFeatureFlags)); processAllMessages(); verifyConnectedNetworkHasDataProfile(mGeneralPurposeDataProfile); @@ -3934,7 +3995,7 @@ public class DataNetworkControllerTest extends TelephonyTest { ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); mDataNetworkControllerUT.addNetworkRequest( - new TelephonyNetworkRequest(nativeNetworkRequest, mPhone)); + new TelephonyNetworkRequest(nativeNetworkRequest, mPhone, mFeatureFlags)); processAllMessages(); verifyConnectedNetworkHasDataProfile(mGeneralPurposeDataProfile); @@ -3999,7 +4060,7 @@ public class DataNetworkControllerTest extends TelephonyTest { NetworkRequest nativeNetworkRequest = new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( - nativeNetworkRequest, mPhone); + nativeNetworkRequest, mPhone, mFeatureFlags); mDataNetworkControllerUT.addNetworkRequest(networkRequest); @@ -4051,7 +4112,7 @@ public class DataNetworkControllerTest extends TelephonyTest { NetworkRequest nativeNetworkRequest = new NetworkRequest(netCaps, ConnectivityManager.TYPE_MOBILE, ++mNetworkRequestId, NetworkRequest.Type.REQUEST); TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( - nativeNetworkRequest, mPhone); + nativeNetworkRequest, mPhone, mFeatureFlags); mDataNetworkControllerUT.addNetworkRequest(networkRequest); processAllMessages(); @@ -4693,11 +4754,12 @@ public class DataNetworkControllerTest extends TelephonyTest { ConnectivityManager.TYPE_MOBILE, 0, NetworkRequest.Type.REQUEST); mDataNetworkControllerUT.addNetworkRequest(new TelephonyNetworkRequest( - nativeNetworkRequest, mPhone)); + nativeNetworkRequest, mPhone, mFeatureFlags)); processAllMessages(); // Intentionally create a new telephony request with the original native network request. - TelephonyNetworkRequest request = new TelephonyNetworkRequest(nativeNetworkRequest, mPhone); + TelephonyNetworkRequest request = new TelephonyNetworkRequest( + nativeNetworkRequest, mPhone, mFeatureFlags); mDataNetworkControllerUT.removeNetworkRequest(request); processAllFutureMessages(); @@ -4788,7 +4850,7 @@ public class DataNetworkControllerTest extends TelephonyTest { new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); processAllMessages(); verifyConnectedNetworkHasCapabilities(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE, NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY); @@ -4797,7 +4859,7 @@ public class DataNetworkControllerTest extends TelephonyTest { new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY) .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); processAllMessages(); List<DataNetwork> dataNetworkList = getDataNetworks(); assertThat(dataNetworkList).hasSize(1); @@ -4867,12 +4929,16 @@ public class DataNetworkControllerTest extends TelephonyTest { @Test public void testNonTerrestrialNetwork() throws Exception { - when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true); mIsNonTerrestrialNetwork = true; serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); mDataNetworkControllerUT.addNetworkRequest( - createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_RCS)); + createNetworkRequest(false, NetworkCapabilities.NET_CAPABILITY_RCS)); + processAllMessages(); + verifyAllDataDisconnected(); + + mDataNetworkControllerUT.addNetworkRequest( + createNetworkRequest(true, NetworkCapabilities.NET_CAPABILITY_RCS)); processAllMessages(); verifyConnectedNetworkHasDataProfile(mNtnDataProfile); } @@ -5031,8 +5097,7 @@ public class DataNetworkControllerTest extends TelephonyTest { } @Test - public void testNtnNetworkOnProvisioningProfileClass_WithFlagEnabled() throws Exception { - when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true); + public void testNtnNetworkOnProvisioningProfileClassWithFlagEnabled() throws Exception { when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true); // Allowed data limit Unlimited mContextFixture.putIntResource(com.android.internal.R.integer @@ -5044,7 +5109,7 @@ public class DataNetworkControllerTest extends TelephonyTest { serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, NetworkRegistrationInfo.REGISTRATION_STATE_HOME); mDataNetworkControllerUT.addNetworkRequest( - createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_RCS)); + createNetworkRequest(true, NetworkCapabilities.NET_CAPABILITY_RCS)); processAllMessages(); assertThat(mDataNetworkControllerUT.isEsimBootStrapProvisioningActivated()).isTrue(); @@ -5053,8 +5118,7 @@ public class DataNetworkControllerTest extends TelephonyTest { } @Test - public void testNonNtnNetworkOnProvisioningProfileClass_WithFlagEnabled() throws Exception { - when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true); + public void testNonNtnNetworkOnProvisioningProfileClassWithFlagEnabled() throws Exception { when(mFeatureFlags.esimBootstrapProvisioningFlag()).thenReturn(true); doReturn(new SubscriptionInfoInternal.Builder().setId(1) .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING).build()) diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java index ebfc41a8d8..9605951ffc 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkTest.java @@ -320,13 +320,13 @@ public class DataNetworkTest extends TelephonyTest { } private void serviceStateChanged(@Annotation.NetworkType int networkType, - @NetworkRegistrationInfo.RegistrationState int regState) { - serviceStateChanged(networkType, regState, null); + @NetworkRegistrationInfo.RegistrationState int regState, boolean isNtn) { + serviceStateChanged(networkType, regState, null, isNtn); } private void serviceStateChanged(@Annotation.NetworkType int networkType, @NetworkRegistrationInfo.RegistrationState int regState, - DataSpecificRegistrationInfo dsri) { + DataSpecificRegistrationInfo dsri, boolean isNtn) { ServiceState ss = new ServiceState(); ss.addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder() .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) @@ -334,6 +334,7 @@ public class DataNetworkTest extends TelephonyTest { .setRegistrationState(regState) .setDomain(NetworkRegistrationInfo.DOMAIN_PS) .setDataSpecificInfo(dsri) + .setIsNonTerrestrialNetwork(isNtn) .build()); ss.addNetworkRegistrationInfo(new NetworkRegistrationInfo.Builder() @@ -410,9 +411,13 @@ public class DataNetworkTest extends TelephonyTest { doReturn(FAKE_IMSI).when(mPhone).getSubscriberId(); doReturn(true).when(mDataNetworkController) .isNetworkRequestExisting(any(TelephonyNetworkRequest.class)); + doReturn(Set.of(NetworkCapabilities.NET_CAPABILITY_IMS, + NetworkCapabilities.NET_CAPABILITY_EIMS, NetworkCapabilities.NET_CAPABILITY_XCAP)) + .when(mDataConfigManager).getForcedCellularTransportCapabilities(); + doReturn(true).when(mFeatureFlags).carrierEnabledSatelliteFlag(); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_HOME); + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, false/*isNtn*/); } @After @@ -446,7 +451,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); setSuccessfulSetupDataResponse( mMockedWwanDataServiceManager, 123, Collections.emptyList(), mDefaultQos); @@ -551,12 +556,13 @@ public class DataNetworkTest extends TelephonyTest { .build(); // Out of service serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING, dsri); + NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING, dsri, + false/*isNtn*/); NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 123); @@ -597,7 +603,8 @@ public class DataNetworkTest extends TelephonyTest { .build(); // Out of service serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING, dsri); + NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING, dsri, + false/*isNtn*/); DataCallResponse response = new DataCallResponse.Builder() .setCause(0) @@ -653,7 +660,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 123); mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), @@ -742,7 +749,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); List<TrafficDescriptor> tds = List.of( new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -777,7 +784,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); List<TrafficDescriptor> tds = List.of( new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -810,7 +817,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); List<TrafficDescriptor> tds = List.of( new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -843,7 +850,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_CBS) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); List<TrafficDescriptor> tds = List.of( new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -877,7 +884,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_CBS) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); List<TrafficDescriptor> tds = List.of( new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -962,7 +969,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); setSuccessfulSetupDataResponse(mMockedWlanDataServiceManager, 123); @@ -1183,7 +1190,7 @@ public class DataNetworkTest extends TelephonyTest { TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); networkRequestList.add(networkRequest); SimulatedCommands simulatedCommands2 = mock(SimulatedCommands.class); @@ -1238,7 +1245,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 123); @@ -1335,7 +1342,7 @@ public class DataNetworkTest extends TelephonyTest { networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); // Data disabled doReturn(false).when(mDataSettingsManager).isDataEnabled(); @@ -1371,14 +1378,14 @@ public class DataNetworkTest extends TelephonyTest { @Test public void testRestrictedNetworkDataRoamingEnabled() throws Exception { serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING); + NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING, false/*isNtn*/); NetworkRequestList networkRequestList = new NetworkRequestList(); // Restricted network request networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); // Data roaming disabled doReturn(false).when(mDataSettingsManager).isDataRoamingEnabled(); @@ -1516,7 +1523,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), mDataServiceManagers, mInternetDataProfile, networkRequestList, AccessNetworkConstants.TRANSPORT_TYPE_WWAN, @@ -1620,7 +1627,7 @@ public class DataNetworkTest extends TelephonyTest { LteVopsSupportInfo.LTE_STATUS_SUPPORTED)) .build(); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri); + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri, false/*isNtn*/); assertThat(mDataNetworkUT.getNetworkCapabilities().hasCapability( NetworkCapabilities.NET_CAPABILITY_MMTEL)).isTrue(); @@ -1634,7 +1641,7 @@ public class DataNetworkTest extends TelephonyTest { .build(); logd("Trigger non VoPS"); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri); + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri, false/*isNtn*/); // MMTEL should not be removed. assertThat(mDataNetworkUT.getNetworkCapabilities().hasCapability( NetworkCapabilities.NET_CAPABILITY_MMTEL)).isTrue(); @@ -1651,7 +1658,7 @@ public class DataNetworkTest extends TelephonyTest { LteVopsSupportInfo.LTE_STATUS_SUPPORTED)) .build(); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri); + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri, false/*isNtn*/); assertThat(mDataNetworkUT.getNetworkCapabilities().hasCapability( NetworkCapabilities.NET_CAPABILITY_MMTEL)).isTrue(); @@ -1665,7 +1672,7 @@ public class DataNetworkTest extends TelephonyTest { .build(); logd("Trigger non VoPS"); serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, - NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri); + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, dsri, false/*isNtn*/); // MMTEL should be removed to reflect the actual Vops status. assertThat(mDataNetworkUT.getNetworkCapabilities().hasCapability( NetworkCapabilities.NET_CAPABILITY_MMTEL)).isFalse(); @@ -1724,7 +1731,7 @@ public class DataNetworkTest extends TelephonyTest { TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder().addCapability( - NetworkCapabilities.NET_CAPABILITY_SUPL).build(), mPhone); + NetworkCapabilities.NET_CAPABILITY_SUPL).build(), mPhone, mFeatureFlags); mDataNetworkUT.attachNetworkRequests(new NetworkRequestList(networkRequest)); processAllMessages(); @@ -1747,7 +1754,7 @@ public class DataNetworkTest extends TelephonyTest { TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder().addCapability( - NetworkCapabilities.NET_CAPABILITY_SUPL).build(), mPhone); + NetworkCapabilities.NET_CAPABILITY_SUPL).build(), mPhone, mFeatureFlags); mDataNetworkUT.attachNetworkRequests(new NetworkRequestList(networkRequest)); processAllMessages(); @@ -1900,7 +1907,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), mDataServiceManagers, mInternetDataProfile, networkRequestList, @@ -2044,7 +2051,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), mDataServiceManagers, m5gDataProfile, networkRequestList, AccessNetworkConstants.TRANSPORT_TYPE_WWAN, DataAllowedReason.NORMAL, @@ -2141,7 +2148,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequest.Builder builder = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS); builder.addCapability(NetworkCapabilities.NET_CAPABILITY_MMTEL); - networkRequestList.add(new TelephonyNetworkRequest(builder.build(), mPhone)); + networkRequestList.add(new TelephonyNetworkRequest(builder.build(), mPhone, mFeatureFlags)); mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), mDataServiceManagers, mImsDataProfile, networkRequestList, AccessNetworkConstants.TRANSPORT_TYPE_WLAN, @@ -2248,7 +2255,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequestList networkRequestList = new NetworkRequestList(); networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone)); + .build(), mPhone, mFeatureFlags)); setSuccessfulSetupDataResponse(mMockedWlanDataServiceManager, 123); mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), mDataServiceManagers, mImsDataProfile, networkRequestList, @@ -2264,7 +2271,7 @@ public class DataNetworkTest extends TelephonyTest { NetworkRequest.Builder builder = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS); if (isMmtel) builder.addCapability(NetworkCapabilities.NET_CAPABILITY_MMTEL); - networkRequestList.add(new TelephonyNetworkRequest(builder.build(), mPhone)); + networkRequestList.add(new TelephonyNetworkRequest(builder.build(), mPhone, mFeatureFlags)); setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 123); @@ -2277,6 +2284,37 @@ public class DataNetworkTest extends TelephonyTest { processAllMessages(); } + private void setupNonTerrestrialDataNetwork() { + NetworkRequestList networkRequestList = new NetworkRequestList(); + + networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE) + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) + .build(), mPhone, mFeatureFlags)); + setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 123); + + mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), + mDataServiceManagers, mInternetDataProfile, networkRequestList, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN, + DataAllowedReason.NORMAL, mDataNetworkCallback); + processAllMessages(); + } + + private void setupTerrestrialDataNetwork() { + NetworkRequestList networkRequestList = new NetworkRequestList(); + networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .build(), mPhone, mFeatureFlags)); + setSuccessfulSetupDataResponse(mMockedWwanDataServiceManager, 123); + + mDataNetworkUT = new DataNetwork(mPhone, mFeatureFlags, Looper.myLooper(), + mDataServiceManagers, mInternetDataProfile, networkRequestList, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN, + DataAllowedReason.NORMAL, mDataNetworkCallback); + processAllMessages(); + } + @Test public void testMmsCapabilityRemovedWhenMmsPreferredOnIwlan() throws Exception { doReturn(true).when(mFeatureFlags).forceIwlanMms(); @@ -2355,4 +2393,104 @@ public class DataNetworkTest extends TelephonyTest { verify(mDataNetworkCallback).onQosSessionsChanged(newQosSessions); } + + @Test + public void testIsTransportSatelliteSupportNonImsNonTerrestrialNetwork() throws Exception { + // Service state at Non-terrestrial network + serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, true/*isNtn*/); + + // set up data network with transport type satellite + Internet + setupNonTerrestrialDataNetwork(); + + //Check now transport type for the data network is satellite + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)).isTrue(); + } + + @Test + public void testIsTransportSatelliteSupportWithImsNonTerrestrialNetwork() throws Exception { + // Service state at Non-terrestrial network + serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, true/*isNtn*/); + + // set up data network with transport type satellite + IMS + createImsDataNetwork(false/*isMmtel*/); + + //Check transport type for the data network is Cellular for Ims at non-terrestrial network + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue(); + } + + @Test + public void testSatelliteTransportSupportedNonImsTerrestrialToNonTerrestrial() + throws Exception { + // Service state at terrestrial network + serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, false/*isNtn*/); + + // set up data network with transport type cellular + Internet + setupTerrestrialDataNetwork(); + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue(); + + // Service State change terrestrial to non-terrestrial + serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, true/*isNtn*/); + + // Make sure transport type for the data network is still Cellular + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue(); + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)).isFalse(); + + // Disconnect the Data call + mDataNetworkUT.sendMessage(19/*EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE*/, 0/*Success*/); + processAllMessages(); + + // set up data network with transport type satellite + Internet + setupNonTerrestrialDataNetwork(); + + //Check now transport type for the data network is satellite + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)).isTrue(); + } + + @Test + public void testSatelliteTransportSupportedNonImsNonTerrestrialToTerrestrial() + throws Exception { + // Service state at non-terrestrial network + serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, true/*isNtn*/); + + // set up data network with transport type satellite + Internet + setupNonTerrestrialDataNetwork(); + + //Check now transport type for the data network is satellite + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)).isTrue(); + + // Service State change non-terrestrial to terrestrial + serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE, + NetworkRegistrationInfo.REGISTRATION_STATE_HOME, false/*isNtn*/); + + // Make sure transport type for the data network is still satellite + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)).isTrue(); + + // Make sure transport type for the data network is not cellular + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)).isFalse(); + + // Disconnect the Data call + mDataNetworkUT.sendMessage(19/*EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE*/, 0/*Success*/); + processAllMessages(); + + // set up data network with transport type cellular + Internet + setupTerrestrialDataNetwork(); + + //Check now transport type for the data network is cellular + assertThat(mDataNetworkUT.getNetworkCapabilities() + .hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue(); + } } diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java index 44d207de63..3d6b4f4d79 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java @@ -888,7 +888,7 @@ public class DataProfileManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); @@ -899,7 +899,7 @@ public class DataProfileManagerTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) .addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL) .build(); - tnr = new TelephonyNetworkRequest(request, mPhone); + tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); @@ -909,7 +909,7 @@ public class DataProfileManagerTest extends TelephonyTest { request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) .build(); - tnr = new TelephonyNetworkRequest(request, mPhone); + tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dp.canSatisfy(tnr.getCapabilities())).isTrue(); @@ -918,7 +918,7 @@ public class DataProfileManagerTest extends TelephonyTest { request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN) .build(); - tnr = new TelephonyNetworkRequest(request, mPhone); + tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dp).isNull(); @@ -931,7 +931,7 @@ public class DataProfileManagerTest extends TelephonyTest { request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN) .build(); - tnr = new TelephonyNetworkRequest(request, mPhone); + tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_NR, false, false , false); assertThat(dp.canSatisfy(tnr.getCapabilities())).isTrue(); @@ -943,7 +943,7 @@ public class DataProfileManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_GSM, false, false, false); // Should not find data profile due to RAT incompatible. @@ -955,7 +955,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN); @@ -973,7 +973,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting()).isNull(); @@ -986,7 +986,7 @@ public class DataProfileManagerTest extends TelephonyTest { tnr = new TelephonyNetworkRequest(new NetworkRequest(new NetworkCapabilities() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .addEnterpriseId(2), ConnectivityManager.TYPE_NONE, - 0, NetworkRequest.Type.REQUEST), mPhone); + 0, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting()).isNull(); @@ -1002,7 +1002,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting()).isNull(); @@ -1018,7 +1018,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting()).isNull(); @@ -1036,7 +1036,7 @@ public class DataProfileManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, true, false, false); @@ -1050,7 +1050,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN); @@ -1090,7 +1090,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest dunTnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_DUN) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dunDataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( dunTnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); DataNetwork dunInternetNetwork = Mockito.mock(DataNetwork.class); @@ -1189,7 +1189,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile).isNull(); @@ -1198,7 +1198,7 @@ public class DataProfileManagerTest extends TelephonyTest { tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo("sos"); @@ -1207,7 +1207,7 @@ public class DataProfileManagerTest extends TelephonyTest { tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile).isEqualTo(null); @@ -1237,7 +1237,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile).isNull(); @@ -1246,7 +1246,7 @@ public class DataProfileManagerTest extends TelephonyTest { tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo("sos"); @@ -1255,7 +1255,7 @@ public class DataProfileManagerTest extends TelephonyTest { tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile).isEqualTo(null); @@ -1291,7 +1291,7 @@ public class DataProfileManagerTest extends TelephonyTest { DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone), + .build(), mPhone, mFeatureFlags), TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(IMS_APN); } @@ -1301,7 +1301,7 @@ public class DataProfileManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_FOTA) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); // This should get the merged data profile after deduping. DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); @@ -1439,7 +1439,7 @@ public class DataProfileManagerTest extends TelephonyTest { public void testDefaultEmergencyDataProfileValid() { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); @@ -1456,7 +1456,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN); @@ -1522,7 +1522,7 @@ public class DataProfileManagerTest extends TelephonyTest { TelephonyNetworkRequest tnr = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); changeSimStateTo(TelephonyManager.SIM_STATE_LOADED); mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget(); processAllMessages(); @@ -1828,7 +1828,7 @@ public class DataProfileManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); @@ -1852,7 +1852,7 @@ public class DataProfileManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataProfile dp = mDataProfileManagerUT.getDataProfileForNetworkRequest(tnr, TelephonyManager.NETWORK_TYPE_LTE, false, false, false); @@ -1883,7 +1883,7 @@ public class DataProfileManagerTest extends TelephonyTest { // Verify the we can get the previously permanent failed data profile again. assertThat(mDataProfileManagerUT.getDataProfileForNetworkRequest( - new TelephonyNetworkRequest(request, mPhone), + new TelephonyNetworkRequest(request, mPhone, mFeatureFlags), TelephonyManager.NETWORK_TYPE_LTE, false, false, false)) .isNotNull(); } @@ -1902,7 +1902,7 @@ public class DataProfileManagerTest extends TelephonyTest { // flag is enabled at data profile, during esim bootstrap provisioning TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo( @@ -1912,7 +1912,7 @@ public class DataProfileManagerTest extends TelephonyTest { // is enabled at data profile, during esim bootstrap provisioning tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo("IMS_APN"); @@ -1921,7 +1921,7 @@ public class DataProfileManagerTest extends TelephonyTest { // is disabled at data profile, during esim bootstrap provisioning tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false); assertThat(dataProfile).isEqualTo(null); @@ -1930,7 +1930,7 @@ public class DataProfileManagerTest extends TelephonyTest { // is disabled at data profile, during esim bootstrap provisioning tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false); assertThat(dataProfile).isEqualTo(null); @@ -1950,7 +1950,7 @@ public class DataProfileManagerTest extends TelephonyTest { // type TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, false, true, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo( @@ -1972,7 +1972,7 @@ public class DataProfileManagerTest extends TelephonyTest { // type TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( tnr, TelephonyManager.NETWORK_TYPE_LTE, true, true, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(RCS_APN1); diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataRetryManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataRetryManagerTest.java index 2541bd1993..c413f838af 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataRetryManagerTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataRetryManagerTest.java @@ -292,7 +292,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); mDataRetryManagerUT.evaluateDataSetupRetry(mDataProfile1, @@ -316,7 +316,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); mDataRetryManagerUT.evaluateDataSetupRetry(mDataProfile3, @@ -345,7 +345,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); mDataRetryManagerUT.evaluateDataSetupRetry(mDataProfile3, @@ -432,7 +432,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); @@ -535,7 +535,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); mDataRetryManagerUT.evaluateDataSetupRetry(mDataProfile1, @@ -568,7 +568,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); @@ -647,7 +647,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); @@ -709,7 +709,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); @@ -798,7 +798,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); mDataRetryManagerUT.evaluateDataSetupRetry(mDataProfile1, @@ -839,7 +839,7 @@ public class DataRetryManagerTest extends TelephonyTest { NetworkRequest request = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); - TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone); + TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(request, mPhone, mFeatureFlags); DataNetworkController.NetworkRequestList networkRequestList = new DataNetworkController.NetworkRequestList(tnr); @@ -853,7 +853,7 @@ public class DataRetryManagerTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); assertThat(mDataRetryManagerUT.isSimilarNetworkRequestRetryScheduled(tnr, AccessNetworkConstants.TRANSPORT_TYPE_WWAN)).isTrue(); assertThat(mDataRetryManagerUT.isSimilarNetworkRequestRetryScheduled(tnr, diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataUtilsTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataUtilsTest.java index ea8a7d7966..663cd512ca 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataUtilsTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataUtilsTest.java @@ -18,24 +18,32 @@ package com.android.internal.telephony.data; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doReturn; + import android.net.NetworkCapabilities; import android.net.NetworkRequest; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; +import com.android.internal.telephony.flags.FeatureFlags; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import java.util.List; public class DataUtilsTest extends TelephonyTest { + private FeatureFlags mFeatureFlags; + @Before public void setUp() throws Exception { logd("DataUtilsTest +Setup!"); super.setUp(getClass().getSimpleName()); + mFeatureFlags = Mockito.mock(FeatureFlags.class); + doReturn(true).when(mFeatureFlags).carrierEnabledSatelliteFlag(); logd("DataUtilsTest -Setup!"); } @@ -57,10 +65,13 @@ public class DataUtilsTest extends TelephonyTest { NetworkCapabilities.NET_CAPABILITY_ENTERPRISE, NetworkCapabilities.NET_CAPABILITY_ENTERPRISE, NetworkCapabilities.NET_CAPABILITY_ENTERPRISE, + NetworkCapabilities.NET_CAPABILITY_IMS, + NetworkCapabilities.NET_CAPABILITY_IMS, }; int requestId = 0; int enterpriseId = 1; + int transportType = NetworkCapabilities.TRANSPORT_CELLULAR; TelephonyNetworkRequest networkRequest; for (int netCap : netCaps) { if (netCap == NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) { @@ -69,24 +80,31 @@ public class DataUtilsTest extends TelephonyTest { .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .addEnterpriseId(enterpriseId).build(), -1, requestId++, - NetworkRequest.Type.REQUEST), mPhone); + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); if (enterpriseId == 1) enterpriseId++; + } else if (netCap == NetworkCapabilities.NET_CAPABILITY_IMS) { + networkRequest = new TelephonyNetworkRequest(new NetworkRequest( + new NetworkCapabilities.Builder() + .addTransportType(transportType) + .addCapability(netCap).build(), -1, requestId++, + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); + transportType = NetworkCapabilities.TRANSPORT_SATELLITE; } else { networkRequest = new TelephonyNetworkRequest(new NetworkRequest( new NetworkCapabilities.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .addCapability(netCap).build(), -1, requestId++, - NetworkRequest.Type.REQUEST), mPhone); + NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); } requestList.add(networkRequest); } - assertThat(requestList).hasSize(8); + assertThat(requestList).hasSize(10); List<NetworkRequestList> requestListList = - DataUtils.getGroupedNetworkRequestList(requestList); + DataUtils.getGroupedNetworkRequestList(requestList, mFeatureFlags); - assertThat(requestListList).hasSize(5); + assertThat(requestListList).hasSize(7); requestList = requestListList.get(0); assertThat(requestList).hasSize(1); assertThat(requestList.get(0).hasCapability( @@ -100,26 +118,40 @@ public class DataUtilsTest extends TelephonyTest { NetworkCapabilities.NET_CAPABILITY_MMS)).isTrue(); requestList = requestListList.get(2); + assertThat(requestList).hasSize(1); + assertThat(requestList.get(0).hasCapability( + NetworkCapabilities.NET_CAPABILITY_IMS)).isTrue(); + assertThat(requestList.get(0).getNativeNetworkRequest().hasTransport( + NetworkCapabilities.TRANSPORT_CELLULAR)).isTrue(); + + requestList = requestListList.get(3); + assertThat(requestList).hasSize(1); + assertThat(requestList.get(0).hasCapability( + NetworkCapabilities.NET_CAPABILITY_IMS)).isTrue(); + assertThat(requestList.get(0).getNativeNetworkRequest().hasTransport( + NetworkCapabilities.TRANSPORT_SATELLITE)).isTrue(); + + requestList = requestListList.get(4); assertThat(requestList).hasSize(2); assertThat(requestList.get(0).hasCapability( NetworkCapabilities.NET_CAPABILITY_INTERNET)).isTrue(); assertThat(requestList.get(1).hasCapability( NetworkCapabilities.NET_CAPABILITY_INTERNET)).isTrue(); - requestList = requestListList.get(3); + requestList = requestListList.get(5); assertThat(requestList).hasSize(1); assertThat(requestList.get(0).hasCapability( NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue(); - assertThat(requestList.get(0).getCapabilityDifferentiator() == 1).isTrue(); + assertThat(requestList.get(0).getCapabilityDifferentiator()).isEqualTo(1); - requestList = requestListList.get(4); + requestList = requestListList.get(6); assertThat(requestList).hasSize(2); assertThat(requestList.get(0).hasCapability( NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue(); - assertThat(requestList.get(0).getCapabilityDifferentiator() == 2).isTrue(); + assertThat(requestList.get(0).getCapabilityDifferentiator()).isEqualTo(2); assertThat(requestList.get(1).hasCapability( NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)).isTrue(); - assertThat(requestList.get(1).getCapabilityDifferentiator() == 2).isTrue(); + assertThat(requestList.get(1).getCapabilityDifferentiator()).isEqualTo(2); } @Test diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java index e011a60d7f..1f9ace9bb1 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/PhoneSwitcherTest.java @@ -221,8 +221,8 @@ public class PhoneSwitcherTest extends TelephonyTest { NetworkRequest internetNetworkRequest = addInternetNetworkRequest(null, 50); assertFalse("phone active after request", mPhoneSwitcherUT - .shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetNetworkRequest, mPhone), 0)); + .shouldApplyNetworkRequest(new TelephonyNetworkRequest( + internetNetworkRequest, mPhone, mFeatureFlags), 0)); // not registered yet - shouldn't inc verify(mActivePhoneSwitchHandler, never()).sendMessageAtTime(any(), anyLong()); @@ -628,9 +628,9 @@ public class PhoneSwitcherTest extends TelephonyTest { // Phone 0 (sub 1) should be activated as it has default data sub. assertEquals(1, mPhoneSwitcherUT.getActiveDataSubId()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); // Set sub 2 as preferred sub should make phone 1 activated and phone 0 deactivated. mPhoneSwitcherUT.trySetOpportunisticDataSubscription(2, false, null); @@ -645,9 +645,9 @@ public class PhoneSwitcherTest extends TelephonyTest { // switch shouldn't occur due to the higher priority event assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); assertEquals(1, mPhoneSwitcherUT.getActiveDataSubId()); assertEquals(2, mPhoneSwitcherUT.getAutoSelectedDataSubId()); @@ -657,9 +657,9 @@ public class PhoneSwitcherTest extends TelephonyTest { assertEquals(2, mPhoneSwitcherUT.getActiveDataSubId()); assertEquals(2, mPhoneSwitcherUT.getAutoSelectedDataSubId()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); } @Test @@ -751,13 +751,13 @@ public class PhoneSwitcherTest extends TelephonyTest { verify(mMockRadioConfig, never()).setPreferredDataModem(anyInt(), any()); verify(mActivePhoneSwitchHandler, never()).sendMessageAtTime(any(), anyLong()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(mmsRequest, mPhone), 0)); + new TelephonyNetworkRequest(mmsRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(mmsRequest, mPhone), 1)); + new TelephonyNetworkRequest(mmsRequest, mPhone, mFeatureFlags), 1)); // Set sub 2 as preferred sub should make phone 1 preferredDataModem doReturn(new SubscriptionInfoInternal.Builder(mSubscriptionManagerService @@ -773,13 +773,13 @@ public class PhoneSwitcherTest extends TelephonyTest { processAllMessages(); verify(mActivePhoneSwitchHandler, times(2)).sendMessageAtTime(any(), anyLong()); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(mmsRequest, mPhone), 0)); + new TelephonyNetworkRequest(mmsRequest, mPhone, mFeatureFlags), 0)); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(mmsRequest, mPhone), 1)); + new TelephonyNetworkRequest(mmsRequest, mPhone, mFeatureFlags), 1)); clearInvocations(mMockRadioConfig); clearInvocations(mActivePhoneSwitchHandler); @@ -796,13 +796,13 @@ public class PhoneSwitcherTest extends TelephonyTest { processAllMessages(); verify(mActivePhoneSwitchHandler, times(2)).sendMessageAtTime(any(), anyLong()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(mmsRequest, mPhone), 0)); + new TelephonyNetworkRequest(mmsRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(mmsRequest, mPhone), 1)); + new TelephonyNetworkRequest(mmsRequest, mPhone, mFeatureFlags), 1)); // SetDataAllowed should never be triggered. verify(mCommandsInterface0, never()).setDataAllowed(anyBoolean(), any()); @@ -1038,9 +1038,9 @@ public class PhoneSwitcherTest extends TelephonyTest { setDefaultDataSubId(1); NetworkRequest internetRequest = addInternetNetworkRequest(null, 50); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); clearInvocations(mMockRadioConfig); setAllPhonesInactive(); // Initialization done. @@ -1050,18 +1050,18 @@ public class PhoneSwitcherTest extends TelephonyTest { notifyPhoneAsInCall(mPhone2); verify(mMockRadioConfig, never()).setPreferredDataModem(anyInt(), any()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); // Phone2 has active call, and data is on. So data switch to it. doReturn(true).when(mPhone).isUserDataEnabled(); notifyDataEnabled(true); verify(mMockRadioConfig).setPreferredDataModem(eq(1), any()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); clearInvocations(mMockRadioConfig); // Phone2(nDDS) call ended. But Phone1 having cross-SIM call. Don't switch. @@ -1070,9 +1070,9 @@ public class PhoneSwitcherTest extends TelephonyTest { notifyPhoneAsInactive(mPhone2); verify(mMockRadioConfig, never()).setPreferredDataModem(anyInt(), any()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); // Phone(DDS) call ended. // Honor auto data switch's suggestion: if DDS is OOS, auto switch to Phone2(nDDS). @@ -1083,9 +1083,9 @@ public class PhoneSwitcherTest extends TelephonyTest { // verify immediately switch back to DDS upon call ends verify(mMockRadioConfig).setPreferredDataModem(eq(0), any()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); // verify the attempt to do auto data switch to Phone2(nDDS) processAllFutureMessages(); @@ -1098,9 +1098,9 @@ public class PhoneSwitcherTest extends TelephonyTest { notifyPhoneAsInHoldingCall(mPhone2); verify(mMockRadioConfig, never()).setPreferredDataModem(anyInt(), any()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); } @Test @@ -1115,9 +1115,9 @@ public class PhoneSwitcherTest extends TelephonyTest { setDefaultDataSubId(1); NetworkRequest internetRequest = addInternetNetworkRequest(null, 50); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); clearInvocations(mMockRadioConfig); setAllPhonesInactive(); // Initialization done. @@ -1127,17 +1127,17 @@ public class PhoneSwitcherTest extends TelephonyTest { notifyPhoneAsInCall(mPhone2); verify(mMockRadioConfig).setPreferredDataModem(eq(1), any()); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); // During the active call, user turns off data, should immediately switch back to DDS notifyDataEnabled(false); verify(mMockRadioConfig).setPreferredDataModem(eq(0), any()); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); } @Test @@ -1165,16 +1165,16 @@ public class PhoneSwitcherTest extends TelephonyTest { setDefaultDataSubId(1); NetworkRequest internetRequest = addInternetNetworkRequest(2, 50); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); // Restricted network request will should be applied. internetRequest = addInternetNetworkRequest(2, 50, true); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); } @Test @@ -1558,9 +1558,9 @@ public class PhoneSwitcherTest extends TelephonyTest { setDefaultDataSubId(1); NetworkRequest internetRequest = addInternetNetworkRequest(null, 50); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); clearInvocations(mMockRadioConfig); setAllPhonesInactive(); // Initialization done. @@ -1599,9 +1599,9 @@ public class PhoneSwitcherTest extends TelephonyTest { setDefaultDataSubId(1); NetworkRequest internetRequest = addInternetNetworkRequest(null, 50); assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 0)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 0)); assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), 1)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), 1)); clearInvocations(mMockRadioConfig); setAllPhonesInactive(); // Initialization done. @@ -1862,10 +1862,10 @@ public class PhoneSwitcherTest extends TelephonyTest { if (defaultDataSub == (i + 1)) { // sub id is always phoneId+1 for testing assertTrue(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), i)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), i)); } else { assertFalse(mPhoneSwitcherUT.shouldApplyNetworkRequest( - new TelephonyNetworkRequest(internetRequest, mPhone), i)); + new TelephonyNetworkRequest(internetRequest, mPhone, mFeatureFlags), i)); } } } diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkFactoryTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkFactoryTest.java index ad99eaf9e7..e1a0eac914 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkFactoryTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkFactoryTest.java @@ -135,7 +135,8 @@ public class TelephonyNetworkFactoryTest extends TelephonyTest { } private void activatePhoneInPhoneSwitcher(int phoneId, NetworkRequest nr, boolean active) { - TelephonyNetworkRequest networkRequest = new TelephonyNetworkRequest(nr, mPhone); + TelephonyNetworkRequest networkRequest = + new TelephonyNetworkRequest(nr, mPhone, mFeatureFlags); doReturn(active).when(mPhoneSwitcher).shouldApplyNetworkRequest( eq(networkRequest), eq(phoneId)); mTelephonyNetworkFactoryUT.mInternalHandler.sendEmptyMessage( diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkRequestTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkRequestTest.java index 26a9fde815..3c8bfe53b1 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkRequestTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/TelephonyNetworkRequestTest.java @@ -18,6 +18,9 @@ package com.android.internal.telephony.data; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; + import android.net.ConnectivityManager; import android.net.NetworkCapabilities; import android.net.NetworkRequest; @@ -123,7 +126,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .build(); TelephonyNetworkRequest internetRequest = - new TelephonyNetworkRequest(nativeRequest, mPhone); + new TelephonyNetworkRequest(nativeRequest, mPhone, mFeatureFlags); assertThat(internetRequest.getNativeNetworkRequest()).isEqualTo(nativeRequest); } @@ -132,11 +135,11 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest internetRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest imsRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_IMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); assertThat(internetRequest.getPriority()).isEqualTo(20); assertThat(imsRequest.getPriority()).isEqualTo(40); @@ -152,7 +155,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .setNetworkSpecifier(telephonyNetworkSpecifier) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); assertThat(internetRequest.getNetworkSpecifier()).isEqualTo(telephonyNetworkSpecifier); } @@ -164,7 +167,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); assertThat(internetRequest.getCapabilities()).isEqualTo( new int[]{NetworkCapabilities.NET_CAPABILITY_INTERNET, NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED, @@ -191,7 +194,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); assertThat(request.getApnTypeNetworkCapability()) .isEqualTo(NetworkCapabilities.NET_CAPABILITY_SUPL); @@ -200,7 +203,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_FOTA) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); assertThat(request.getApnTypeNetworkCapability()) .isEqualTo(NetworkCapabilities.NET_CAPABILITY_FOTA); @@ -209,7 +212,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { .addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); assertThat(request.getApnTypeNetworkCapability()) .isEqualTo(NetworkCapabilities.NET_CAPABILITY_EIMS); } @@ -219,7 +222,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest internetRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); NetworkCapabilities caps = new NetworkCapabilities.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) @@ -233,7 +236,7 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest rcsRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); caps = new NetworkCapabilities.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS) .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) @@ -250,15 +253,15 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest internetRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest mmsRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_MMS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest rcsRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_RCS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile internetDataProfile = new DataProfile.Builder() .setApnSetting(INTERNET_APN_SETTING) .build(); @@ -281,12 +284,12 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest enterpriseRequest1 = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest enterpriseRequest2 = new TelephonyNetworkRequest( new NetworkRequest(new NetworkCapabilities() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .addEnterpriseId(2), ConnectivityManager.TYPE_NONE, - 0, NetworkRequest.Type.REQUEST), mPhone); + 0, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); DataProfile enterpriseDataProfile1 = new DataProfile.Builder() .setTrafficDescriptor(new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -309,18 +312,18 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest enterpriseRequest2 = new TelephonyNetworkRequest( new NetworkRequest(new NetworkCapabilities() .addCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addEnterpriseId(2), ConnectivityManager.TYPE_NONE, - 0, NetworkRequest.Type.REQUEST), mPhone); + 0, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); TelephonyNetworkRequest internetRequest = new TelephonyNetworkRequest( new NetworkRequest(new NetworkCapabilities() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET), ConnectivityManager.TYPE_NONE, - 0, NetworkRequest.Type.REQUEST), mPhone); + 0, NetworkRequest.Type.REQUEST), mPhone, mFeatureFlags); DataProfile enterpriseDataProfile = new DataProfile.Builder() .setApnSetting(ENTERPRISE_APN_SETTING) @@ -342,12 +345,12 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest urllcRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest embbRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile urllcDataProfile = new DataProfile.Builder() .setTrafficDescriptor(new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -364,12 +367,12 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest urllcRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest embbRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile embbDataProfile = new DataProfile.Builder() .setTrafficDescriptor(new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -386,12 +389,12 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { TelephonyNetworkRequest cbsRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_CBS) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); TelephonyNetworkRequest embbRequest = new TelephonyNetworkRequest( new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH) - .build(), mPhone); + .build(), mPhone, mFeatureFlags); DataProfile cbsDataProfile = new DataProfile.Builder() .setTrafficDescriptor(new TrafficDescriptor(null, new TrafficDescriptor.OsAppId( @@ -402,4 +405,92 @@ public class TelephonyNetworkRequestTest extends TelephonyTest { assertThat(cbsRequest.canBeSatisfiedBy(cbsDataProfile)).isTrue(); assertThat(embbRequest.canBeSatisfiedBy(cbsDataProfile)).isFalse(); } + + @Test + public void testSatelliteNetworkRequest() { + when(mFeatureFlags.carrierEnabledSatelliteFlag()).thenReturn(true); + TelephonyNetworkRequest satelliteRequest = new TelephonyNetworkRequest( + new NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .addTransportType(NetworkCapabilities.TRANSPORT_SATELLITE) + .build(), mPhone, mFeatureFlags); + + TelephonyNetworkRequest generalRequest = new TelephonyNetworkRequest( + new NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .build(), mPhone, mFeatureFlags); + + ApnSetting satelliteInternetApn = new ApnSetting.Builder() + .setEntryName("apn") + .setApnName("apn") + .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT) + .setCarrierEnabled(true) + .setInfrastructureBitmask(ApnSetting.INFRASTRUCTURE_SATELLITE) + .build(); + + ApnSetting cellularInternetApn = new ApnSetting.Builder() + .setEntryName("apn") + .setApnName("apn") + .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT) + .setCarrierEnabled(true) + .setInfrastructureBitmask(ApnSetting.INFRASTRUCTURE_CELLULAR) + .build(); + + DataProfile satelliteInternetDataProfile = new DataProfile.Builder() + .setApnSetting(satelliteInternetApn) + .build(); + + DataProfile cellularInternetDataProfile = new DataProfile.Builder() + .setApnSetting(cellularInternetApn) + .build(); + + assertThat(satelliteRequest.canBeSatisfiedBy(satelliteInternetDataProfile)).isTrue(); + assertThat(generalRequest.canBeSatisfiedBy(satelliteInternetDataProfile)).isTrue(); + assertThat(satelliteRequest.canBeSatisfiedBy(cellularInternetDataProfile)).isFalse(); + assertThat(generalRequest.canBeSatisfiedBy(cellularInternetDataProfile)).isTrue(); + } + + @Test + public void testCellularNetworkRequest() { + doReturn(true).when(mFeatureFlags).carrierEnabledSatelliteFlag(); + TelephonyNetworkRequest cellularRequest = new TelephonyNetworkRequest( + new NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .build(), mPhone, mFeatureFlags); + + TelephonyNetworkRequest generalRequest = new TelephonyNetworkRequest( + new NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .build(), mPhone, mFeatureFlags); + + ApnSetting satelliteInternetApn = new ApnSetting.Builder() + .setEntryName("apn") + .setApnName("apn") + .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT) + .setCarrierEnabled(true) + .setInfrastructureBitmask(ApnSetting.INFRASTRUCTURE_SATELLITE) + .build(); + + ApnSetting cellularInternetApn = new ApnSetting.Builder() + .setEntryName("apn") + .setApnName("apn") + .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT) + .setCarrierEnabled(true) + .setInfrastructureBitmask(ApnSetting.INFRASTRUCTURE_CELLULAR) + .build(); + + DataProfile satelliteInternetDataProfile = new DataProfile.Builder() + .setApnSetting(satelliteInternetApn) + .build(); + + DataProfile cellularInternetDataProfile = new DataProfile.Builder() + .setApnSetting(cellularInternetApn) + .build(); + + assertThat(cellularRequest.canBeSatisfiedBy(satelliteInternetDataProfile)).isFalse(); + assertThat(generalRequest.canBeSatisfiedBy(satelliteInternetDataProfile)).isTrue(); + assertThat(cellularRequest.canBeSatisfiedBy(cellularInternetDataProfile)).isTrue(); + assertThat(generalRequest.canBeSatisfiedBy(cellularInternetDataProfile)).isTrue(); + } } |