Merge cherrypicks of ['googleplex-android-review.googlesource.com/32792586'] into 25Q2-release.
Change-Id: Ie03dacca23284a884cbabc18ed0c642a67d3e085
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 3143add..abf725f 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -2987,6 +2987,11 @@
Phone callPhone = tc.getPhone();
int callDomain = NetworkRegistrationInfo.DOMAIN_UNKNOWN;
+ // Treat Wi-Fi calling same as PS domain.
+ if (domain == PhoneConstants.DOMAIN_NON_3GPP_PS) {
+ domain = NetworkRegistrationInfo.DOMAIN_PS;
+ }
+
if (callPhone != null && callPhone.getSubId() == phone.getSubId()) {
if (tc.isGsmCdmaConnection()) {
callDomain = NetworkRegistrationInfo.DOMAIN_CS;
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index dd758aa..b2a8991 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -3876,6 +3876,66 @@
}
@Test
+ public void testDomainSelectionAddVoWifiEmergencyCallWhenImsCallActive() throws Exception {
+ mSetFlagsRule.enableFlags(Flags.FLAG_HANGUP_ACTIVE_CALL_BASED_ON_EMERGENCY_CALL_DOMAIN);
+
+ setupForCallTest();
+ doReturn(1).when(mPhone0).getSubId();
+ doReturn(1).when(mImsPhone).getSubId();
+ ImsPhoneCall imsPhoneCall = Mockito.mock(ImsPhoneCall.class);
+ ImsPhoneConnection imsPhoneConnection = Mockito.mock(ImsPhoneConnection.class);
+ when(imsPhoneCall.getPhone()).thenReturn(mImsPhone);
+ when(imsPhoneConnection.getCall()).thenReturn(imsPhoneCall);
+ when(imsPhoneConnection.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_IMS);
+
+ // PROPERTY_IS_EXTERNAL_CALL: to avoid extra processing that is not related to this test.
+ SimpleTelephonyConnection tc1 = createTestConnection(PHONE_ACCOUNT_HANDLE_1,
+ android.telecom.Connection.PROPERTY_IS_EXTERNAL_CALL, false);
+ // IMS connection is set.
+ tc1.setOriginalConnection(imsPhoneConnection);
+ mTestConnectionService.addExistingConnection(PHONE_ACCOUNT_HANDLE_1, tc1);
+
+ assertEquals(1, mTestConnectionService.getAllConnections().size());
+ TelephonyConnection connection1 = (TelephonyConnection)
+ mTestConnectionService.getAllConnections().toArray()[0];
+ assertEquals(tc1, connection1);
+
+ // Add VoWifi emergency call.
+ String telecomCallId2 = "TC2";
+ int selectedDomain = PhoneConstants.DOMAIN_NON_3GPP_PS;
+ setupForDialForDomainSelection(mPhone0, selectedDomain, true);
+ getTestContext().getCarrierConfig(0 /*subId*/).putBoolean(
+ CarrierConfigManager.KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL, true);
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, telecomCallId2));
+
+ // Maintain the active IMS call because VoWifi emergency call is made.
+ ArgumentCaptor<Connection.Listener> listenerCaptor =
+ ArgumentCaptor.forClass(Connection.Listener.class);
+ verify(imsPhoneConnection, never()).addListener(listenerCaptor.capture());
+ assertFalse(tc1.wasDisconnected);
+
+ // Continue to proceed the outgoing emergency call without active call disconnection.
+ ArgumentCaptor<android.telecom.Connection> connectionCaptor =
+ ArgumentCaptor.forClass(android.telecom.Connection.class);
+ verify(mDomainSelectionResolver)
+ .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
+ verify(mEmergencyStateTracker)
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
+ verify(mSatelliteSOSMessageRecommender, times(2))
+ .onEmergencyCallStarted(any(), anyBoolean());
+ verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+ verify(mPhone0).dial(anyString(), any(), any());
+
+ android.telecom.Connection tc = connectionCaptor.getValue();
+ assertNotNull(tc);
+ assertEquals(telecomCallId2, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+ }
+
+ @Test
@SmallTest
public void testDomainSelectionMaybeDisconnectCallsOnOtherDomainWhenNoActiveCalls() {
SimpleTelephonyConnection ec = createTestConnection(PHONE_ACCOUNT_HANDLE_1, 0, true);