Merge "Make RadioOnStateListener complete after discarding the dialing" into 24D1-dev am: 573dc3c789

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Telephony/+/26900175

Change-Id: Iaabf2c3220fb7f1b6bbec595d19274408d523cbc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index f71ea9a..df87d4e 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -1197,6 +1197,11 @@
                             && phone.getHalVersion(HAL_SERVICE_VOICE)
                             .less(RIL.RADIO_HAL_VERSION_1_4);
                     if (mDomainSelectionResolver.isDomainSelectionSupported()) {
+                        if (resultConnection != null
+                                && resultConnection.getState() == Connection.STATE_DISCONNECTED) {
+                            // Dialing is discarded.
+                            return true;
+                        }
                         if (isEmergencyNumber && phone == phoneForEmergency) {
                             // Since the domain selection service is enabled,
                             // dilaing normal routing emergency number only reaches here.
@@ -1400,6 +1405,11 @@
             Log.i(this, "Call disconnected before the outgoing call was placed. Skipping call "
                     + "placement.");
             if (isEmergencyNumber) {
+                if (mDomainSelectionResolver.isDomainSelectionSupported()
+                        && mDeviceState.isAirplaneModeOn(this)) {
+                    mIsEmergencyCallPending = false;
+                    return;
+                }
                 // If call is already canceled by the user, notify modem to exit emergency call
                 // mode by sending radio on with forEmergencyCall=false.
                 for (Phone curPhone : mPhoneFactoryProxy.getPhones()) {
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index 2b805c3..435601f 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -2767,6 +2767,23 @@
     }
 
     @Test
+    public void testDomainSelectionNormalRoutingEmergencyNumber_exitingApm_DiscardDialing()
+            throws Exception {
+        when(mDeviceState.isAirplaneModeOn(any())).thenReturn(true);
+        Phone testPhone = setupConnectionServiceInApmForDomainSelection(true);
+
+        ArgumentCaptor<RadioOnStateListener.Callback> callback =
+                ArgumentCaptor.forClass(RadioOnStateListener.Callback.class);
+        verify(mRadioOnHelper).triggerRadioOnAndListen(callback.capture(), eq(true),
+                eq(testPhone), eq(false), eq(TIMEOUT_TO_DYNAMIC_ROUTING_MS));
+
+        mConnection.setDisconnected(null);
+
+        assertTrue(callback.getValue()
+                .isOkToCall(testPhone, ServiceState.STATE_POWER_OFF, false));
+    }
+
+    @Test
     public void testDomainSelectionNormalToEmergencyCs() throws Exception {
         setupForCallTest();