Merge "Keep PS preferred scan after VoLTE failure only once" into 24D1-dev
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 18c03ac..29ad29e 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -215,6 +215,7 @@
private boolean mTryCsWhenPsFails;
private boolean mTryEsFallback;
private boolean mIsWaitingForDataDisconnection;
+ private boolean mSwitchRatPreferenceWithLocalNotRegistered;
private int mModemCount;
/** Indicates whether this instance is deactivated. */
@@ -445,7 +446,8 @@
}
if (mLastNetworkType == EUTRAN && mLastRegResult != null
- && mSelectionAttributes.getPsDisconnectCause() != null) {
+ && mSelectionAttributes.getPsDisconnectCause() != null
+ && !mSwitchRatPreferenceWithLocalNotRegistered) {
int regState = mLastRegResult.getRegState();
int reasonCode = mSelectionAttributes.getPsDisconnectCause().getCode();
if (reasonCode == ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED
@@ -453,6 +455,7 @@
&& regState != REGISTRATION_STATE_ROAMING) {
// b/326292100, ePDN setup failed in limited state, request PS preferred scan.
mLastNetworkType = UNKNOWN;
+ mSwitchRatPreferenceWithLocalNotRegistered = true;
}
}
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index fab7256..53f3b8a 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -2882,6 +2882,7 @@
@Test
public void testDefaultLimitedServiceEutranFail() throws Exception {
+ mResultConsumer = null;
createSelector(SLOT_0_SUB_ID);
unsolBarringInfoChanged(false);
@@ -2894,14 +2895,36 @@
bindImsServiceUnregistered();
- verifyPsDialed();
+ 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();
- verifyScanPsPreferred();
+ // Verify PS preferred scan
+ verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+ any(), eq(DomainSelectionService.SCAN_TYPE_NO_PREFERENCE),
+ anyBoolean(), any(), any());
+ assertEquals(EUTRAN, (int) mAccessNetwork.get(0));
+ assertNotNull(mResultConsumer);
+
+ regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_UNKNOWN,
+ 0, false, false, 0, 0, "", "");
+ mResultConsumer.accept(regResult);
+
+ processAllMessages();
+ verify(mWwanSelectorCallback, times(2)).onDomainSelected(eq(DOMAIN_PS), eq(true));
+
+ mDomainSelector.reselectDomain(attr);
+ processAllMessages();
+
+ // Verify RAT preference change
+ verify(mWwanSelectorCallback, times(2)).onRequestEmergencyNetworkScan(
+ any(), eq(DomainSelectionService.SCAN_TYPE_NO_PREFERENCE),
+ anyBoolean(), any(), any());
+ assertEquals(UTRAN, (int) mAccessNetwork.get(0));
}
@Test