diff options
author | Nagendra Prasad Nagarle Basavaraju <nagendranb@google.com> | 2023-03-27 04:50:38 +0000 |
---|---|---|
committer | Nagendra Prasad Nagarle Basavaraju <nagendranb@google.com> | 2023-03-27 04:55:14 +0000 |
commit | 0e4751346231ee2fa51c5664c4005bb2ae8872a6 (patch) | |
tree | 139981ee87c27dd77c82b7c34166e4327e60a8f4 | |
parent | ace32073e3a39af69a99cf3021277f3f6d4d1352 (diff) | |
download | Telephony-0e4751346231ee2fa51c5664c4005bb2ae8872a6.tar.gz |
[HysteresisDB] Support HysteresisDB Settings from CellularQualityMonitor
- Support Overriding of HyseresisDb value from QualifiefNetworksService
Bug: 240215633
Bug: 274605921
Test: atest QualifiedNetworksServiceTest
Change-Id: I3294d5f08f0a4f755a915bdf846a00fbed4dedbf
6 files changed, 179 insertions, 17 deletions
diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/CellularQualityMonitor.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/CellularQualityMonitor.java index c2b8d07..c9edc08 100644 --- a/services/QualifiedNetworksService/src/com/android/telephony/qns/CellularQualityMonitor.java +++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/CellularQualityMonitor.java @@ -62,6 +62,7 @@ class CellularQualityMonitor extends QualityMonitor { SignalThresholdInfo.MAXIMUM_NUMBER_OF_THRESHOLDS_ALLOWED; private final String mTag; private TelephonyManager mTelephonyManager; + private QnsCarrierConfigManager mConfigManager; private int mSubId; private final int mSlotIndex; private boolean mIsQnsListenerRegistered; @@ -89,7 +90,10 @@ class CellularQualityMonitor extends QualityMonitor { * @param listener QnsTelephonyListener instance * @param slotIndex slot index */ - CellularQualityMonitor(Context context, QnsTelephonyListener listener, int slotIndex) { + CellularQualityMonitor(Context context, + QnsCarrierConfigManager configMgr, + QnsTelephonyListener listener, + int slotIndex) { super(QualityMonitor.class.getSimpleName() + "-C-" + slotIndex); mContext = context; mSlotIndex = slotIndex; @@ -110,6 +114,7 @@ class CellularQualityMonitor extends QualityMonitor { } else { Log.e(mTag, "Failed to get Telephony Service"); } + mConfigManager = configMgr; mSignalStrengthListener = new CellularSignalStrengthListener(mContext.getMainExecutor()); mSignalStrengthListener.setSignalStrengthListener(this::onSignalStrengthsChanged); } @@ -273,6 +278,9 @@ class CellularQualityMonitor extends QualityMonitor { if (backhaulTime > 0) { builder.setHysteresisMs(backhaulTime); } + int hysteresisDb = mConfigManager.getWwanHysteresisDbLevel(networkType, + measurementType); + builder.setHysteresisDb(hysteresisDb); mSignalThresholdInfoList.add(builder.build()); Log.d(mTag, "Updated SignalThresholdInfo List: " + mSignalThresholdInfoList); } diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java index 1f869d1..ac5b561 100644 --- a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java +++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java @@ -46,6 +46,7 @@ import android.os.PersistableBundle; import android.telephony.AccessNetworkConstants; import android.telephony.Annotation.NetCapability; import android.telephony.CarrierConfigManager; +import android.telephony.SignalThresholdInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.ImsMmTelManager; @@ -667,6 +668,20 @@ class QnsCarrierConfigManager { */ static final String KEY_SIP_DIALOG_SESSION_POLICY_INT = "qns.sip_dialog_session_policy_int"; + /** + * List of Array items indicating hysteresis db levels based on access network and measurement + * type , whose value to be used at api + * {@link SignalThresholdInfo#Builder().setHysteresisDb(int)} + * The values are set as Format "<accessNetwork>:<meas_type>:<hysteresisDb>" + * Ex: "eutran:rsrp:2","ngran:ssrsrp:1" + * + * The default value or if value set is less than zero, + * for this key is {@link QnsConstants#KEY_DEFAULT_VALUE} + * + */ + public static final String KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY = + "qns.cellular_signal_strength_hysteresis_db_string_array"; + static HashMap<Integer, String> sAccessNetworkMap = new HashMap<>() { { @@ -755,6 +770,7 @@ class QnsCarrierConfigManager { private String[] mImsAllowedRats; private String[] mRoveInGuardTimerConditionThresholdGaps; private String[] mFallbackOnInitialConnectionFailure; + private String[] mAccessNetworkMeasurementHysteresisDb; @NonNull private final List<FallbackRule> mFallbackWwanRuleWithImsUnregistered = new ArrayList<>(); @@ -1382,6 +1398,11 @@ class QnsCarrierConfigManager { KEY_QNS_ROVEIN_THRESHOLD_GAP_WITH_GUARD_TIMER_STRING_ARRAY); mSipDialogSessionPolicy = getConfig(bundleCarrier, bundleAsset, KEY_SIP_DIALOG_SESSION_POLICY_INT); + mAccessNetworkMeasurementHysteresisDb = + getConfig( + bundleCarrier, + bundleAsset, + KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY); loadFallbackPolicyWithImsRegiFail(bundleCarrier, bundleAsset); } @@ -2063,22 +2084,46 @@ class QnsCarrierConfigManager { int getThresholdGapWithGuardTimer( @AccessNetworkConstants.RadioAccessNetworkType int accessNetwork, int measType) { - if (mRoveInGuardTimerConditionThresholdGaps == null) { + return getValueForMeasurementType( + accessNetwork, measType, mRoveInGuardTimerConditionThresholdGaps); + + } + + /** + * This method returns hysteresis Dbm level for ran and measurement type configured. + * + * @return : Based on Carrier Config Settings & operator requirement Default Value. + * Note: If configured value set is less than zero or not set, + * {@link QnsConstants#KEY_DEFAULT_VALUE} + */ + public int getWwanHysteresisDbLevel( + @AccessNetworkConstants.RadioAccessNetworkType int accessNetwork, int measType) { + + int hysteresisDb = getValueForMeasurementType( + accessNetwork, measType, mAccessNetworkMeasurementHysteresisDb); + return hysteresisDb >= 0 ? hysteresisDb : QnsConstants.KEY_DEFAULT_VALUE; + } + + private int getValueForMeasurementType( + @AccessNetworkConstants.RadioAccessNetworkType int accessNetwork, int measType, + String [] measurementValues) { + + if (measurementValues == null) { return QnsConstants.KEY_DEFAULT_VALUE; } - if (!mRoveInGuardTimerConditionThresholdGaps[0].isEmpty()) { - for (String check_offset : mRoveInGuardTimerConditionThresholdGaps) { - String[] gap = check_offset.split(":"); - String access_network = sAccessNetworkMap.get(accessNetwork); - String measurement_Type = sMeasTypeMap.get(measType); - try { - if (gap[0].equalsIgnoreCase(access_network) - && gap[1].equalsIgnoreCase(measurement_Type)) { - return Integer.parseInt(gap[2]); - } - } catch (Exception e) { + for (String check_offset : measurementValues) { + if (check_offset == null || check_offset.isEmpty()) continue; + String[] value = check_offset.split(":"); + String access_network = sAccessNetworkMap.get(accessNetwork); + String measurement_Type = sMeasTypeMap.get(measType); + try { + if (value.length == 3 && value[0].equalsIgnoreCase(access_network) + && value[1].equalsIgnoreCase(measurement_Type)) { + return Integer.parseInt(value[2]); } + } catch (Exception e) { + e.printStackTrace(); } } return QnsConstants.KEY_DEFAULT_VALUE; diff --git a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsComponents.java b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsComponents.java index 1c14bae..74809f7 100644 --- a/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsComponents.java +++ b/services/QualifiedNetworksService/src/com/android/telephony/qns/QnsComponents.java @@ -77,7 +77,10 @@ class QnsComponents { new CellularNetworkStatusTracker(mQnsTelephonyListeners.get(slotId), slotId)); mCellularQualityMonitors.put( slotId, - new CellularQualityMonitor(mContext, mQnsTelephonyListeners.get(slotId), slotId)); + new CellularQualityMonitor(mContext, + mQnsCarrierConfigManagers.get(slotId), + mQnsTelephonyListeners.get(slotId), + slotId)); mQnsProvisioningListeners.put( slotId, new QnsProvisioningListener(mContext, mQnsImsManagers.get(slotId), slotId)); mQnsEventDispatchers.put( diff --git a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/CellularQualityMonitorTest.java b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/CellularQualityMonitorTest.java index 6ab2566..e2fbb5b 100644 --- a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/CellularQualityMonitorTest.java +++ b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/CellularQualityMonitorTest.java @@ -99,7 +99,10 @@ public final class CellularQualityMonitorTest extends QnsTest { MockitoAnnotations.initMocks(this); super.setUp(); mCellularQualityMonitor = - new CellularQualityMonitor(sMockContext, mMockQnsTelephonyListener, mSlotIndex); + new CellularQualityMonitor(sMockContext, + mMockQnsConfigManager, + mMockQnsTelephonyListener, + mSlotIndex); mLatch = new CountDownLatch(1); mThresholdListener = new ThresholdListener(mExecutor); diff --git a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCarrierConfigManagerTest.java b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCarrierConfigManagerTest.java index fb3bd67..f39ea40 100644 --- a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCarrierConfigManagerTest.java +++ b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCarrierConfigManagerTest.java @@ -16,16 +16,16 @@ package com.android.telephony.qns; -import static android.hardware.radio.network.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSCP; import static android.hardware.radio.network.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSRQ; import static android.hardware.radio.network.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSI; import static android.hardware.radio.network.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSSNR; -import static android.hardware.radio.network.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_SSRSRP; import static android.hardware.radio.network.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_SSRSRQ; import static android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_INVALID; import static android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_WLAN; import static android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_WWAN; +import static android.telephony.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSCP; import static android.telephony.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_RSRP; +import static android.telephony.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_SSRSRP; import static android.telephony.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_SSSINR; import static android.telephony.SignalThresholdInfo.SIGNAL_MEASUREMENT_TYPE_UNKNOWN; @@ -467,6 +467,90 @@ public class QnsCarrierConfigManagerTest extends QnsTest { } @Test + public void testGetWwanHysteresisDbLevelWithTestbundle() { + PersistableBundle bundle = new PersistableBundle(); + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {"eutran:rsrp:1"}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + 1, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.EUTRAN, + SIGNAL_MEASUREMENT_TYPE_RSRP)); + + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {"ngran:ssrsrp:2"}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + 2, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.NGRAN, + SIGNAL_MEASUREMENT_TYPE_SSRSRP)); + + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {"eutran:rsrp:-5"}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + QnsConstants.KEY_DEFAULT_VALUE, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.EUTRAN, + SIGNAL_MEASUREMENT_TYPE_RSRP)); + + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {"utran:rscp:5"}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + 5, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.UTRAN, + SIGNAL_MEASUREMENT_TYPE_RSCP)); + + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {"eutran::-2"}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + QnsConstants.KEY_DEFAULT_VALUE, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.EUTRAN, + SIGNAL_MEASUREMENT_TYPE_RSRP)); + + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {":rsrp:-2"}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + QnsConstants.KEY_DEFAULT_VALUE, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.EUTRAN, + SIGNAL_MEASUREMENT_TYPE_RSRP)); + + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {""}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + QnsConstants.KEY_DEFAULT_VALUE, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.EUTRAN, + SIGNAL_MEASUREMENT_TYPE_RSRP)); + + bundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {":"}); + mConfigManager.loadQnsAneSupportConfigurations(bundle, null); + Assert.assertEquals( + QnsConstants.KEY_DEFAULT_VALUE, + mConfigManager.getWwanHysteresisDbLevel( + AccessNetworkConstants.AccessNetworkType.EUTRAN, + SIGNAL_MEASUREMENT_TYPE_RSRP)); + } + + @Test public void testGetQnsSupportedNetCapabilitiesWithDefaultValues() { List<Integer> imsNetCapability = new ArrayList<>(); imsNetCapability.add(NetworkCapabilities.NET_CAPABILITY_IMS); diff --git a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsUtilsTest.java b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsUtilsTest.java index 7b1db18..7c68069 100644 --- a/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsUtilsTest.java +++ b/services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsUtilsTest.java @@ -256,6 +256,8 @@ public class QnsUtilsTest extends QnsTest { String[] defaultStringArray = new String[] {"LTE", "UMTS"}; String[] defaultGapOffsetStringArray = new String[] {"eutran:rsrp:-5", "ngran:ssrsp:-2", "utran:rscp:-3"}; + String[] defaultHysteresisDbLevelStringArray = + new String[] {"eutran:rsrp:1", "ngran:ssrsp:2", "utran:rscp:5"}; String[] defaultHandoverPolicyArray = new String[] {HANDOVER_POLICY_1, HANDOVER_POLICY_2}; String[] fallbackWwanRuleWithImsUnregistered = new String[] {FALLBACK_RULE0, FALLBACK_RULE1}; @@ -515,6 +517,13 @@ public class QnsUtilsTest extends QnsTest { QnsCarrierConfigManager .KEY_QNS_ROVEIN_THRESHOLD_GAP_WITH_GUARD_TIMER_STRING_ARRAY)); assertArrayEquals( + defaultHysteresisDbLevelStringArray, + QnsUtils.getConfig( + mTestBundle, + null, + QnsCarrierConfigManager + .KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY)); + assertArrayEquals( defaultHandoverPolicyArray, QnsUtils.getConfig( mTestBundle, @@ -662,6 +671,9 @@ public class QnsUtilsTest extends QnsTest { mTestBundle.putStringArray( QnsCarrierConfigManager.KEY_QNS_FALLBACK_ON_INITIAL_CONNECTION_FAILURE_STRING_ARRAY, new String[] {"ims:2:30000:60000:5", "mms:1:10000:5000:2"}); + mTestBundle.putStringArray( + QnsCarrierConfigManager.KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY, + new String[] {"eutran:rsrp:1", "ngran:ssrsp:2", "utran:rscp:5"}); } @Test @@ -1079,6 +1091,13 @@ public class QnsUtilsTest extends QnsTest { null, QnsCarrierConfigManager .KEY_QNS_FALLBACK_ON_INITIAL_CONNECTION_FAILURE_STRING_ARRAY)); + assertArrayEquals( + (String[]) null, + QnsUtils.getConfig( + null, + null, + QnsCarrierConfigManager + .KEY_QNS_CELLULAR_SIGNAL_STRENGTH_HYSTERESIS_DB_STRING_ARRAY)); } @Test |