Merge "Try CSFB if emergency service is not supported in scanned network" into 24D1-dev am: 71f132da0d
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telephony/+/27205444
Change-Id: If49c47b387c119e6ad4675a6c31c4aa4f32893e2
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index e992de2..3fb6ae8 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -342,6 +342,15 @@
logi("requestScan-onComplete");
sendMessage(obtainMessage(MSG_NETWORK_SCAN_RESULT, regResult));
});
+ } else if ((mPreferredNetworkScanType
+ == CarrierConfigManager.ImsEmergency.SCAN_TYPE_FULL_SERVICE)
+ && (mScanType == DomainSelectionService.SCAN_TYPE_FULL_SERVICE)) {
+ mWwanSelectorCallback.onRequestEmergencyNetworkScan(
+ mLastPreferredNetworks, mScanType, true, mCancelSignal,
+ (regResult) -> {
+ logi("requestScan-onComplete");
+ sendMessage(obtainMessage(MSG_NETWORK_SCAN_RESULT, regResult));
+ });
} else {
// Continuous scan, do not start a new timer.
requestScan(false);
@@ -367,11 +376,10 @@
if (accessNetworkType != EUTRAN) return accessNetworkType;
int regState = result.getRegState();
- int domain = result.getDomain();
// Emergency is not supported with LTE, but CSFB is possible.
if ((regState == REGISTRATION_STATE_HOME || regState == REGISTRATION_STATE_ROAMING)
- && (domain == NetworkRegistrationInfo.DOMAIN_CS)) {
+ && isCsDomainOnlyAvailable(result)) {
logi("getAccessNetworkType emergency not supported but CSFB is possible");
accessNetworkType = UTRAN;
}
@@ -379,6 +387,15 @@
return accessNetworkType;
}
+ private boolean isCsDomainOnlyAvailable(EmergencyRegistrationResult result) {
+ int domain = result.getDomain();
+ if (domain == NetworkRegistrationInfo.DOMAIN_CS) return true;
+ if ((domain & NetworkRegistrationInfo.DOMAIN_CS) > 0) {
+ return (!result.isEmcBearerSupported() || !result.isVopsSupported());
+ }
+ return false;
+ }
+
@Override
public void reselectDomain(SelectionAttributes attr) {
logi("reselectDomain attr=" + attr);
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 7c5a82c..4690d6e 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -1893,6 +1893,32 @@
}
@Test
+ public void testEutranVopsNotSupported() throws Exception {
+ setupForHandleScanResult();
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(EUTRAN,
+ REGISTRATION_STATE_HOME,
+ DOMAIN_CS | DOMAIN_PS, false, true, 0, 0, "", "");
+ mResultConsumer.accept(regResult);
+ processAllMessages();
+
+ verifyCsDialed();
+ }
+
+ @Test
+ public void testEutranEmcBearerNotSupported() throws Exception {
+ setupForHandleScanResult();
+
+ EmergencyRegistrationResult regResult = getEmergencyRegResult(EUTRAN,
+ REGISTRATION_STATE_HOME,
+ DOMAIN_CS | DOMAIN_PS, true, false, 0, 0, "", "");
+ mResultConsumer.accept(regResult);
+ processAllMessages();
+
+ verifyCsDialed();
+ }
+
+ @Test
public void testEutranWithPsDomainOnly() throws Exception {
setupForHandleScanResult();
@@ -1945,8 +1971,10 @@
mResultConsumer.accept(regResult);
processAllMessages();
- verify(mWwanSelectorCallback, times(2)).onRequestEmergencyNetworkScan(
+ verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
any(), eq(DomainSelectionService.SCAN_TYPE_FULL_SERVICE), eq(false), any(), any());
+ verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+ any(), eq(DomainSelectionService.SCAN_TYPE_FULL_SERVICE), eq(true), any(), any());
}
@Test