summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author Hwangoo Park <hwangoo@google.com> 2025-03-16 04:16:45 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-16 04:16:45 -0700
commita098ad4b16e59dea552b9255a96d71252084e009 (patch)
tree7c4a0c99ea84c50a7e3f081d4855d2133eb2e3a3 /src
parent32ab53f9754a3cda5988ee146c877227093194c0 (diff)
parente2174101b14da57b167eadcd573f4cf4b244c1a8 (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.java34
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);
+ }
}
/**