Handle normal rougint emergency numbers
Normal call domain selector shall handle this number.
Bug: 266773998
Test: atest TelephonyConnectionServiceTest
Change-Id: I543464cbfc5adb2141a341ea12697821fef911ba
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 1754ea5..804e074 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -955,7 +955,8 @@
handle == null ? null : handle.getSchemeSpecificPart());
if (mDomainSelectionResolver.isDomainSelectionSupported()) {
- if (isEmergencyNumber) {
+ // Normal routing emergency number shall be handled by normal call domain selctor.
+ if (isEmergencyNumber && !isNormalRouting(phone, number)) {
final Connection resultConnection =
placeEmergencyConnection(phone,
request, numberToDial, isTestEmergencyNumber,
@@ -1965,6 +1966,16 @@
}
}
}
+ if (mDomainSelectionResolver.isDomainSelectionSupported()) {
+ if (isNormalRouting(phone, number)
+ && handleOutgoingCallConnection(number, connection,
+ phone, videoState)) {
+ /** Normal routing emergency number shall be handled
+ * by normal call domain selctor.*/
+ Log.i(this, "placeOutgoingConnection normal routing number");
+ return;
+ }
+ }
} else if (handleOutgoingCallConnection(number, connection,
phone, videoState)) {
return;
@@ -2331,6 +2342,17 @@
return false;
}
+ private boolean isNormalRouting(Phone phone, String number) {
+ if (phone.getEmergencyNumberTracker() != null) {
+ EmergencyNumber num = phone.getEmergencyNumberTracker().getEmergencyNumber(number);
+ if (num != null) {
+ return num.getEmergencyCallRouting()
+ == EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL;
+ }
+ }
+ return false;
+ }
+
private boolean maybeReselectDomainForNormalCall(
final TelephonyConnection c, int callFailCause, ImsReasonInfo reasonInfo) {
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index e8365b0..8aa5923 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -1518,6 +1518,40 @@
}
@Test
+ public void testDomainSelectionNormalRoutingEmergencyNumber() throws Exception {
+ setupForCallTest();
+ int selectedDomain = DOMAIN_PS;
+
+ EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+ Collections.emptyList(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL);
+
+ setupForDialForDomainSelection(mPhone0, selectedDomain, false);
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+ doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+ verify(mDomainSelectionResolver)
+ .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(false));
+ verify(mNormalCallDomainSelectionConnection).createNormalConnection(any(), any());
+
+ ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
+
+ verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
+ DialArgs dialArgs = argsCaptor.getValue();
+ assertNotNull("DialArgs param is null", dialArgs);
+ assertNotNull("intentExtras is null", dialArgs.intentExtras);
+ assertTrue(dialArgs.intentExtras.containsKey(PhoneConstants.EXTRA_DIAL_DOMAIN));
+ assertEquals(
+ selectedDomain, dialArgs.intentExtras.getInt(PhoneConstants.EXTRA_DIAL_DOMAIN, -1));
+ }
+
+ @Test
public void testDomainSelectionNormalToEmergencyCs() throws Exception {
setupForCallTest();