From a9a7c11edccf14732376287f9cd6924e9e22bfcd Mon Sep 17 00:00:00 2001 From: sangyun Date: Thu, 2 Feb 2023 11:41:10 +0900 Subject: [QNS] use carrier config KEY_XCAP_OVER_UT_SUPPORTED_RATS_INT_ARRAY Replace KEY_QNS_XCAP_TRANSPORT_TYPE_INT with KEY_XCAP_OVER_UT_SUPPORTED_RATS_INT_ARRAY (AOSP carrier Config) Bug: 237502693 Test: atest QualifiedNetworksServiceTests Change-Id: Ifc77a782c548287ae3c8e15fbdaaba5bcad737ab --- .../telephony/qns/AccessNetworkEvaluator.java | 5 +- .../telephony/qns/QnsCarrierConfigManager.java | 97 ++++++++++++---------- .../src/com/android/telephony/qns/QnsUtils.java | 1 - 3 files changed, 54 insertions(+), 49 deletions(-) (limited to 'services/QualifiedNetworksService/src/com/android/telephony/qns') diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java index 1ef7f6e..ea54435 100644 --- a/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java +++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/AccessNetworkEvaluator.java @@ -958,11 +958,10 @@ class AccessNetworkEvaluator { private boolean isAccessNetworkAllowed(int accessNetwork, int netCapability) { switch (netCapability) { + case NetworkCapabilities.NET_CAPABILITY_EIMS: case NetworkCapabilities.NET_CAPABILITY_IMS: + case NetworkCapabilities.NET_CAPABILITY_XCAP: return mConfigManager.isAccessNetworkAllowed(accessNetwork, netCapability); - case NetworkCapabilities.NET_CAPABILITY_EIMS: - return mConfigManager.isAccessNetworkAllowed( - accessNetwork, NetworkCapabilities.NET_CAPABILITY_IMS); default: if (accessNetwork == AccessNetworkType.UNKNOWN) { return false; diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java index ec6281a..1f869d1 100644 --- a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java +++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java @@ -62,6 +62,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; @@ -377,25 +378,6 @@ class QnsCarrierConfigManager { */ static final String KEY_QNS_MMS_TRANSPORT_TYPE_INT = "qns.mms_transport_type_int"; - /** - * Specifies the Transport type UE supports with QNS services for XCAP network capability. - * {@link QnsConstants}. The values are set as below: - * - * - * - *

{@code QnsConstants#TRANSPORT_TYPE_ALLOWED_WWAN}: If set , Transport type UE supports is - * cellular for XCAP network capability. {@code QnsConstants#TRANSPORT_TYPE_ALLOWED_IWLAN}: If - * this value set , Transport type UE supports is Wifi for XCAP network capability. {@code - * QnsConstants#TRANSPORT_TYPE_ALLOWED_BOTH}: If this value set , Transport type UE supports is - * both Cellular & Wifi for XCAP network capability. The default value for this key is {@link - * QnsConstants#TRANSPORT_TYPE_ALLOWED_WWAN} - */ - static final String KEY_QNS_XCAP_TRANSPORT_TYPE_INT = "qns.xcap_transport_type_int"; - /** * Specifies the Transport type UE supports with QNS services for CBS network capability. {@link * QnsConstants}. The values are set as below: @@ -747,7 +729,7 @@ class QnsCarrierConfigManager { private int mQnsImsTransportType; private int mQnsSosTransportType; private int mQnsMmsTransportType; - private int mQnsXcapTransportType; + private int[] mQnsXcapSupportedAccessNetworkTypes; private int mQnsCbsTransportType; private int mXcapRatPreference; private int mSosRatPreference; @@ -1334,8 +1316,11 @@ class QnsCarrierConfigManager { getConfig(bundleCarrier, bundleAsset, KEY_QNS_SOS_TRANSPORT_TYPE_INT); mQnsMmsTransportType = getConfig(bundleCarrier, bundleAsset, KEY_QNS_MMS_TRANSPORT_TYPE_INT); - mQnsXcapTransportType = - getConfig(bundleCarrier, bundleAsset, KEY_QNS_XCAP_TRANSPORT_TYPE_INT); + mQnsXcapSupportedAccessNetworkTypes = + getConfig( + bundleCarrier, + bundleAsset, + CarrierConfigManager.ImsSs.KEY_XCAP_OVER_UT_SUPPORTED_RATS_INT_ARRAY); mQnsCbsTransportType = getConfig(bundleCarrier, bundleAsset, KEY_QNS_CBS_TRANSPORT_TYPE_INT); mQnsCbsTransportType = @@ -1964,7 +1949,19 @@ class QnsCarrierConfigManager { } else if (netCapability == NetworkCapabilities.NET_CAPABILITY_MMS) { return mQnsMmsTransportType; } else if (netCapability == NetworkCapabilities.NET_CAPABILITY_XCAP) { - return mQnsXcapTransportType; + HashSet supportedTransportType = new HashSet<>(); + if (mQnsXcapSupportedAccessNetworkTypes != null) { + Arrays.stream(mQnsXcapSupportedAccessNetworkTypes) + .forEach(accessNetwork -> supportedTransportType.add( + QnsUtils.getTransportTypeFromAccessNetwork(accessNetwork))); + } + if (supportedTransportType.contains(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)) { + if (supportedTransportType.contains(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) { + return QnsConstants.TRANSPORT_TYPE_ALLOWED_BOTH; + } + return QnsConstants.TRANSPORT_TYPE_ALLOWED_IWLAN; + } + return QnsConstants.TRANSPORT_TYPE_ALLOWED_WWAN; } else if (netCapability == NetworkCapabilities.NET_CAPABILITY_CBS) { return mQnsCbsTransportType; } @@ -2382,8 +2379,10 @@ class QnsCarrierConfigManager { || mQnsMmsTransportType == QnsConstants.TRANSPORT_TYPE_ALLOWED_BOTH) { netCapabilities.add(NetworkCapabilities.NET_CAPABILITY_MMS); } - if (mQnsXcapTransportType == QnsConstants.TRANSPORT_TYPE_ALLOWED_IWLAN - || mQnsXcapTransportType == QnsConstants.TRANSPORT_TYPE_ALLOWED_BOTH) { + if (mQnsXcapSupportedAccessNetworkTypes != null + && Arrays.stream(mQnsXcapSupportedAccessNetworkTypes) + .anyMatch(accessNetwork -> QnsUtils.getTransportTypeFromAccessNetwork( + accessNetwork) == AccessNetworkConstants.TRANSPORT_TYPE_WLAN)) { netCapabilities.add(NetworkCapabilities.NET_CAPABILITY_XCAP); } if (mQnsCbsTransportType == QnsConstants.TRANSPORT_TYPE_ALLOWED_IWLAN @@ -2393,34 +2392,42 @@ class QnsCarrierConfigManager { return netCapabilities; } + private static HashMap sRatStringMatcher; + static { + sRatStringMatcher = new HashMap<>(); + sRatStringMatcher.put(AccessNetworkConstants.AccessNetworkType.EUTRAN, "LTE"); + sRatStringMatcher.put(AccessNetworkConstants.AccessNetworkType.NGRAN, "NR"); + sRatStringMatcher.put(AccessNetworkConstants.AccessNetworkType.UTRAN, "3G"); + sRatStringMatcher.put(AccessNetworkConstants.AccessNetworkType.GERAN, "2G"); + } + /** * This method returns Allowed cellular RAT for IMS * - * @param accessNetwork , netCapability : EUTRAN / NGRAN / UTRAN/ GERAN + * @param accessNetwork : (EUTRAN, NGRAN, UTRAN, GERAN) + * @param netCapability : (ims, sos, mms, xcap, cbs) * @return : True or False based on configuration */ boolean isAccessNetworkAllowed(int accessNetwork, int netCapability) { - // cases to be enhanced for different key items when added - if (netCapability == NetworkCapabilities.NET_CAPABILITY_IMS) { - if (mImsAllowedRats != null) { - for (String cellularRatType : mImsAllowedRats) { - if ((cellularRatType.contains("LTE") - && accessNetwork - == AccessNetworkConstants.AccessNetworkType.EUTRAN) - || (cellularRatType.contains("NR") - && accessNetwork - == AccessNetworkConstants.AccessNetworkType.NGRAN) - || (cellularRatType.contains("3G") - && accessNetwork - == AccessNetworkConstants.AccessNetworkType.UTRAN) - || (cellularRatType.contains("2G") - && accessNetwork - == AccessNetworkConstants.AccessNetworkType.GERAN)) { - return true; - } + switch (netCapability) { + case NetworkCapabilities.NET_CAPABILITY_EIMS: + case NetworkCapabilities.NET_CAPABILITY_IMS: + // cases to be enhanced for different key items when added + String ratName = sRatStringMatcher.get(accessNetwork); + if (mImsAllowedRats != null + && ratName != null + && Arrays.stream(mImsAllowedRats) + .anyMatch(ratType -> TextUtils.equals(ratType, ratName))) { + return true; } - } + break; + case NetworkCapabilities.NET_CAPABILITY_XCAP: + return mQnsXcapSupportedAccessNetworkTypes != null + && Arrays.stream(mQnsXcapSupportedAccessNetworkTypes) + .anyMatch(xcapAccessNetwork -> accessNetwork == xcapAccessNetwork); + default: + return false; } return false; } diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsUtils.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsUtils.java index c17a2c7..85ae192 100644 --- a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsUtils.java +++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsUtils.java @@ -625,7 +625,6 @@ class QnsUtils { case QnsCarrierConfigManager.KEY_QNS_IMS_TRANSPORT_TYPE_INT: return (T) Integer.valueOf(QnsConstants.TRANSPORT_TYPE_ALLOWED_BOTH); case QnsCarrierConfigManager.KEY_QNS_MMS_TRANSPORT_TYPE_INT: - case QnsCarrierConfigManager.KEY_QNS_XCAP_TRANSPORT_TYPE_INT: case QnsCarrierConfigManager.KEY_QNS_CBS_TRANSPORT_TYPE_INT: case QnsCarrierConfigManager.KEY_QNS_SOS_TRANSPORT_TYPE_INT: return (T) Integer.valueOf(QnsConstants.TRANSPORT_TYPE_ALLOWED_WWAN); -- cgit v1.2.3