Merge "Added send satellite datagram."
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 31221af..b1857de 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -593,37 +593,36 @@
new DomainSelectionConnection.DomainSelectionConnectionCallback() {
@Override
public void onSelectionTerminated(@DisconnectCauses int cause) {
- if (mEmergencyCallDomainSelectionConnection != null) {
+ mDomainSelectionMainExecutor.execute(() -> {
Log.i(this, "onSelectionTerminated cause=" + cause);
+ if (mEmergencyCallDomainSelectionConnection == null) {
+ Log.i(this, "onSelectionTerminated no DomainSelectionConnection");
+ return;
+ }
// Cross stack redial
if (cause == android.telephony.DisconnectCause.EMERGENCY_TEMP_FAILURE
|| cause == android.telephony.DisconnectCause.EMERGENCY_PERM_FAILURE) {
if (mEmergencyConnection != null) {
- final boolean isPermanentFailure =
+ boolean isPermanentFailure =
cause == android.telephony.DisconnectCause.EMERGENCY_PERM_FAILURE;
- Log.i(this, "onSelectionTerminated trigger cross stack redial"
- + " permanent=" + isPermanentFailure);
- mDomainSelectionMainExecutor.execute(() -> {
- Log.i(this, "onSelectionTerminated execute cross stack redial"
- + " permanent=" + isPermanentFailure);
- TelephonyConnection c = mEmergencyConnection;
- Phone phone = mEmergencyCallDomainSelectionConnection.getPhone();
- mEmergencyConnection.removeTelephonyConnectionListener(
- mEmergencyConnectionListener);
- releaseEmergencyCallDomainSelection(true);
- mEmergencyStateTracker.endCall(mEmergencyCallId);
- retryOutgoingOriginalConnection(c, phone, isPermanentFailure);
- });
+ Log.i(this, "onSelectionTerminated permanent=" + isPermanentFailure);
+ TelephonyConnection c = mEmergencyConnection;
+ Phone phone = mEmergencyCallDomainSelectionConnection.getPhone();
+ mEmergencyConnection.removeTelephonyConnectionListener(
+ mEmergencyConnectionListener);
+ releaseEmergencyCallDomainSelection(true);
+ mEmergencyStateTracker.endCall(mEmergencyCallId);
+ mEmergencyCallId = null;
+ retryOutgoingOriginalConnection(c, phone, isPermanentFailure);
return;
}
}
- mEmergencyCallDomainSelectionConnection = null;
if (mEmergencyConnection != null) {
mEmergencyConnection.hangup(android.telephony.DisconnectCause.OUT_OF_NETWORK);
mEmergencyConnection = null;
}
- }
+ });
}
};
@@ -2387,7 +2386,7 @@
c.removeTelephonyConnectionListener(mEmergencyConnectionListener);
releaseEmergencyCallDomainSelection(true);
mEmergencyStateTracker.endCall(c.getTelecomCallId());
-
+ mEmergencyCallId = null;
return false;
}
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index 61060d9..4826d89 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -18,6 +18,7 @@
import static android.telephony.DisconnectCause.EMERGENCY_PERM_FAILURE;
import static android.telephony.DisconnectCause.EMERGENCY_TEMP_FAILURE;
+import static android.telephony.DisconnectCause.ERROR_UNSPECIFIED;
import static android.telephony.DisconnectCause.NOT_DISCONNECTED;
import static android.telephony.DomainSelectionService.SELECTOR_TYPE_CALLING;
import static android.telephony.NetworkRegistrationInfo.DOMAIN_CS;
@@ -1952,6 +1953,40 @@
}
@Test
+ public void testOnSelectionTerminatedUnspecified() throws Exception {
+ setupForCallTest();
+
+ doReturn(mEmergencyCallDomainSelectionConnection).when(mDomainSelectionResolver)
+ .getDomainSelectionConnection(any(), anyInt(), eq(true));
+ doReturn(mPhone0).when(mEmergencyCallDomainSelectionConnection).getPhone();
+ doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+
+ doReturn(true).when(mDomainSelectionResolver).isDomainSelectionSupported();
+ doReturn(mImsPhone).when(mPhone0).getImsPhone();
+
+ mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+ createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+ TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+ ArgumentCaptor<DomainSelectionConnection.DomainSelectionConnectionCallback> callbackCaptor =
+ ArgumentCaptor.forClass(
+ DomainSelectionConnection.DomainSelectionConnectionCallback.class);
+
+ verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(
+ any(), callbackCaptor.capture());
+
+ DomainSelectionConnection.DomainSelectionConnectionCallback callback =
+ callbackCaptor.getValue();
+
+ assertNotNull(callback);
+
+ callback.onSelectionTerminated(ERROR_UNSPECIFIED);
+
+ verify(mEmergencyCallDomainSelectionConnection).cancelSelection();
+ verify(mEmergencyStateTracker).endCall(eq(TELECOM_CALL_ID1));
+ }
+
+ @Test
public void testDomainSelectionLocalHangupStartEmergencyCall() throws Exception {
setupForCallTest();