Merge "add overlay configs for last sos message connect and response timeout." into 24D1-dev am: 58fb0cd3cb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/27430978
Change-Id: I2a60878e0bedf66adf2892314cfe85fa62fd79b5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/java/com/android/internal/telephony/satellite/DatagramController.java b/src/java/com/android/internal/telephony/satellite/DatagramController.java
index 2f18796..8271187 100644
--- a/src/java/com/android/internal/telephony/satellite/DatagramController.java
+++ b/src/java/com/android/internal/telephony/satellite/DatagramController.java
@@ -105,6 +105,7 @@
private long mDatagramWaitTimeForConnectedState;
private long mModemImageSwitchingDuration;
private boolean mWaitForDeviceAlignmentInDemoDatagram;
+ private long mDatagramWaitTimeForConnectedStateForLastMessage;
@GuardedBy("mLock")
@SatelliteManager.SatelliteModemState
private int mSatelltieModemState = SatelliteManager.SATELLITE_MODEM_STATE_UNKNOWN;
@@ -161,6 +162,8 @@
mModemImageSwitchingDuration = getSatelliteModemImageSwitchingDurationMillis();
mWaitForDeviceAlignmentInDemoDatagram =
getWaitForDeviceAlignmentInDemoDatagramFromResources();
+ mDatagramWaitTimeForConnectedStateForLastMessage =
+ getDatagramWaitForConnectedStateForLastMessageTimeoutMillis();
mDemoModeDatagramList = new ArrayList<>();
}
@@ -447,13 +450,17 @@
}
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
- public long getDatagramWaitTimeForConnectedState() {
+ public long getDatagramWaitTimeForConnectedState(boolean isLastSosMessage) {
synchronized (mLock) {
+ long timeout = isLastSosMessage ? mDatagramWaitTimeForConnectedStateForLastMessage :
+ mDatagramWaitTimeForConnectedState;
+ logd("getDatagramWaitTimeForConnectedState: isLastSosMessage=" + isLastSosMessage
+ + ", timeout=" + timeout + ", modemState=" + mSatelltieModemState);
if (mSatelltieModemState == SATELLITE_MODEM_STATE_OFF
|| mSatelltieModemState == SATELLITE_MODEM_STATE_IDLE) {
- return (mDatagramWaitTimeForConnectedState + mModemImageSwitchingDuration);
+ return (timeout + mModemImageSwitchingDuration);
}
- return mDatagramWaitTimeForConnectedState;
+ return timeout;
}
}
@@ -553,6 +560,11 @@
R.integer.config_satellite_modem_image_switching_duration_millis);
}
+ private long getDatagramWaitForConnectedStateForLastMessageTimeoutMillis() {
+ return mContext.getResources().getInteger(
+ R.integer.config_datagram_wait_for_connected_state_for_last_message_timeout_millis);
+ }
+
/**
* This API can be used by only CTS to override the cached value for the device overlay config
* value : config_send_satellite_datagram_to_modem_in_demo_mode, which determines whether
diff --git a/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java b/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
index f764b2b..3984a5f 100644
--- a/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
+++ b/src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java
@@ -104,6 +104,7 @@
mPendingNonEmergencyDatagramsMap = new LinkedHashMap<>();
private long mWaitTimeForDatagramSendingResponse;
+ private long mWaitTimeForDatagramSendingForLastMessageResponse;
@SatelliteManager.DatagramType
private int mLastSendRequestDatagramType = DATAGRAM_TYPE_UNKNOWN;
@@ -142,6 +143,8 @@
mSendingDatagramInProgress = false;
}
mWaitTimeForDatagramSendingResponse = getWaitForDatagramSendingResponseTimeoutMillis();
+ mWaitTimeForDatagramSendingForLastMessageResponse =
+ getWaitForDatagramSendingResponseForLastMessageTimeoutMillis();
}
private static final class DatagramDispatcherHandlerRequest {
@@ -680,7 +683,8 @@
}
sendMessageDelayed(obtainMessage(
EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT, datagramArgs),
- mDatagramController.getDatagramWaitTimeForConnectedState());
+ mDatagramController.getDatagramWaitTimeForConnectedState(
+ SatelliteServiceUtils.isLastSosMessage(datagramArgs.datagramType)));
}
private void stopDatagramWaitForConnectedStateTimer() {
@@ -709,9 +713,13 @@
logd("WaitForDatagramSendingResponseTimer was already started");
return;
}
+ long waitTime = SatelliteServiceUtils.isLastSosMessage(argument.datagramType)
+ ? mWaitTimeForDatagramSendingForLastMessageResponse
+ : mWaitTimeForDatagramSendingResponse;
+ logd("startWaitForDatagramSendingResponseTimer: datagramType=" + argument.datagramType
+ + ", waitTime=" + waitTime);
sendMessageDelayed(obtainMessage(
- EVENT_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_TIMED_OUT, argument),
- mWaitTimeForDatagramSendingResponse);
+ EVENT_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_TIMED_OUT, argument), waitTime);
}
private void stopWaitForDatagramSendingResponseTimer() {
@@ -760,6 +768,11 @@
R.integer.config_wait_for_datagram_sending_response_timeout_millis);
}
+ private long getWaitForDatagramSendingResponseForLastMessageTimeoutMillis() {
+ return mContext.getResources().getInteger(R.integer
+ .config_wait_for_datagram_sending_response_for_last_message_timeout_millis);
+ }
+
private boolean shouldProcessEventSendSatelliteDatagramDone(
@NonNull SendSatelliteDatagramArgument argument) {
synchronized (mLock) {
diff --git a/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java b/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java
index f1f0fde..21e4318 100644
--- a/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java
+++ b/src/java/com/android/internal/telephony/satellite/DatagramReceiver.java
@@ -818,7 +818,7 @@
}
sendMessageDelayed(obtainMessage(
EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT),
- mDatagramController.getDatagramWaitTimeForConnectedState());
+ mDatagramController.getDatagramWaitTimeForConnectedState(false));
}
private void stopDatagramWaitForConnectedStateTimer() {
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
index 67b2586..d33fd73 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteServiceUtils.java
@@ -347,7 +347,9 @@
}
/**
- *
+ * Check if the datagramType is the sos message (DATAGRAM_TYPE_SOS_MESSAGE,
+ * DATAGRAM_TYPE_LAST_SOS_MESSAGE_STILL_NEED_HELP,
+ * DATAGRAM_TYPE_LAST_SOS_MESSAGE_NO_HELP_NEEDED) or not
*/
public static boolean isSosMessage(int datagramType) {
return datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE
@@ -356,6 +358,16 @@
}
/**
+ * Check if the datagramType is the last sos message
+ * (DATAGRAM_TYPE_LAST_SOS_MESSAGE_STILL_NEED_HELP or
+ * DATAGRAM_TYPE_LAST_SOS_MESSAGE_NO_HELP_NEEDED) or not
+ */
+ public static boolean isLastSosMessage(int datagramType) {
+ return datagramType == SatelliteManager.DATAGRAM_TYPE_LAST_SOS_MESSAGE_STILL_NEED_HELP
+ || datagramType == SatelliteManager.DATAGRAM_TYPE_LAST_SOS_MESSAGE_NO_HELP_NEEDED;
+ }
+
+ /**
* Return phone associated with phoneId 0.
*
* @return phone associated with phoneId 0 or {@code null} if it doesn't exist.
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
index 4896671..dba288e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java
@@ -98,6 +98,12 @@
private static final long TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS =
TimeUnit.SECONDS.toMillis(60);
private static final Long TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE = TimeUnit.SECONDS.toMillis(10);
+ private static final long
+ TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_FOR_LAST_MESSAGE_TIMEOUT_MILLIS =
+ TimeUnit.SECONDS.toMillis(60);
+ private static final int
+ TEST_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_FOR_LAST_MESSAGE_TIMEOUT_MILLIS =
+ (int) TimeUnit.SECONDS.toMillis(60);
private TestDatagramDispatcher mDatagramDispatcherUT;
@@ -188,8 +194,11 @@
clearInvocations(mMockSatelliteModemInterface);
doReturn(true).when(mMockDatagramController)
.needsWaitingForSatelliteConnected(eq(datagramType));
- when(mMockDatagramController.getDatagramWaitTimeForConnectedState())
+ when(mMockDatagramController.getDatagramWaitTimeForConnectedState(eq(false)))
.thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS);
+ when(mMockDatagramController.getDatagramWaitTimeForConnectedState(eq(true)))
+ .thenReturn(
+ TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_FOR_LAST_MESSAGE_TIMEOUT_MILLIS);
mResultListener.clear();
mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
@@ -201,7 +210,8 @@
eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT),
eq(1),
eq(SATELLITE_RESULT_SUCCESS));
- mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState();
+ mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
+ eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
verifyZeroInteractions(mMockSatelliteModemInterface);
assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
@@ -247,7 +257,8 @@
verifyZeroInteractions(mMockSatelliteModemInterface);
mInOrder.verify(mMockDatagramController)
.needsWaitingForSatelliteConnected(eq(datagramType));
- mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState();
+ mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
+ eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS);
@@ -287,7 +298,8 @@
verifyZeroInteractions(mMockSatelliteModemInterface);
mInOrder.verify(mMockDatagramController)
.needsWaitingForSatelliteConnected(eq(datagramType));
- mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState();
+ mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(
+ eq(SatelliteServiceUtils.isLastSosMessage(datagramType)));
assertTrue(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
assertEquals(0, mResultListener.size());
@@ -305,86 +317,102 @@
@Test
public void testSendSatelliteDatagram_timeout() throws Exception {
- doAnswer(invocation -> {
- Message message = (Message) invocation.getArguments()[3];
-
- mDatagramDispatcherUT.obtainMessage(2 /*EVENT_SEND_SATELLITE_DATAGRAM_DONE*/,
- new AsyncResult(message.obj, null, null))
- .sendToTarget();
-
- // DatagramDispatcher should ignore the second EVENT_SEND_SATELLITE_DATAGRAM_DONE
- mDatagramDispatcherUT.obtainMessage(2 /*EVENT_SEND_SATELLITE_DATAGRAM_DONE*/,
- new AsyncResult(message.obj, null, null))
- .sendToTarget();
-
- return null;
- }).when(mMockSatelliteModemInterface).sendSatelliteDatagram(any(SatelliteDatagram.class),
- anyBoolean(), anyBoolean(), any(Message.class));
- doReturn(false).when(mMockDatagramController)
- .needsWaitingForSatelliteConnected(eq(DATAGRAM_TYPE1));
- when(mMockDatagramController.getDatagramWaitTimeForConnectedState())
+ when(mMockDatagramController.getDatagramWaitTimeForConnectedState(eq(false)))
.thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS);
+ when(mMockDatagramController.getDatagramWaitTimeForConnectedState(eq(true)))
+ .thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_FOR_LAST_MESSAGE_TIMEOUT_MILLIS);
mContextFixture.putIntResource(
R.integer.config_wait_for_datagram_sending_response_timeout_millis,
TEST_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_TIMEOUT_MILLIS);
+ mContextFixture.putIntResource(
+ R.integer.config_wait_for_datagram_sending_response_for_last_message_timeout_millis,
+ TEST_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_FOR_LAST_MESSAGE_TIMEOUT_MILLIS);
mResultListener.clear();
+ int[] sosDatagramTypes = {DATAGRAM_TYPE1, DATAGRAM_TYPE4, DATAGRAM_TYPE5};
+ for (int datagramType : sosDatagramTypes) {
+ doAnswer(invocation -> {
+ Message message = (Message) invocation.getArguments()[3];
- mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram,
- true, mResultListener::offer);
- processAllMessages();
- mInOrder.verify(mMockDatagramController)
- .needsWaitingForSatelliteConnected(eq(DATAGRAM_TYPE1));
- mInOrder.verify(mMockDatagramController).isPollingInIdleState();
- mInOrder.verify(mMockDatagramController)
- .updateSendStatus(eq(SUB_ID), eq(DATAGRAM_TYPE1),
- eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING), eq(1),
- eq(SATELLITE_RESULT_SUCCESS));
- mInOrder.verify(mMockDatagramController)
- .updateSendStatus(eq(SUB_ID), eq(DATAGRAM_TYPE1),
- eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS), eq(0),
- eq(SATELLITE_RESULT_SUCCESS));
- mInOrder.verify(mMockDatagramController)
- .updateSendStatus(eq(SUB_ID), eq(DATAGRAM_TYPE1),
- eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
- eq(SATELLITE_RESULT_SUCCESS));
- verifyNoMoreInteractions(mMockDatagramController);
- verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
- any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
- assertThat(mResultListener.peek()).isEqualTo(SATELLITE_RESULT_SUCCESS);
- verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
- clearInvocations(mMockSatelliteModemInterface);
- clearInvocations(mMockDatagramController);
- clearInvocations(mMockSessionMetricsStats);
- mResultListener.clear();
+ mDatagramDispatcherUT.obtainMessage(2 /*EVENT_SEND_SATELLITE_DATAGRAM_DONE*/,
+ new AsyncResult(message.obj, null, null))
+ .sendToTarget();
- // No response for the send request from modem
- doNothing().when(mMockSatelliteModemInterface).sendSatelliteDatagram(
- any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+ // DatagramDispatcher should ignore the second EVENT_SEND_SATELLITE_DATAGRAM_DONE
+ mDatagramDispatcherUT.obtainMessage(2 /*EVENT_SEND_SATELLITE_DATAGRAM_DONE*/,
+ new AsyncResult(message.obj, null, null))
+ .sendToTarget();
- mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram,
- true, mResultListener::offer);
- processAllMessages();
- mInOrder.verify(mMockDatagramController)
- .needsWaitingForSatelliteConnected(eq(DATAGRAM_TYPE1));
- mInOrder.verify(mMockDatagramController).isPollingInIdleState();
- mInOrder.verify(mMockDatagramController)
- .updateSendStatus(eq(SUB_ID), eq(DATAGRAM_TYPE1),
- eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING), eq(1),
- eq(SATELLITE_RESULT_SUCCESS));
- mInOrder.verify(mMockDatagramController)
- .updateSendStatus(eq(SUB_ID), eq(DATAGRAM_TYPE1),
- eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED), eq(1),
- eq(SATELLITE_RESULT_MODEM_TIMEOUT));
- mInOrder.verify(mMockDatagramController)
- .updateSendStatus(eq(SUB_ID), eq(DATAGRAM_TYPE1),
- eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
- eq(SATELLITE_RESULT_SUCCESS));
- verifyNoMoreInteractions(mMockDatagramController);
- verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
- any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
- verify(mMockSatelliteModemInterface).abortSendingSatelliteDatagrams(any(Message.class));
- assertThat(mResultListener.peek()).isEqualTo(SATELLITE_RESULT_MODEM_TIMEOUT);
- verify(mMockSessionMetricsStats, times(1)).addCountOfFailedOutgoingDatagram();
+ return null;
+ }).when(mMockSatelliteModemInterface).sendSatelliteDatagram(
+ any(SatelliteDatagram.class),
+ anyBoolean(), anyBoolean(), any(Message.class));
+ doReturn(false).when(mMockDatagramController)
+ .needsWaitingForSatelliteConnected(eq(datagramType));
+
+ mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
+ true, mResultListener::offer);
+ processAllMessages();
+ mInOrder.verify(mMockDatagramController)
+ .needsWaitingForSatelliteConnected(eq(datagramType));
+ mInOrder.verify(mMockDatagramController).isPollingInIdleState();
+ mInOrder.verify(mMockDatagramController)
+ .updateSendStatus(eq(SUB_ID), eq(datagramType),
+ eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING), eq(1),
+ eq(SATELLITE_RESULT_SUCCESS));
+ mInOrder.verify(mMockDatagramController)
+ .updateSendStatus(eq(SUB_ID), eq(datagramType),
+ eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS),
+ eq(0),
+ eq(SATELLITE_RESULT_SUCCESS));
+ mInOrder.verify(mMockDatagramController)
+ .updateSendStatus(eq(SUB_ID), eq(datagramType),
+ eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
+ eq(SATELLITE_RESULT_SUCCESS));
+ verifyNoMoreInteractions(mMockDatagramController);
+ verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
+ any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+ assertThat(mResultListener.peek()).isEqualTo(SATELLITE_RESULT_SUCCESS);
+ verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
+ clearInvocations(mMockSatelliteModemInterface);
+ clearInvocations(mMockDatagramController);
+ clearInvocations(mMockSessionMetricsStats);
+ mResultListener.clear();
+
+ // No response for the send request from modem
+ doNothing().when(mMockSatelliteModemInterface).sendSatelliteDatagram(
+ any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+
+ mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
+ true, mResultListener::offer);
+ processAllMessages();
+ mInOrder.verify(mMockDatagramController)
+ .needsWaitingForSatelliteConnected(eq(datagramType));
+ mInOrder.verify(mMockDatagramController).isPollingInIdleState();
+ mInOrder.verify(mMockDatagramController)
+ .updateSendStatus(eq(SUB_ID), eq(datagramType),
+ eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING), eq(1),
+ eq(SATELLITE_RESULT_SUCCESS));
+ mInOrder.verify(mMockDatagramController)
+ .updateSendStatus(eq(SUB_ID), eq(datagramType),
+ eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED),
+ eq(1),
+ eq(SATELLITE_RESULT_MODEM_TIMEOUT));
+ mInOrder.verify(mMockDatagramController)
+ .updateSendStatus(eq(SUB_ID), eq(datagramType),
+ eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
+ eq(SATELLITE_RESULT_SUCCESS));
+ verifyNoMoreInteractions(mMockDatagramController);
+ verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
+ any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+ verify(mMockSatelliteModemInterface).abortSendingSatelliteDatagrams(any(Message.class));
+ assertThat(mResultListener.peek()).isEqualTo(SATELLITE_RESULT_MODEM_TIMEOUT);
+ verify(mMockSessionMetricsStats, times(1)).addCountOfFailedOutgoingDatagram();
+
+ clearInvocations(mMockSatelliteModemInterface);
+ clearInvocations(mMockDatagramController);
+ clearInvocations(mMockSessionMetricsStats);
+ mResultListener.clear();
+ }
}
@Test
@@ -629,87 +657,96 @@
}
@Test
- public void testSendSatelliteDatagramToModemInDemoMode()
- throws Exception {
+ public void testSendSatelliteDatagramToModemInDemoMode() throws Exception {
when(mFeatureFlags.oemEnabledSatelliteFlag()).thenReturn(true);
- doAnswer(invocation -> {
- Message message = (Message) invocation.getArguments()[3];
- mDatagramDispatcherUT.obtainMessage(2 /*EVENT_SEND_SATELLITE_DATAGRAM_DONE*/,
- new AsyncResult(message.obj, null, null))
- .sendToTarget();
- return null;
- }).when(mMockSatelliteModemInterface).sendSatelliteDatagram(any(SatelliteDatagram.class),
- anyBoolean(), anyBoolean(), any(Message.class));
mDatagramDispatcherUT.setDemoMode(true);
mDatagramDispatcherUT.setDeviceAlignedWithSatellite(true);
- mIntegerConsumerSemaphore.drainPermits();
- // Test when overlay config config_send_satellite_datagram_to_modem_in_demo_mode is true
- mDatagramDispatcherUT.setShouldSendDatagramToModemInDemoMode(null);
- mContextFixture.putBooleanResource(mConfigSendSatelliteDatagramToModemInDemoMode, true);
- mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram,
- true, mIntegerConsumer);
- processAllMessages();
- moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
- processAllMessages();
- waitForIntegerConsumerResult(1);
- assertEquals(SATELLITE_RESULT_SUCCESS,
- (int) mIntegerConsumerResult.get(0));
- mIntegerConsumerResult.clear();
- verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
- any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+ int[] sosDatagramTypes = {DATAGRAM_TYPE1, DATAGRAM_TYPE4, DATAGRAM_TYPE5};
+ for (int datagramType : sosDatagramTypes) {
+ mIntegerConsumerSemaphore.drainPermits();
+ mIntegerConsumerResult.clear();
+ clearInvocations(mMockDatagramController);
+ clearInvocations(mMockSatelliteModemInterface);
+ clearInvocations(mMockSessionMetricsStats);
+ doAnswer(invocation -> {
+ Message message = (Message) invocation.getArguments()[3];
+ mDatagramDispatcherUT.obtainMessage(2 /*EVENT_SEND_SATELLITE_DATAGRAM_DONE*/,
+ new AsyncResult(message.obj, null, null))
+ .sendToTarget();
+ return null;
+ }).when(mMockSatelliteModemInterface).sendSatelliteDatagram(
+ any(SatelliteDatagram.class),
+ anyBoolean(), anyBoolean(), any(Message.class));
- moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
- processAllMessages();
- verify(mMockDatagramController).pushDemoModeDatagram(
- anyInt(), any(SatelliteDatagram.class));
- verify(mMockDatagramController).pollPendingSatelliteDatagrams(anyInt(), any());
- verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
+ // Test when overlay config config_send_satellite_datagram_to_modem_in_demo_mode is true
+ mDatagramDispatcherUT.setShouldSendDatagramToModemInDemoMode(null);
+ mContextFixture.putBooleanResource(mConfigSendSatelliteDatagramToModemInDemoMode, true);
+ mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
+ true, mIntegerConsumer);
+ processAllMessages();
+ moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
+ processAllMessages();
+ waitForIntegerConsumerResult(1);
+ assertEquals(SATELLITE_RESULT_SUCCESS, (int) mIntegerConsumerResult.get(0));
+ mIntegerConsumerResult.clear();
+ verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
+ any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
- // Test when overlay config config_send_satellite_datagram_to_modem_in_demo_mode is false
- reset(mMockSatelliteModemInterface);
- mDatagramDispatcherUT.setShouldSendDatagramToModemInDemoMode(null);
- mContextFixture.putBooleanResource(mConfigSendSatelliteDatagramToModemInDemoMode, false);
- mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram,
- true, mIntegerConsumer);
- processAllMessages();
- moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
- processAllMessages();
+ moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
+ processAllMessages();
+ verify(mMockDatagramController).pushDemoModeDatagram(
+ anyInt(), any(SatelliteDatagram.class));
+ verify(mMockDatagramController).pollPendingSatelliteDatagrams(anyInt(), any());
+ verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
- waitForIntegerConsumerResult(1);
- assertEquals(SATELLITE_RESULT_SUCCESS,
- (int) mIntegerConsumerResult.get(0));
- mIntegerConsumerResult.clear();
- verify(mMockSatelliteModemInterface, never()).sendSatelliteDatagram(
- any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+ // Test when overlay config config_send_satellite_datagram_to_modem_in_demo_mode is
+ // false
+ reset(mMockSatelliteModemInterface);
+ mDatagramDispatcherUT.setShouldSendDatagramToModemInDemoMode(null);
+ mContextFixture.putBooleanResource(mConfigSendSatelliteDatagramToModemInDemoMode,
+ false);
+ mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
+ true, mIntegerConsumer);
+ processAllMessages();
+ moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
+ processAllMessages();
- moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
- processAllMessages();
- verify(mMockDatagramController, times(2)).pushDemoModeDatagram(
- anyInt(), any(SatelliteDatagram.class));
- verify(mMockDatagramController, times(2)).pollPendingSatelliteDatagrams(anyInt(), any());
+ waitForIntegerConsumerResult(1);
+ assertEquals(SATELLITE_RESULT_SUCCESS, (int) mIntegerConsumerResult.get(0));
+ mIntegerConsumerResult.clear();
+ verify(mMockSatelliteModemInterface, never()).sendSatelliteDatagram(
+ any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
- // Send datagram one more time
- reset(mMockSatelliteModemInterface);
- mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram,
- true, mIntegerConsumer);
- processAllMessages();
- moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
- processAllMessages();
+ moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
+ processAllMessages();
+ verify(mMockDatagramController, times(2)).pushDemoModeDatagram(
+ anyInt(), any(SatelliteDatagram.class));
+ verify(mMockDatagramController, times(2)).pollPendingSatelliteDatagrams(anyInt(),
+ any());
- waitForIntegerConsumerResult(1);
- assertEquals(SATELLITE_RESULT_SUCCESS,
- (int) mIntegerConsumerResult.get(0));
- mIntegerConsumerResult.clear();
- verify(mMockSatelliteModemInterface, never()).sendSatelliteDatagram(
- any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+ // Send datagram one more time
+ reset(mMockSatelliteModemInterface);
+ mDatagramDispatcherUT.sendSatelliteDatagram(SUB_ID, datagramType, mDatagram,
+ true, mIntegerConsumer);
+ processAllMessages();
+ moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
+ processAllMessages();
- moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
- processAllMessages();
- verify(mMockDatagramController, times(3)).pushDemoModeDatagram(
- anyInt(), any(SatelliteDatagram.class));
- verify(mMockDatagramController, times(3)).pollPendingSatelliteDatagrams(anyInt(), any());
+ waitForIntegerConsumerResult(1);
+ assertEquals(SATELLITE_RESULT_SUCCESS, (int) mIntegerConsumerResult.get(0));
+ mIntegerConsumerResult.clear();
+ verify(mMockSatelliteModemInterface, never()).sendSatelliteDatagram(
+ any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
+
+ moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
+ processAllMessages();
+ verify(mMockDatagramController, times(3)).pushDemoModeDatagram(
+ anyInt(), any(SatelliteDatagram.class));
+ verify(mMockDatagramController, times(3)).pollPendingSatelliteDatagrams(anyInt(),
+ any());
+ }
mDatagramDispatcherUT.setDemoMode(false);
mDatagramDispatcherUT.setDeviceAlignedWithSatellite(false);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java
index 79d3657..4d3acb4 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java
@@ -25,6 +25,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.clearInvocations;
@@ -170,7 +171,7 @@
}).when(mMockSatelliteModemInterface).pollPendingSatelliteDatagrams(any(Message.class));
doReturn(true).when(mMockDatagramController)
.needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN));
- when(mMockDatagramController.getDatagramWaitTimeForConnectedState())
+ when(mMockDatagramController.getDatagramWaitTimeForConnectedState(anyBoolean()))
.thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS);
mResultListener.clear();
@@ -181,7 +182,7 @@
mInOrder.verify(mMockDatagramController).updateReceiveStatus(eq(SUB_ID),
eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT), eq(0),
eq(SatelliteManager.SATELLITE_RESULT_SUCCESS));
- mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState();
+ mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false));
verifyZeroInteractions(mMockSatelliteModemInterface);
assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted());
@@ -210,7 +211,7 @@
processAllMessages();
mInOrder.verify(mMockDatagramController)
.needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN));
- mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState();
+ mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false));
verifyZeroInteractions(mMockSatelliteModemInterface);
assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted());