diff options
author | 2025-03-16 04:16:45 -0700 | |
---|---|---|
committer | 2025-03-16 04:16:45 -0700 | |
commit | a098ad4b16e59dea552b9255a96d71252084e009 (patch) | |
tree | 7c4a0c99ea84c50a7e3f081d4855d2133eb2e3a3 /src | |
parent | 32ab53f9754a3cda5988ee146c877227093194c0 (diff) | |
parent | e2174101b14da57b167eadcd573f4cf4b244c1a8 (diff) |
Merge "Add cross stack redialing during emergency call" into main
Diffstat (limited to 'src')
-rw-r--r-- | src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java b/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java index 3c95d77afc..ee00e45dca 100644 --- a/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java +++ b/src/java/com/android/internal/telephony/emergency/EmergencyStateTracker.java @@ -312,8 +312,24 @@ public class EmergencyStateTracker { maybeNotifyTransportChangeCompleted(emergencyType, false); if (emergencyType == EMERGENCY_TYPE_CALL) { - setIsInEmergencyCall(true); - completeEmergencyMode(emergencyType); + // If the emergency registration result(mLastEmergencyRegistrationResult) is + // null, it means that the emergency mode is not set properly on the modem. + // Therefore, based on the emergency registration result and current + // subscription status, the current phone is not available for an emergency + // call, so we check if an emergency call is possible through cross stack. + if (mFeatureFlags.performCrossStackRedialCheckForEmergencyCall() + && mLastEmergencyRegistrationResult == null + && mPhone != null + && !SubscriptionManager.isValidSubscriptionId(mPhone.getSubId()) + && needToSwitchPhone(mPhone)) { + Rlog.i(TAG, "setEmergencyMode failed: need to switch stacks."); + mEmergencyMode = MODE_EMERGENCY_NONE; + completeEmergencyMode(emergencyType, + DisconnectCause.EMERGENCY_PERM_FAILURE); + } else { + setIsInEmergencyCall(true); + completeEmergencyMode(emergencyType); + } // Case 1) When the emergency call is setting the emergency mode and // the emergency SMS is being sent, completes the SMS future also. @@ -861,23 +877,25 @@ public class EmergencyStateTracker { private void completeEmergencyMode(@EmergencyType int emergencyType, @DisconnectCauses int result) { + CompletableFuture<Integer> emergencyModeFuture = null; + if (emergencyType == EMERGENCY_TYPE_CALL) { - if (mCallEmergencyModeFuture != null && !mCallEmergencyModeFuture.isDone()) { - mCallEmergencyModeFuture.complete(result); - } + emergencyModeFuture = mCallEmergencyModeFuture; if (result != DisconnectCause.NOT_DISCONNECTED) { clearEmergencyCallInfo(); } } else if (emergencyType == EMERGENCY_TYPE_SMS) { - if (mSmsEmergencyModeFuture != null && !mSmsEmergencyModeFuture.isDone()) { - mSmsEmergencyModeFuture.complete(result); - } + emergencyModeFuture = mSmsEmergencyModeFuture; if (result != DisconnectCause.NOT_DISCONNECTED) { clearEmergencySmsInfo(); } } + + if (emergencyModeFuture != null && !emergencyModeFuture.isDone()) { + emergencyModeFuture.complete(result); + } } /** |