Merge "Add exception handling for radio power off during emergency call" into main
diff --git a/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java b/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java
index b3e8095..957b427 100644
--- a/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java
+++ b/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java
@@ -1251,9 +1251,14 @@
exitEmergencyMode(gsmCdmaPhone, EMERGENCY_TYPE_CALL);
}
- mEmergencyCallDomain = NetworkRegistrationInfo.DOMAIN_UNKNOWN;
- mIsTestEmergencyNumber = false;
- mPhone = null;
+ // If an emergency call is in progress, even if this method is called for any reason,
+ // we should not initialize the Phone object so that the application can normally end
+ // the emergency call.
+ if (mOngoingConnection == null) {
+ mEmergencyCallDomain = NetworkRegistrationInfo.DOMAIN_UNKNOWN;
+ mIsTestEmergencyNumber = false;
+ mPhone = null;
+ }
}
private void releaseWakeLock() {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java
index 9253fbf..fe586f9 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyStateTrackerTest.java
@@ -1115,6 +1115,32 @@
@Test
@SmallTest
+ public void testEndCallAfterExitEmergencyCallbackModeIsCalledInNonEcbm() throws Exception {
+ // Setup EmergencyStateTracker
+ EmergencyStateTracker emergencyStateTracker = setupEmergencyStateTracker(
+ /* isSuplDdsSwitchRequiredForEmergencyCall= */ true);
+ // Create test Phone
+ GsmCdmaPhone testPhone = (GsmCdmaPhone) setupTestPhoneForEmergencyCall(
+ /* isRoaming= */ true, /* isRadioOn= */ true);
+ setUpAsyncResultForSetEmergencyMode(testPhone, E_REG_RESULT);
+ setUpAsyncResultForExitEmergencyMode(testPhone);
+ // Start emergency call then enter ECM
+ CompletableFuture<Integer> unused = emergencyStateTracker.startEmergencyCall(testPhone,
+ mTestConnection1, false);
+ processAllMessages();
+
+ // Exit emergency mode explicitly
+ emergencyStateTracker.exitEmergencyCallbackMode();
+
+ emergencyStateTracker.endCall(mTestConnection1);
+ processAllMessages();
+
+ // Verify exitEmergencyMode() is called.
+ verify(testPhone).exitEmergencyMode(any(Message.class));
+ }
+
+ @Test
+ @SmallTest
public void testRecoverNormalInCellularWhenVoWiFiConnected() {
EmergencyStateTracker emergencyStateTracker = setupEmergencyStateTracker(
/* isSuplDdsSwitchRequiredForEmergencyCall= */ true);