Merge "Request PS preferred scan after ePDN setup failure in limited state" into 24D1-dev
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index fbe61eb..a75f244 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -390,6 +390,18 @@
return;
}
+ if (mLastNetworkType == EUTRAN && mLastRegResult != null
+ && mSelectionAttributes.getPsDisconnectCause() != null) {
+ int regState = mLastRegResult.getRegState();
+ int reasonCode = mSelectionAttributes.getPsDisconnectCause().getCode();
+ if (reasonCode == ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED
+ && regState != REGISTRATION_STATE_HOME
+ && regState != REGISTRATION_STATE_ROAMING) {
+ // b/326292100, ePDN setup failed in limited state, request PS preferred scan.
+ mLastNetworkType = UNKNOWN;
+ }
+ }
+
requestScan(true);
mDomainSelected = false;
}
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 3079ebd..b995ff5 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -113,6 +113,7 @@
import android.telephony.WwanSelectorCallback;
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsMmTelManager;
+import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ProvisioningManager;
import android.testing.TestableLooper;
import android.util.Log;
@@ -2763,6 +2764,35 @@
bindImsServiceUnregistered();
verifyPsDialed();
+
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ verifyScanCsPreferred();
+ }
+
+ @Test
+ public void testDefaultLimitedServiceEutranFail() throws Exception {
+ 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();
+
+ verifyPsDialed();
+
+ attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, false, regResult,
+ new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED, 0, null));
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ verifyScanPsPreferred();
}
@Test
@@ -3350,11 +3380,18 @@
private static SelectionAttributes getSelectionAttributes(int slotId, int subId,
boolean isTestEmergencyNumber, EmergencyRegistrationResult regResult) {
+ return getSelectionAttributes(slotId, subId, isTestEmergencyNumber, regResult, null);
+ }
+
+ private static SelectionAttributes getSelectionAttributes(int slotId, int subId,
+ boolean isTestEmergencyNumber, EmergencyRegistrationResult regResult,
+ ImsReasonInfo imsReasonInfo) {
SelectionAttributes.Builder builder =
new SelectionAttributes.Builder(slotId, subId, SELECTOR_TYPE_CALLING)
.setAddress(TEST_URI)
.setEmergency(true)
.setTestEmergencyNumber(isTestEmergencyNumber)
+ .setPsDisconnectCause(imsReasonInfo)
.setEmergencyRegistrationResult(regResult);
return builder.build();
}