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

Commit 811933be authored by Ling Ma's avatar Ling Ma Committed by Android (Google) Code Review
Browse files

Merge "Add satellite_roaming_turn_off_for_emergency_call_bool" into main

parents 4e0d9bca f1695452
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -104,7 +104,10 @@ public class RadioOnHelper implements RadioOnStateListener.Callback {
        }
        powerOnRadio(forEmergencyCall, phoneForEmergencyCall, isTestEmergencyNumber,
                forNormalRoutingEmergencyCall);
        if (SatelliteController.getInstance().isSatelliteEnabled()) {
        if (SatelliteController.getInstance().isSatelliteEnabled()
                || SatelliteController.getInstance().isSatelliteBeingEnabled()) {
            // TODO: phoneForEmergencyCall is actually ignored, SatelliteController#mSatelliePhone
            //  is being used instead.
            powerOffSatellite(phoneForEmergencyCall);
        }
    }
+6 −0
Original line number Diff line number Diff line
@@ -344,6 +344,12 @@ public class DatagramController {
        return mReceivePendingCount;
    }


    /** @return {@code true} if already sent an emergency datagram during a session. */
    public boolean isEmergencyCommunicationEstablished() {
        return mDatagramDispatcher.isEmergencyCommunicationEstablished();
    }

    /**
     * This function is used by {@link SatelliteController} to notify {@link DatagramController}
     * that satellite modem state has changed.
+15 −0
Original line number Diff line number Diff line
@@ -95,6 +95,10 @@ public class DatagramDispatcher extends Handler {
    private final Object mLock = new Object();
    private long mDemoTimeoutDuration = TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE;

    /** {@code true} if already sent an emergency datagram during a session */
    @GuardedBy("mLock")
    private boolean mIsEmergencyCommunicationEstablished = false;

    @GuardedBy("mLock")
    private boolean mSendingInProgress;

@@ -310,6 +314,9 @@ public class DatagramDispatcher extends Handler {
                    // Remove current datagram from pending map.
                    if (SatelliteServiceUtils.isSosMessage(argument.datagramType)) {
                        mPendingEmergencyDatagramsMap.remove(argument.datagramId);
                        if (error == SATELLITE_RESULT_SUCCESS) {
                            mIsEmergencyCommunicationEstablished = true;
                        }
                    } else {
                        mPendingNonEmergencyDatagramsMap.remove(argument.datagramId);
                    }
@@ -772,6 +779,7 @@ public class DatagramDispatcher extends Handler {
    private void cleanUpResources() {
        plogd("cleanUpResources");
        mSendingInProgress = false;
        mIsEmergencyCommunicationEstablished = false;
        if (getPendingMessagesCount() > 0) {
            mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
                    mLastSendRequestDatagramType,
@@ -795,6 +803,13 @@ public class DatagramDispatcher extends Handler {
        mLastSendRequestDatagramType = DATAGRAM_TYPE_UNKNOWN;
    }

    /** @return {@code true} if already sent an emergency datagram during a session. */
    public boolean isEmergencyCommunicationEstablished() {
        synchronized (mLock) {
            return mIsEmergencyCommunicationEstablished;
        }
    }

    private void startDatagramWaitForConnectedStateTimer(
            @SatelliteManager.DatagramType int datagramType) {
        if (isDatagramWaitForConnectedStateTimerStarted()) {
+15 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ESOS_SUPPORTE
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_NIDD_APN_NAME_STRING;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_P2P_SMS_INACTIVITY_TIMEOUT_SEC_INT;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ROAMING_P2P_SMS_SUPPORTED_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ROAMING_TURN_OFF_SESSION_FOR_EMERGENCY_CALL_BOOL;
import static android.telephony.CarrierConfigManager.KEY_SATELLITE_SCREEN_OFF_INACTIVITY_TIMEOUT_SEC_INT;
import static android.telephony.SubscriptionManager.SATELLITE_ATTACH_ENABLED_FOR_CARRIER;
import static android.telephony.SubscriptionManager.SATELLITE_ENTITLEMENT_STATUS;
@@ -3244,6 +3245,19 @@ public class SatelliteController extends Handler {
        }
    }

    /**
     * @return {@code true} if should exit satellite mode unless already sent a datagram in this
     * esos session.
     */
    public boolean shouldTurnOffCarrierSatelliteForEmergencyCall() {
        synchronized (mSatellitePhoneLock) {
            if (mSatellitePhone == null) return false;
            return !mDatagramController.isEmergencyCommunicationEstablished()
                    && getConfigForSubId(mSatellitePhone.getSubId()).getBoolean(
                    KEY_SATELLITE_ROAMING_TURN_OFF_SESSION_FOR_EMERGENCY_CALL_BOOL);
        }
    }

    /**
     * Return whether the satellite request is for an emergency or not.
     *
@@ -4342,6 +4356,7 @@ public class SatelliteController extends Handler {
            config = mCarrierConfigManager.getConfigForSubId(subId,
                    KEY_CARRIER_SUPPORTED_SATELLITE_SERVICES_PER_PROVIDER_BUNDLE,
                    KEY_SATELLITE_ATTACH_SUPPORTED_BOOL,
                    KEY_SATELLITE_ROAMING_TURN_OFF_SESSION_FOR_EMERGENCY_CALL_BOOL,
                    KEY_SATELLITE_CONNECTION_HYSTERESIS_SEC_INT,
                    KEY_SATELLITE_ENTITLEMENT_SUPPORTED_BOOL,
                    KEY_CARRIER_ROAMING_SATELLITE_DEFAULT_SERVICES_INT_ARRAY,
+4 −0
Original line number Diff line number Diff line
@@ -321,6 +321,9 @@ public class DatagramDispatcherTest extends TelephonyTest {
                    eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
            assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
            assertEquals(0, mResultListener.size());
            if (datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) {
                assertTrue(mDatagramDispatcherUT.isEmergencyCommunicationEstablished());
            }

            mDatagramDispatcherUT.onSatelliteModemStateChanged(
                    SatelliteManager.SATELLITE_MODEM_STATE_OFF);
@@ -332,6 +335,7 @@ public class DatagramDispatcherTest extends TelephonyTest {
            assertFalse(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfFailedOutgoingDatagram(anyInt(), anyInt());
            assertFalse(mDatagramDispatcherUT.isEmergencyCommunicationEstablished());
        }
    }

Loading