Merge "Replace callId with Connection instance" into main
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index acd83c3..9344c21 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -231,7 +231,6 @@
private DomainSelectionResolver mDomainSelectionResolver;
private EmergencyCallDomainSelectionConnection mEmergencyCallDomainSelectionConnection;
private TelephonyConnection mEmergencyConnection;
- private String mEmergencyCallId = null;
private Executor mDomainSelectionMainExecutor;
private ImsManager mImsManager = null;
private DomainSelectionConnection mDomainSelectionConnection;
@@ -576,8 +575,7 @@
}
// Update the domain in the case that it changes,for example during initial
// setup or when there was an srvcc or internal redial.
- mEmergencyStateTracker.onEmergencyCallDomainUpdated(
- origConn.getPhoneType(), c.getTelecomCallId());
+ mEmergencyStateTracker.onEmergencyCallDomainUpdated(origConn.getPhoneType(), c);
}
@Override
@@ -590,8 +588,8 @@
+ ", state=" + state);
if (c.getState() == Connection.STATE_ACTIVE) {
mEmergencyStateTracker.onEmergencyCallStateChanged(
- c.getOriginalConnection().getState(), c.getTelecomCallId());
- releaseEmergencyCallDomainSelection(false);
+ c.getOriginalConnection().getState(), c);
+ releaseEmergencyCallDomainSelection(false, true);
}
}
@@ -609,8 +607,8 @@
return;
}
Log.i(this, "onConnectionPropertiesChanged prop=" + connectionProperties);
- mEmergencyStateTracker.onEmergencyCallPropertiesChanged(connectionProperties,
- c.getTelecomCallId());
+ mEmergencyStateTracker.onEmergencyCallPropertiesChanged(
+ connectionProperties, c);
}
};
@@ -734,9 +732,8 @@
Phone phone = mEmergencyCallDomainSelectionConnection.getPhone();
mEmergencyConnection.removeTelephonyConnectionListener(
mEmergencyConnectionListener);
- releaseEmergencyCallDomainSelection(true);
- mEmergencyStateTracker.endCall(mEmergencyCallId);
- mEmergencyCallId = null;
+ releaseEmergencyCallDomainSelection(true, false);
+ mEmergencyStateTracker.endCall(c);
retryOutgoingOriginalConnection(c, phone, isPermanentFailure);
return;
}
@@ -2430,12 +2427,12 @@
mEmergencyStateTracker = EmergencyStateTracker.getInstance();
}
- mEmergencyCallId = resultConnection.getTelecomCallId();
+ mEmergencyConnection = (TelephonyConnection) resultConnection;
CompletableFuture<Integer> future = mEmergencyStateTracker.startEmergencyCall(
- phone, mEmergencyCallId, isTestEmergencyNumber);
+ phone, resultConnection, isTestEmergencyNumber);
future.thenAccept((result) -> {
Log.d(this, "startEmergencyCall-complete result=" + result);
- if (mEmergencyCallId == null) {
+ if (mEmergencyConnection == null) {
Log.i(this, "startEmergencyCall-complete dialing canceled");
return;
}
@@ -2455,11 +2452,9 @@
mIsEmergencyCallPending = false;
}
});
- mEmergencyConnection = (TelephonyConnection) resultConnection;
- return resultConnection;
}
- Log.i(this, "placeEmergencyConnection returns null");
- return null;
+ // Non TelephonyConnection type instance means dialing failure.
+ return resultConnection;
}
@SuppressWarnings("FutureReturnValueIgnored")
@@ -2515,7 +2510,7 @@
attr, mEmergencyDomainSelectionConnectionCallback);
future.thenAcceptAsync((result) -> {
Log.d(this, "createEmergencyConnection-complete result=" + result);
- if (mEmergencyCallId == null) {
+ if (mEmergencyConnection == null) {
Log.i(this, "createEmergencyConnection-complete dialing canceled");
return;
}
@@ -2533,7 +2528,7 @@
extras.putInt(PhoneConstants.EXTRA_DIAL_DOMAIN, NetworkRegistrationInfo.DOMAIN_CS);
mDomainSelectionMainExecutor.execute(
() -> {
- if (mEmergencyCallId == null) {
+ if (mEmergencyConnection == null) {
Log.i(this, "dialCsEmergencyCall dialing canceled");
return;
}
@@ -2541,14 +2536,16 @@
});
}
- private void releaseEmergencyCallDomainSelection(boolean cancel) {
+ private void releaseEmergencyCallDomainSelection(boolean cancel, boolean isActive) {
if (mEmergencyCallDomainSelectionConnection != null) {
if (cancel) mEmergencyCallDomainSelectionConnection.cancelSelection();
else mEmergencyCallDomainSelectionConnection.finishSelection();
mEmergencyCallDomainSelectionConnection = null;
}
mIsEmergencyCallPending = false;
- mEmergencyConnection = null;
+ if (!isActive) {
+ mEmergencyConnection = null;
+ }
}
/**
@@ -2568,14 +2565,14 @@
int callFailCause = c.getOriginalConnection().getPreciseDisconnectCause();
Log.i(this, "maybeReselectDomain csCause=" + callFailCause + ", psCause=" + reasonInfo);
- if (TextUtils.equals(mEmergencyCallId, c.getTelecomCallId())) {
+ if (mEmergencyConnection == c) {
if (mEmergencyCallDomainSelectionConnection != null) {
return maybeReselectDomainForEmergencyCall(c, callFailCause, reasonInfo);
}
Log.i(this, "maybeReselectDomain endCall()");
c.removeTelephonyConnectionListener(mEmergencyConnectionListener);
- mEmergencyStateTracker.endCall(c.getTelecomCallId());
- mEmergencyCallId = null;
+ releaseEmergencyCallDomainSelection(false, false);
+ mEmergencyStateTracker.endCall(c);
return false;
}
@@ -2622,7 +2619,7 @@
if (future != null) {
future.thenAcceptAsync((result) -> {
Log.d(this, "reselectDomain-complete");
- if (mEmergencyCallId == null) {
+ if (mEmergencyConnection == null) {
Log.i(this, "reselectDomain-complete dialing canceled");
return;
}
@@ -2634,9 +2631,8 @@
Log.i(this, "maybeReselectDomainForEmergencyCall endCall()");
c.removeTelephonyConnectionListener(mEmergencyConnectionListener);
- releaseEmergencyCallDomainSelection(true);
- mEmergencyStateTracker.endCall(c.getTelecomCallId());
- mEmergencyCallId = null;
+ releaseEmergencyCallDomainSelection(true, false);
+ mEmergencyStateTracker.endCall(c);
return false;
}
@@ -2850,12 +2846,12 @@
mEmergencyStateTracker = EmergencyStateTracker.getInstance();
}
- mEmergencyCallId = c.getTelecomCallId();
+ mEmergencyConnection = c;
CompletableFuture<Integer> future = mEmergencyStateTracker.startEmergencyCall(
- phone, mEmergencyCallId, isTestEmergencyNumber);
+ phone, c, isTestEmergencyNumber);
future.thenAccept((result) -> {
Log.d(this, "onEmergencyRedial-complete result=" + result);
- if (mEmergencyCallId == null) {
+ if (mEmergencyConnection == null) {
Log.i(this, "onEmergencyRedial-complete dialing canceled");
return;
}
@@ -2876,8 +2872,6 @@
mEmergencyCallDomainSelectionConnection =
(EmergencyCallDomainSelectionConnection) selectConnection;
- mEmergencyConnection = c;
-
DomainSelectionService.SelectionAttributes attr =
EmergencyCallDomainSelectionConnection.getSelectionAttributes(
phone.getPhoneId(),
@@ -2896,6 +2890,7 @@
mIsEmergencyCallPending = false;
}, mDomainSelectionMainExecutor);
} else {
+ mEmergencyConnection = null;
c.setTelephonyConnectionDisconnected(
mDisconnectCauseFactory.toTelecomDisconnectCause(result, "unknown error"));
c.close();
@@ -2907,7 +2902,7 @@
private void recreateEmergencyConnection(final TelephonyConnection connection,
final Phone phone, final @NetworkRegistrationInfo.Domain int result) {
Log.d(this, "recreateEmergencyConnection result=" + result);
- if (mEmergencyCallId == null) {
+ if (mEmergencyConnection == null) {
Log.i(this, "recreateEmergencyConnection dialing canceled");
return;
}
@@ -3001,16 +2996,25 @@
}
protected void onLocalHangup(TelephonyConnection c) {
- if (TextUtils.equals(mEmergencyCallId, c.getTelecomCallId())) {
- Log.i(this, "onLocalHangup " + mEmergencyCallId);
+ if (mEmergencyConnection == c) {
+ Log.i(this, "onLocalHangup " + c.getTelecomCallId());
c.removeTelephonyConnectionListener(mEmergencyConnectionListener);
- releaseEmergencyCallDomainSelection(true);
- mEmergencyStateTracker.endCall(c.getTelecomCallId());
- mEmergencyCallId = null;
+ releaseEmergencyCallDomainSelection(true, false);
+ mEmergencyStateTracker.endCall(c);
}
}
@VisibleForTesting
+ public TelephonyConnection getEmergencyConnection() {
+ return mEmergencyConnection;
+ }
+
+ @VisibleForTesting
+ public void setEmergencyConnection(TelephonyConnection c) {
+ mEmergencyConnection = c;
+ }
+
+ @VisibleForTesting
public TelephonyConnection.TelephonyConnectionListener getEmergencyConnectionListener() {
return mEmergencyConnectionListener;
}
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index 6f18c21..131b8ac 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -308,7 +308,7 @@
anyString(), anyInt());
doReturn(CompletableFuture.completedFuture(NOT_DISCONNECTED))
.when(mEmergencyStateTracker)
- .startEmergencyCall(any(), anyString(), eq(false));
+ .startEmergencyCall(any(), any(), eq(false));
replaceInstance(TelephonyConnectionService.class,
"mDomainSelectionMainExecutor", mTestConnectionService, getExecutor());
doReturn(false).when(mDomainSelectionResolver).isDomainSelectionSupported();
@@ -2141,13 +2141,22 @@
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+ 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), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
@@ -2171,13 +2180,22 @@
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+ 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), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
@@ -2204,14 +2222,23 @@
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+ ArgumentCaptor<android.telecom.Connection> connectionCaptor =
+ ArgumentCaptor.forClass(android.telecom.Connection.class);
+
verify(mEmergencyStateTracker, times(1))
- .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
verify(mDomainSelectionResolver, times(0))
.getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
verify(mEmergencyCallDomainSelectionConnection, times(0))
.createEmergencyConnection(any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
@@ -2341,13 +2368,22 @@
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+ 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), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
@@ -2594,13 +2630,22 @@
assertTrue(mTestConnectionService.maybeReselectDomain(c, reasonInfo, true,
android.telephony.DisconnectCause.NOT_VALID));
+ 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), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
@@ -2635,13 +2680,22 @@
assertTrue(mTestConnectionService.maybeReselectDomain(c, reasonInfo, true,
android.telephony.DisconnectCause.NOT_VALID));
+ 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), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
@@ -2763,6 +2817,10 @@
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+ android.telecom.Connection c = mTestConnectionService.getEmergencyConnection();
+
+ assertNotNull(c);
+
ArgumentCaptor<DomainSelectionConnection.DomainSelectionConnectionCallback> callbackCaptor =
ArgumentCaptor.forClass(
DomainSelectionConnection.DomainSelectionConnectionCallback.class);
@@ -2778,7 +2836,7 @@
callback.onSelectionTerminated(ERROR_UNSPECIFIED);
verify(mEmergencyCallDomainSelectionConnection).cancelSelection();
- verify(mEmergencyStateTracker).endCall(eq(TELECOM_CALL_ID1));
+ verify(mEmergencyStateTracker).endCall(eq(c));
}
@Test
@@ -2791,26 +2849,23 @@
CompletableFuture<Integer> future = new CompletableFuture<>();
doReturn(future).when(mEmergencyStateTracker)
- .startEmergencyCall(any(), anyString(), eq(false));
+ .startEmergencyCall(any(), any(), eq(false));
mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
verify(mEmergencyStateTracker)
- .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-
- TelephonyConnection c = new TestTelephonyConnection();
- c.setTelecomCallId(TELECOM_CALL_ID1);
+ .startEmergencyCall(eq(mPhone0), any(), eq(false));
// dialing is canceled
- mTestConnectionService.onLocalHangup(c);
+ mTestConnectionService.onLocalHangup(mTestConnectionService.getEmergencyConnection());
// startEmergencyCall has completed
future.complete(NOT_DISCONNECTED);
// verify that createEmergencyConnection is discarded
- verify(mEmergencyCallDomainSelectionConnection, times(0))
+ verify(mEmergencyCallDomainSelectionConnection, never())
.createEmergencyConnection(any(), any());
}
@@ -2832,17 +2887,14 @@
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
- TelephonyConnection c = new TestTelephonyConnection();
- c.setTelecomCallId(TELECOM_CALL_ID1);
-
// dialing is canceled
- mTestConnectionService.onLocalHangup(c);
+ mTestConnectionService.onLocalHangup(mTestConnectionService.getEmergencyConnection());
// domain selection has completed
future.complete(selectedDomain);
// verify that dialing is discarded
- verify(mPhone0, times(0)).dial(anyString(), any(), any());
+ verify(mPhone0, never()).dial(anyString(), any(), any());
}
@Test
@@ -2855,7 +2907,6 @@
TestTelephonyConnection c = setupForReDialForDomainSelection(
mPhone0, selectedDomain, preciseDisconnectCause, disconnectCause, true);
- c.setTelecomCallId(TELECOM_CALL_ID1);
CompletableFuture<Integer> future = new CompletableFuture<>();
doReturn(future).when(mEmergencyCallDomainSelectionConnection)
@@ -2892,20 +2943,28 @@
mImsPhone, selectedDomain, preciseDisconnectCause, disconnectCause, false);
c.setEmergencyServiceCategory(eccCategory);
c.setAddress(TEST_ADDRESS, TelecomManager.PRESENTATION_ALLOWED);
- c.setTelecomCallId(TELECOM_CALL_ID1);
CompletableFuture<Integer> future = new CompletableFuture<>();
doReturn(future).when(mEmergencyStateTracker)
- .startEmergencyCall(any(), anyString(), eq(false));
+ .startEmergencyCall(any(), any(), eq(false));
ImsReasonInfo reasonInfo = new ImsReasonInfo(CODE_SIP_ALTERNATE_EMERGENCY_CALL, 0, null);
assertTrue(mTestConnectionService.maybeReselectDomain(c, reasonInfo, true,
android.telephony.DisconnectCause.NOT_VALID));
+ ArgumentCaptor<android.telecom.Connection> connectionCaptor =
+ ArgumentCaptor.forClass(android.telecom.Connection.class);
+
verify(mEmergencyStateTracker)
- .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
// dialing is canceled
mTestConnectionService.onLocalHangup(c);
@@ -2934,7 +2993,6 @@
mImsPhone, selectedDomain, preciseDisconnectCause, disconnectCause, false);
c.setEmergencyServiceCategory(eccCategory);
c.setAddress(TEST_ADDRESS, TelecomManager.PRESENTATION_ALLOWED);
- c.setTelecomCallId(TELECOM_CALL_ID1);
CompletableFuture<Integer> future = new CompletableFuture<>();
doReturn(future).when(mEmergencyCallDomainSelectionConnection)
@@ -2953,7 +3011,7 @@
future.complete(selectedDomain);
// verify that dialing is discarded
- verify(mPhone0, times(0)).dial(anyString(), any(), any());
+ verify(mPhone0, never()).dial(anyString(), any(), any());
}
@Test
@@ -2968,15 +3026,25 @@
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+ 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), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
verify(mPhone0).dial(anyString(), any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
TestTelephonyConnection c = new TestTelephonyConnection();
+ mTestConnectionService.setEmergencyConnection(c);
c.setTelecomCallId(TELECOM_CALL_ID1);
c.setIsImsConnection(true);
Connection orgConn = c.getOriginalConnection();
@@ -2990,10 +3058,10 @@
connectionListener.onOriginalConnectionConfigured(c);
verify(mEmergencyStateTracker, times(1)).onEmergencyCallDomainUpdated(
- eq(PhoneConstants.PHONE_TYPE_IMS), eq(TELECOM_CALL_ID1));
+ eq(PhoneConstants.PHONE_TYPE_IMS), eq(c));
verify(mEmergencyStateTracker, times(0)).onEmergencyCallStateChanged(
- any(), eq(TELECOM_CALL_ID1));
+ any(), eq(c));
verify(mSatelliteSOSMessageRecommender, times(0))
.onEmergencyCallConnectionStateChanged(eq(TELECOM_CALL_ID1), anyInt());
@@ -3004,7 +3072,7 @@
// ACTIVE sate is notified
verify(mEmergencyStateTracker, times(1)).onEmergencyCallStateChanged(
- eq(Call.State.ACTIVE), eq(TELECOM_CALL_ID1));
+ eq(Call.State.ACTIVE), eq(c));
verify(mSatelliteSOSMessageRecommender, times(1))
.onEmergencyCallConnectionStateChanged(eq(TELECOM_CALL_ID1),
eq(android.telecom.Connection.STATE_ACTIVE));
@@ -3017,7 +3085,7 @@
// state change not notified any more after CONNECTED once
verify(mEmergencyStateTracker, times(1)).onEmergencyCallStateChanged(
- any(), eq(TELECOM_CALL_ID1));
+ any(), eq(c));
verify(mSatelliteSOSMessageRecommender, times(1))
.onEmergencyCallConnectionStateChanged(eq(TELECOM_CALL_ID1), anyInt());
@@ -3029,7 +3097,7 @@
// state change not notified any more after CONNECTED once
verify(mEmergencyStateTracker, times(1)).onEmergencyCallStateChanged(
- any(), eq(TELECOM_CALL_ID1));
+ any(), eq(c));
verify(mSatelliteSOSMessageRecommender, times(1))
.onEmergencyCallConnectionStateChanged(eq(TELECOM_CALL_ID1), anyInt());
@@ -3041,7 +3109,7 @@
// domain change notified
verify(mEmergencyStateTracker, times(1)).onEmergencyCallDomainUpdated(
- eq(PhoneConstants.PHONE_TYPE_GSM), eq(TELECOM_CALL_ID1));
+ eq(PhoneConstants.PHONE_TYPE_GSM), eq(c));
// state change to DISCONNECTED
c.setDisconnected(null);
@@ -3051,7 +3119,7 @@
// state change not notified
verify(mEmergencyStateTracker, times(1)).onEmergencyCallStateChanged(
- any(), eq(TELECOM_CALL_ID1));
+ any(), eq(c));
verify(mSatelliteSOSMessageRecommender, times(1))
.onEmergencyCallConnectionStateChanged(eq(TELECOM_CALL_ID1), anyInt());
}
@@ -3068,15 +3136,24 @@
createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+ 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), eq(TELECOM_CALL_ID1), eq(false));
+ .startEmergencyCall(eq(mPhone0), connectionCaptor.capture(), eq(false));
verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
verify(mPhone0).dial(anyString(), any(), any());
+ android.telecom.Connection tc = connectionCaptor.getValue();
+
+ assertNotNull(tc);
+ assertEquals(TELECOM_CALL_ID1, tc.getTelecomCallId());
+ assertEquals(mTestConnectionService.getEmergencyConnection(), tc);
+
TestTelephonyConnection c = new TestTelephonyConnection();
- c.setTelecomCallId(TELECOM_CALL_ID1);
+ mTestConnectionService.setEmergencyConnection(c);
c.setIsImsConnection(true);
Connection orgConn = c.getOriginalConnection();
doReturn(PhoneConstants.PHONE_TYPE_IMS).when(orgConn).getPhoneType();
@@ -3088,18 +3165,18 @@
connectionListener.onConnectionPropertiesChanged(c, PROPERTY_WIFI);
verify(mEmergencyStateTracker, times(0)).onEmergencyCallPropertiesChanged(
- anyInt(), anyString());
+ anyInt(), any());
doReturn(Call.State.ACTIVE).when(orgConn).getState();
connectionListener.onConnectionPropertiesChanged(c, PROPERTY_WIFI);
verify(mEmergencyStateTracker, times(1)).onEmergencyCallPropertiesChanged(
- eq(PROPERTY_WIFI), eq(TELECOM_CALL_ID1));
+ eq(PROPERTY_WIFI), eq(c));
connectionListener.onConnectionPropertiesChanged(c, 0);
verify(mEmergencyStateTracker, times(1)).onEmergencyCallPropertiesChanged(
- eq(0), eq(TELECOM_CALL_ID1));
+ eq(0), eq(c));
}
@Test
@@ -3553,6 +3630,7 @@
private TestTelephonyConnection setupForReDialForDomainSelection(
Phone mockPhone, int domain, int preciseDisconnectCause,
int disconnectCause, boolean fromEmergency) throws Exception {
+ TestTelephonyConnection c = new TestTelephonyConnection();
try {
if (fromEmergency) {
doReturn(CompletableFuture.completedFuture(domain))
@@ -3561,8 +3639,8 @@
replaceInstance(TelephonyConnectionService.class,
"mEmergencyCallDomainSelectionConnection",
mTestConnectionService, mEmergencyCallDomainSelectionConnection);
- replaceInstance(TelephonyConnectionService.class, "mEmergencyCallId",
- mTestConnectionService, TELECOM_CALL_ID1);
+ replaceInstance(TelephonyConnectionService.class, "mEmergencyConnection",
+ mTestConnectionService, c);
} else {
doReturn(CompletableFuture.completedFuture(domain))
.when(mNormalCallDomainSelectionConnection).reselectDomain(any());
@@ -3576,7 +3654,6 @@
doReturn(true).when(mDomainSelectionResolver).isDomainSelectionSupported();
- TestTelephonyConnection c = new TestTelephonyConnection();
c.setTelecomCallId(TELECOM_CALL_ID1);
c.setMockPhone(mockPhone);
c.setAddress(TEST_ADDRESS, TelecomManager.PRESENTATION_ALLOWED);