Loading src/java/com/android/internal/telephony/emergency/RadioOnHelper.java +4 −1 Original line number Diff line number Diff line Loading @@ -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); } } Loading src/java/com/android/internal/telephony/satellite/DatagramController.java +6 −0 Original line number Diff line number Diff line Loading @@ -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. Loading src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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, Loading @@ -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()) { Loading src/java/com/android/internal/telephony/satellite/SatelliteController.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. * Loading Loading @@ -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, Loading tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -332,6 +335,7 @@ public class DatagramDispatcherTest extends TelephonyTest { assertFalse(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted()); verify(mMockSessionMetricsStats, times(1)) .addCountOfFailedOutgoingDatagram(anyInt(), anyInt()); assertFalse(mDatagramDispatcherUT.isEmergencyCommunicationEstablished()); } } Loading Loading
src/java/com/android/internal/telephony/emergency/RadioOnHelper.java +4 −1 Original line number Diff line number Diff line Loading @@ -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); } } Loading
src/java/com/android/internal/telephony/satellite/DatagramController.java +6 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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, Loading @@ -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()) { Loading
src/java/com/android/internal/telephony/satellite/SatelliteController.java +15 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. * Loading Loading @@ -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, Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -332,6 +335,7 @@ public class DatagramDispatcherTest extends TelephonyTest { assertFalse(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted()); verify(mMockSessionMetricsStats, times(1)) .addCountOfFailedOutgoingDatagram(anyInt(), anyInt()); assertFalse(mDatagramDispatcherUT.isEmergencyCommunicationEstablished()); } } Loading