Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10b5c363 authored by Thomas Nguyen's avatar Thomas Nguyen
Browse files

Support checking emergency mode for satellite

Bug: 347111120
Test: manual system tests - more details in b/347254038

Change-Id: Id2809adad9d49ba72fc9b65647229efbc4575140
Merged-In: Id2809adad9d49ba72fc9b65647229efbc4575140
parent dd991040
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -425,6 +425,11 @@ public class SatelliteController extends Handler {
    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 @@ public class SatelliteController extends Handler {
        mDemoPointingAlignedDurationMillis = getDemoPointingAlignedDurationMillisFromResources();
        mDemoPointingNotAlignedDurationMillis =
                getDemoPointingNotAlignedDurationMillisFromResources();
        mSatelliteEmergencyModeDurationMillis =
                getSatelliteEmergencyModeDurationFromOverlayConfig(context);
    }

    /**
@@ -4938,4 +4945,41 @@ public class SatelliteController extends Handler {
        // 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);
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -240,6 +240,8 @@ public class SatelliteSOSMessageRecommender extends Handler {
    }

    private void handleEmergencyCallStartedEvent(@NonNull Connection connection) {
        mSatelliteController.setLastEmergencyCallTime();

        if (sendEventDisplayEmergencyMessageForcefully(connection)) {
            return;
        }
@@ -341,6 +343,7 @@ public class SatelliteSOSMessageRecommender extends Handler {

    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;