summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNagendra Prasad Nagarle Basavaraju <nagendranb@google.com>2023-03-27 04:50:38 +0000
committerNagendra Prasad Nagarle Basavaraju <nagendranb@google.com>2023-03-27 04:55:14 +0000
commit0e4751346231ee2fa51c5664c4005bb2ae8872a6 (patch)
tree139981ee87c27dd77c82b7c34166e4327e60a8f4
parentace32073e3a39af69a99cf3021277f3f6d4d1352 (diff)
downloadTelephony-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
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/CellularQualityMonitor.java10
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/QnsCarrierConfigManager.java69
-rw-r--r--services/QualifiedNetworksService/src/com/android/telephony/qns/QnsComponents.java5
-rw-r--r--services/QualifiedNetworksService/tests/src/com/android/telephony/qns/CellularQualityMonitorTest.java5
-rw-r--r--services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsCarrierConfigManagerTest.java88
-rw-r--r--services/QualifiedNetworksService/tests/src/com/android/telephony/qns/QnsUtilsTest.java19
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