Support checking emergency mode for satellite
Bug: 347111120
Test: manual system tests
Change-Id: Id2809adad9d49ba72fc9b65647229efbc4575140
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index 6cee1b2..f826f0b 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -425,6 +425,11 @@
private long mWaitTimeForSatelliteEnablingResponse;
private long mDemoPointingAlignedDurationMillis;
private long mDemoPointingNotAlignedDurationMillis;
+ private final Object mLock = new Object();
+ @GuardedBy("mLock")
+ private long mLastEmergencyCallTime;
+ private long mSatelliteEmergencyModeDurationMillis;
+ private static final int DEFAULT_SATELLITE_EMERGENCY_MODE_DURATION_SECONDS = 300;
/** Key used to read/write satellite system notification done in shared preferences. */
private static final String SATELLITE_SYSTEM_NOTIFICATION_DONE_KEY =
@@ -570,6 +575,8 @@
mDemoPointingAlignedDurationMillis = getDemoPointingAlignedDurationMillisFromResources();
mDemoPointingNotAlignedDurationMillis =
getDemoPointingNotAlignedDurationMillisFromResources();
+ mSatelliteEmergencyModeDurationMillis =
+ getSatelliteEmergencyModeDurationFromOverlayConfig(context);
}
/**
@@ -4980,4 +4987,41 @@
// Also turn off persisted logging until new session is started
loggerBackend.setLoggingEnabled(false);
}
+
+ /**
+ * Set last emergency call time to the current time.
+ */
+ public void setLastEmergencyCallTime() {
+ synchronized (mLock) {
+ mLastEmergencyCallTime = getElapsedRealtime();
+ plogd("mLastEmergencyCallTime=" + mLastEmergencyCallTime);
+ }
+ }
+
+ /**
+ * Check if satellite is in emergency mode.
+ */
+ public boolean isInEmergencyMode() {
+ synchronized (mLock) {
+ if (mLastEmergencyCallTime == 0) return false;
+
+ long currentTime = getElapsedRealtime();
+ if ((currentTime - mLastEmergencyCallTime) <= mSatelliteEmergencyModeDurationMillis) {
+ plogd("Satellite is in emergency mode");
+ return true;
+ }
+ return false;
+ }
+ }
+
+ private long getSatelliteEmergencyModeDurationFromOverlayConfig(@NonNull Context context) {
+ Integer duration = DEFAULT_SATELLITE_EMERGENCY_MODE_DURATION_SECONDS;
+ try {
+ duration = context.getResources().getInteger(com.android.internal.R.integer
+ .config_satellite_emergency_mode_duration);
+ } catch (Resources.NotFoundException ex) {
+ ploge("getSatelliteEmergencyModeDurationFromOverlayConfig: got ex=" + ex);
+ }
+ return TimeUnit.SECONDS.toMillis(duration);
+ }
}
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
index bc6a79c..3fe2970 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
@@ -243,6 +243,8 @@
}
private void handleEmergencyCallStartedEvent(@NonNull Connection connection) {
+ mSatelliteController.setLastEmergencyCallTime();
+
if (sendEventDisplayEmergencyMessageForcefully(connection)) {
return;
}
@@ -344,6 +346,7 @@
private void handleEmergencyCallConnectionStateChangedEvent(
@NonNull Pair<String, Integer> arg) {
+ mSatelliteController.setLastEmergencyCallTime();
if (mEmergencyConnection == null) {
// Either the call was not created or the timer already timed out.
return;