Switch RAT preference after VoLTE failure per configuration
If KEY_SCAN_LIMITED_SERVICE_AFTER_VOLTE_FAILURE_BOOL is true,
switch the preferred RAT for scan after VoLTE failure.
Instead, the limited only scan shall be requested per configuration.
Bug: 335752472
Bug: 335754903
Test: atest EmergencyCallDomainSelectorTest
Change-Id: I4abc62fbfb4a9f2616b2dc98a57187e18de1db0a
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 6001a43..e82bf67 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -447,6 +447,7 @@
if (mLastNetworkType == EUTRAN && mLastRegResult != null
&& mSelectionAttributes.getPsDisconnectCause() != null
+ && !mScanLimitedOnlyAfterVolteFailure
&& !mSwitchRatPreferenceWithLocalNotRegistered) {
int regState = mLastRegResult.getRegState();
int reasonCode = mSelectionAttributes.getPsDisconnectCause().getCode();
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index adf342c..a496bd1 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -2928,6 +2928,40 @@
}
@Test
+ public void testDefaultLimitedServiceEutranFailScanLimitedOnly() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ bundle.putBoolean(KEY_SCAN_LIMITED_SERVICE_AFTER_VOLTE_FAILURE_BOOL,
+ true);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt(), anyVararg())).thenReturn(bundle);
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(EUTRAN,
+ REGISTRATION_STATE_UNKNOWN,
+ 0, false, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ processAllMessages();
+ verify(mWwanSelectorCallback, times(1)).onDomainSelected(eq(DOMAIN_PS), eq(true));
+
+ attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, false, regResult,
+ new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED, 0, null));
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ // Verify CS preferred limited service only scan
+ verify(mWwanSelectorCallback).onRequestEmergencyNetworkScan(
+ any(), eq(DomainSelectionService.SCAN_TYPE_LIMITED_SERVICE),
+ anyBoolean(), any(), any());
+ assertEquals(UTRAN, (int) mAccessNetwork.get(0));
+ }
+
+ @Test
public void testDefaultLimitedServiceEutranFailPinLocked() throws Exception {
doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
.when(mTelephonyManager).getSimState(anyInt());