Loading src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +81 −2 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.util.Pair; import com.android.internal.R; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.IIntegerConsumer; import com.android.internal.telephony.IIntegerConsumer; import com.android.internal.telephony.IVoidConsumer; import com.android.internal.telephony.IVoidConsumer; import com.android.internal.telephony.Phone; import com.android.internal.telephony.Phone; Loading @@ -73,6 +74,9 @@ public class DatagramReceiver extends Handler { private static final int EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE = 2; private static final int EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE = 2; private static final int EVENT_WAIT_FOR_DEVICE_ALIGNMENT_IN_DEMO_MODE_TIMED_OUT = 3; private static final int EVENT_WAIT_FOR_DEVICE_ALIGNMENT_IN_DEMO_MODE_TIMED_OUT = 3; private static final int EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT = 4; private static final int EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT = 4; private static final int REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS = 5; private static final int EVENT_SATELLITE_MODEM_STATE_CHANGED = 6; private static final int REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE = 7; /** Key used to read/write satellite datagramId in shared preferences. */ /** Key used to read/write satellite datagramId in shared preferences. */ private static final String SATELLITE_DATAGRAM_ID_KEY = "satellite_datagram_id_key"; private static final String SATELLITE_DATAGRAM_ID_KEY = "satellite_datagram_id_key"; Loading Loading @@ -498,6 +502,43 @@ public class DatagramReceiver extends Handler { handleEventDatagramWaitForConnectedStateTimedOut(); handleEventDatagramWaitForConnectedStateTimedOut(); break; break; case REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS: { plogd("REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS"); SomeArgs args = (SomeArgs) msg.obj; int subId = (int) args.arg1; Consumer<Integer> callback = (Consumer<Integer>) args.arg2; try { handleRequestPollPendingSatelliteDatagrams(subId, callback); } finally { args.recycle(); } break; } case EVENT_SATELLITE_MODEM_STATE_CHANGED: { plogd("EVENT_SATELLITE_MODEM_STATE_CHANGED"); SomeArgs args = (SomeArgs) msg.obj; int state = (int) args.arg1; try { handleEventSatelliteModemStateChanged(state); } finally { args.recycle(); } break; } case REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE: { plogd("REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE"); SomeArgs args = (SomeArgs) msg.obj; boolean isAligned = (boolean) args.arg1; try { handleRequestSetDeviceAlignedWithSatellite(isAligned); } finally { args.recycle(); } break; } default: default: plogw("DatagramDispatcherHandler: unexpected message code: " + msg.what); plogw("DatagramDispatcherHandler: unexpected message code: " + msg.what); break; break; Loading Loading @@ -570,6 +611,20 @@ public class DatagramReceiver extends Handler { * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request. * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request. */ */ public void pollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) { public void pollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) { if (mFeatureFlags.satelliteImproveMultiThreadDesign()) { SomeArgs args = SomeArgs.obtain(); args.arg1 = subId; args.arg2 = callback; sendMessage(obtainMessage(REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS, args)); return; } handleRequestPollPendingSatelliteDatagrams(subId, callback); } private void handleRequestPollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) { plogd("handleRequestPollPendingSatelliteDatagrams"); if (!mDatagramController.isPollingInIdleState()) { if (!mDatagramController.isPollingInIdleState()) { // Poll request should be sent to satellite modem only when it is free. // Poll request should be sent to satellite modem only when it is free. plogd("pollPendingSatelliteDatagrams: satellite modem is busy receiving datagrams."); plogd("pollPendingSatelliteDatagrams: satellite modem is busy receiving datagrams."); Loading Loading @@ -658,6 +713,19 @@ public class DatagramReceiver extends Handler { * @param state Current satellite modem state. * @param state Current satellite modem state. */ */ public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (mFeatureFlags.satelliteImproveMultiThreadDesign()) { SomeArgs args = SomeArgs.obtain(); args.arg1 = state; sendMessage(obtainMessage(EVENT_SATELLITE_MODEM_STATE_CHANGED, args)); return; } handleEventSatelliteModemStateChanged(state); } private void handleEventSatelliteModemStateChanged( @SatelliteManager.SatelliteModemState int state) { plogd("handleEventSatelliteModemStateChanged: state = " + state); synchronized (mLock) { synchronized (mLock) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { Loading Loading @@ -775,7 +843,18 @@ public class DatagramReceiver extends Handler { } } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public void setDeviceAlignedWithSatellite(boolean isAligned) { protected void setDeviceAlignedWithSatellite(boolean isAligned) { if (mFeatureFlags.satelliteImproveMultiThreadDesign()) { SomeArgs args = SomeArgs.obtain(); args.arg1 = isAligned; sendMessage(obtainMessage(REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE, args)); return; } handleRequestSetDeviceAlignedWithSatellite(isAligned); } private void handleRequestSetDeviceAlignedWithSatellite(boolean isAligned) { synchronized (mLock) { synchronized (mLock) { mIsAligned.set(isAligned); mIsAligned.set(isAligned); plogd("setDeviceAlignedWithSatellite: " + isAligned); plogd("setDeviceAlignedWithSatellite: " + isAligned); Loading Loading @@ -849,7 +928,7 @@ public class DatagramReceiver extends Handler { } } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public boolean isDatagramWaitForConnectedStateTimerStarted() { protected boolean isDatagramWaitForConnectedStateTimerStarted() { return hasMessages(EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT); return hasMessages(EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT); } } Loading tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -68,7 +68,7 @@ public class DatagramControllerTest extends TelephonyTest { private TestDatagramController mDatagramControllerUT; private TestDatagramController mDatagramControllerUT; @Mock private DatagramReceiver mMockDatagramReceiver; @Mock private DatagramReceiverTest.TestDatagramReceiver mMockDatagramReceiver; @Mock private DatagramDispatcher mMockDatagramDispatcher; @Mock private DatagramDispatcher mMockDatagramDispatcher; @Mock private PointingAppController mMockPointingAppController; @Mock private PointingAppController mMockPointingAppController; @Mock private SatelliteSessionController mMockSatelliteSessionController; @Mock private SatelliteSessionController mMockSatelliteSessionController; Loading tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java +18 −11 Original line number Original line Diff line number Diff line Loading @@ -166,11 +166,13 @@ public class DatagramReceiverTest extends TelephonyTest { @Test @Test public void testPollPendingSatelliteDatagrams_usingSatelliteModemInterface_success() public void testPollPendingSatelliteDatagrams_usingSatelliteModemInterface_success() throws Exception { throws Exception { TestDatagramReceiver testDatagramReceiver = new TestDatagramReceiver(mContext, Looper.myLooper(), mFeatureFlags, mMockDatagramController); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); doAnswer(invocation -> { doAnswer(invocation -> { Message message = (Message) invocation.getArguments()[0]; Message message = (Message) invocation.getArguments()[0]; mDatagramReceiverUT.obtainMessage(2 /*EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE*/, testDatagramReceiver.obtainMessage(2 /*EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE*/, new AsyncResult(message.obj, null, null)) new AsyncResult(message.obj, null, null)) .sendToTarget(); .sendToTarget(); return null; return null; Loading @@ -181,7 +183,7 @@ public class DatagramReceiverTest extends TelephonyTest { .thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); .thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); mResultListener.clear(); mResultListener.clear(); mDatagramReceiverUT.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); testDatagramReceiver.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); processAllMessages(); processAllMessages(); mInOrder.verify(mMockDatagramController) mInOrder.verify(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); Loading @@ -191,11 +193,11 @@ public class DatagramReceiverTest extends TelephonyTest { eq(SatelliteManager.SATELLITE_RESULT_SUCCESS)); eq(SatelliteManager.SATELLITE_RESULT_SUCCESS)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); verifyNoMoreInteractions(mMockSatelliteModemInterface); verifyNoMoreInteractions(mMockSatelliteModemInterface); assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertTrue(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); doReturn(false).when(mMockDatagramController) doReturn(false).when(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); mDatagramReceiverUT.onSatelliteModemStateChanged( testDatagramReceiver.onSatelliteModemStateChanged( SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED); SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED); processAllMessages(); processAllMessages(); Loading @@ -208,20 +210,20 @@ public class DatagramReceiverTest extends TelephonyTest { .pollPendingSatelliteDatagrams(any(Message.class)); .pollPendingSatelliteDatagrams(any(Message.class)); assertEquals(1, mResultListener.size()); assertEquals(1, mResultListener.size()); assertThat(mResultListener.peek()).isEqualTo(SatelliteManager.SATELLITE_RESULT_SUCCESS); assertThat(mResultListener.peek()).isEqualTo(SatelliteManager.SATELLITE_RESULT_SUCCESS); assertFalse(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertFalse(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); clearInvocations(mMockSatelliteModemInterface); clearInvocations(mMockSatelliteModemInterface); clearInvocations(mMockSessionMetricsStats); clearInvocations(mMockSessionMetricsStats); mResultListener.clear(); mResultListener.clear(); doReturn(true).when(mMockDatagramController) doReturn(true).when(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); mDatagramReceiverUT.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); testDatagramReceiver.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); processAllMessages(); processAllMessages(); mInOrder.verify(mMockDatagramController) mInOrder.verify(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); verifyNoMoreInteractions(mMockSatelliteModemInterface); verifyNoMoreInteractions(mMockSatelliteModemInterface); assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertTrue(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); processAllMessages(); processAllMessages(); Loading @@ -238,7 +240,7 @@ public class DatagramReceiverTest extends TelephonyTest { assertThat(mResultListener.peek()).isEqualTo( assertThat(mResultListener.peek()).isEqualTo( SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); verify(mMockSessionMetricsStats, times(1)).addCountOfFailedIncomingDatagram(); verify(mMockSessionMetricsStats, times(1)).addCountOfFailedIncomingDatagram(); assertFalse(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertFalse(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); mResultListener.clear(); mResultListener.clear(); mDatagramReceiverUT.onSatelliteModemStateChanged( mDatagramReceiverUT.onSatelliteModemStateChanged( Loading Loading @@ -512,10 +514,10 @@ public class DatagramReceiverTest extends TelephonyTest { .isEqualTo(SatelliteManager.SATELLITE_RESULT_NOT_SUPPORTED); .isEqualTo(SatelliteManager.SATELLITE_RESULT_NOT_SUPPORTED); } } private static class TestDatagramReceiver extends DatagramReceiver { public static class TestDatagramReceiver extends DatagramReceiver { private long mLong = SATELLITE_ALIGN_TIMEOUT; private long mLong = SATELLITE_ALIGN_TIMEOUT; TestDatagramReceiver(@NonNull Context context, @NonNull Looper looper, public TestDatagramReceiver(@NonNull Context context, @NonNull Looper looper, @NonNull FeatureFlags featureFlags, @NonNull FeatureFlags featureFlags, @NonNull DatagramController datagramController) { @NonNull DatagramController datagramController) { super(context, looper, featureFlags, datagramController); super(context, looper, featureFlags, datagramController); Loading @@ -527,7 +529,7 @@ public class DatagramReceiverTest extends TelephonyTest { } } @Override @Override public void setDeviceAlignedWithSatellite(boolean isAligned) { protected void setDeviceAlignedWithSatellite(boolean isAligned) { super.setDeviceAlignedWithSatellite(isAligned); super.setDeviceAlignedWithSatellite(isAligned); } } Loading @@ -539,6 +541,11 @@ public class DatagramReceiverTest extends TelephonyTest { public void setDuration(long duration) { public void setDuration(long duration) { mLong = duration; mLong = duration; } } @Override protected boolean isDatagramWaitForConnectedStateTimerStarted() { return super.isDatagramWaitForConnectedStateTimerStarted(); } } } private static class TestSatelliteDatagramCallback extends ISatelliteDatagramCallback.Stub { private static class TestSatelliteDatagramCallback extends ISatelliteDatagramCallback.Stub { Loading Loading
src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +81 −2 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.util.Pair; import com.android.internal.R; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.IIntegerConsumer; import com.android.internal.telephony.IIntegerConsumer; import com.android.internal.telephony.IVoidConsumer; import com.android.internal.telephony.IVoidConsumer; import com.android.internal.telephony.Phone; import com.android.internal.telephony.Phone; Loading @@ -73,6 +74,9 @@ public class DatagramReceiver extends Handler { private static final int EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE = 2; private static final int EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE = 2; private static final int EVENT_WAIT_FOR_DEVICE_ALIGNMENT_IN_DEMO_MODE_TIMED_OUT = 3; private static final int EVENT_WAIT_FOR_DEVICE_ALIGNMENT_IN_DEMO_MODE_TIMED_OUT = 3; private static final int EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT = 4; private static final int EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT = 4; private static final int REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS = 5; private static final int EVENT_SATELLITE_MODEM_STATE_CHANGED = 6; private static final int REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE = 7; /** Key used to read/write satellite datagramId in shared preferences. */ /** Key used to read/write satellite datagramId in shared preferences. */ private static final String SATELLITE_DATAGRAM_ID_KEY = "satellite_datagram_id_key"; private static final String SATELLITE_DATAGRAM_ID_KEY = "satellite_datagram_id_key"; Loading Loading @@ -498,6 +502,43 @@ public class DatagramReceiver extends Handler { handleEventDatagramWaitForConnectedStateTimedOut(); handleEventDatagramWaitForConnectedStateTimedOut(); break; break; case REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS: { plogd("REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS"); SomeArgs args = (SomeArgs) msg.obj; int subId = (int) args.arg1; Consumer<Integer> callback = (Consumer<Integer>) args.arg2; try { handleRequestPollPendingSatelliteDatagrams(subId, callback); } finally { args.recycle(); } break; } case EVENT_SATELLITE_MODEM_STATE_CHANGED: { plogd("EVENT_SATELLITE_MODEM_STATE_CHANGED"); SomeArgs args = (SomeArgs) msg.obj; int state = (int) args.arg1; try { handleEventSatelliteModemStateChanged(state); } finally { args.recycle(); } break; } case REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE: { plogd("REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE"); SomeArgs args = (SomeArgs) msg.obj; boolean isAligned = (boolean) args.arg1; try { handleRequestSetDeviceAlignedWithSatellite(isAligned); } finally { args.recycle(); } break; } default: default: plogw("DatagramDispatcherHandler: unexpected message code: " + msg.what); plogw("DatagramDispatcherHandler: unexpected message code: " + msg.what); break; break; Loading Loading @@ -570,6 +611,20 @@ public class DatagramReceiver extends Handler { * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request. * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request. */ */ public void pollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) { public void pollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) { if (mFeatureFlags.satelliteImproveMultiThreadDesign()) { SomeArgs args = SomeArgs.obtain(); args.arg1 = subId; args.arg2 = callback; sendMessage(obtainMessage(REQUEST_POLL_PENDING_SATELLITE_DATAGRAMS, args)); return; } handleRequestPollPendingSatelliteDatagrams(subId, callback); } private void handleRequestPollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) { plogd("handleRequestPollPendingSatelliteDatagrams"); if (!mDatagramController.isPollingInIdleState()) { if (!mDatagramController.isPollingInIdleState()) { // Poll request should be sent to satellite modem only when it is free. // Poll request should be sent to satellite modem only when it is free. plogd("pollPendingSatelliteDatagrams: satellite modem is busy receiving datagrams."); plogd("pollPendingSatelliteDatagrams: satellite modem is busy receiving datagrams."); Loading Loading @@ -658,6 +713,19 @@ public class DatagramReceiver extends Handler { * @param state Current satellite modem state. * @param state Current satellite modem state. */ */ public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) { if (mFeatureFlags.satelliteImproveMultiThreadDesign()) { SomeArgs args = SomeArgs.obtain(); args.arg1 = state; sendMessage(obtainMessage(EVENT_SATELLITE_MODEM_STATE_CHANGED, args)); return; } handleEventSatelliteModemStateChanged(state); } private void handleEventSatelliteModemStateChanged( @SatelliteManager.SatelliteModemState int state) { plogd("handleEventSatelliteModemStateChanged: state = " + state); synchronized (mLock) { synchronized (mLock) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { Loading Loading @@ -775,7 +843,18 @@ public class DatagramReceiver extends Handler { } } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public void setDeviceAlignedWithSatellite(boolean isAligned) { protected void setDeviceAlignedWithSatellite(boolean isAligned) { if (mFeatureFlags.satelliteImproveMultiThreadDesign()) { SomeArgs args = SomeArgs.obtain(); args.arg1 = isAligned; sendMessage(obtainMessage(REQUEST_SET_DEVICE_ALIGNED_WITH_SATELLITE, args)); return; } handleRequestSetDeviceAlignedWithSatellite(isAligned); } private void handleRequestSetDeviceAlignedWithSatellite(boolean isAligned) { synchronized (mLock) { synchronized (mLock) { mIsAligned.set(isAligned); mIsAligned.set(isAligned); plogd("setDeviceAlignedWithSatellite: " + isAligned); plogd("setDeviceAlignedWithSatellite: " + isAligned); Loading Loading @@ -849,7 +928,7 @@ public class DatagramReceiver extends Handler { } } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public boolean isDatagramWaitForConnectedStateTimerStarted() { protected boolean isDatagramWaitForConnectedStateTimerStarted() { return hasMessages(EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT); return hasMessages(EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT); } } Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -68,7 +68,7 @@ public class DatagramControllerTest extends TelephonyTest { private TestDatagramController mDatagramControllerUT; private TestDatagramController mDatagramControllerUT; @Mock private DatagramReceiver mMockDatagramReceiver; @Mock private DatagramReceiverTest.TestDatagramReceiver mMockDatagramReceiver; @Mock private DatagramDispatcher mMockDatagramDispatcher; @Mock private DatagramDispatcher mMockDatagramDispatcher; @Mock private PointingAppController mMockPointingAppController; @Mock private PointingAppController mMockPointingAppController; @Mock private SatelliteSessionController mMockSatelliteSessionController; @Mock private SatelliteSessionController mMockSatelliteSessionController; Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java +18 −11 Original line number Original line Diff line number Diff line Loading @@ -166,11 +166,13 @@ public class DatagramReceiverTest extends TelephonyTest { @Test @Test public void testPollPendingSatelliteDatagrams_usingSatelliteModemInterface_success() public void testPollPendingSatelliteDatagrams_usingSatelliteModemInterface_success() throws Exception { throws Exception { TestDatagramReceiver testDatagramReceiver = new TestDatagramReceiver(mContext, Looper.myLooper(), mFeatureFlags, mMockDatagramController); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); doReturn(true).when(mMockSatelliteModemInterface).isSatelliteServiceSupported(); doAnswer(invocation -> { doAnswer(invocation -> { Message message = (Message) invocation.getArguments()[0]; Message message = (Message) invocation.getArguments()[0]; mDatagramReceiverUT.obtainMessage(2 /*EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE*/, testDatagramReceiver.obtainMessage(2 /*EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE*/, new AsyncResult(message.obj, null, null)) new AsyncResult(message.obj, null, null)) .sendToTarget(); .sendToTarget(); return null; return null; Loading @@ -181,7 +183,7 @@ public class DatagramReceiverTest extends TelephonyTest { .thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); .thenReturn(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); mResultListener.clear(); mResultListener.clear(); mDatagramReceiverUT.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); testDatagramReceiver.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); processAllMessages(); processAllMessages(); mInOrder.verify(mMockDatagramController) mInOrder.verify(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); Loading @@ -191,11 +193,11 @@ public class DatagramReceiverTest extends TelephonyTest { eq(SatelliteManager.SATELLITE_RESULT_SUCCESS)); eq(SatelliteManager.SATELLITE_RESULT_SUCCESS)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); verifyNoMoreInteractions(mMockSatelliteModemInterface); verifyNoMoreInteractions(mMockSatelliteModemInterface); assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertTrue(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); doReturn(false).when(mMockDatagramController) doReturn(false).when(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); mDatagramReceiverUT.onSatelliteModemStateChanged( testDatagramReceiver.onSatelliteModemStateChanged( SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED); SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED); processAllMessages(); processAllMessages(); Loading @@ -208,20 +210,20 @@ public class DatagramReceiverTest extends TelephonyTest { .pollPendingSatelliteDatagrams(any(Message.class)); .pollPendingSatelliteDatagrams(any(Message.class)); assertEquals(1, mResultListener.size()); assertEquals(1, mResultListener.size()); assertThat(mResultListener.peek()).isEqualTo(SatelliteManager.SATELLITE_RESULT_SUCCESS); assertThat(mResultListener.peek()).isEqualTo(SatelliteManager.SATELLITE_RESULT_SUCCESS); assertFalse(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertFalse(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); clearInvocations(mMockSatelliteModemInterface); clearInvocations(mMockSatelliteModemInterface); clearInvocations(mMockSessionMetricsStats); clearInvocations(mMockSessionMetricsStats); mResultListener.clear(); mResultListener.clear(); doReturn(true).when(mMockDatagramController) doReturn(true).when(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); mDatagramReceiverUT.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); testDatagramReceiver.pollPendingSatelliteDatagrams(SUB_ID, mResultListener::offer); processAllMessages(); processAllMessages(); mInOrder.verify(mMockDatagramController) mInOrder.verify(mMockDatagramController) .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); .needsWaitingForSatelliteConnected(eq(SatelliteManager.DATAGRAM_TYPE_UNKNOWN)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); mInOrder.verify(mMockDatagramController).getDatagramWaitTimeForConnectedState(eq(false)); verifyNoMoreInteractions(mMockSatelliteModemInterface); verifyNoMoreInteractions(mMockSatelliteModemInterface); assertTrue(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertTrue(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); moveTimeForward(TEST_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMEOUT_MILLIS); processAllMessages(); processAllMessages(); Loading @@ -238,7 +240,7 @@ public class DatagramReceiverTest extends TelephonyTest { assertThat(mResultListener.peek()).isEqualTo( assertThat(mResultListener.peek()).isEqualTo( SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); verify(mMockSessionMetricsStats, times(1)).addCountOfFailedIncomingDatagram(); verify(mMockSessionMetricsStats, times(1)).addCountOfFailedIncomingDatagram(); assertFalse(mDatagramReceiverUT.isDatagramWaitForConnectedStateTimerStarted()); assertFalse(testDatagramReceiver.isDatagramWaitForConnectedStateTimerStarted()); mResultListener.clear(); mResultListener.clear(); mDatagramReceiverUT.onSatelliteModemStateChanged( mDatagramReceiverUT.onSatelliteModemStateChanged( Loading Loading @@ -512,10 +514,10 @@ public class DatagramReceiverTest extends TelephonyTest { .isEqualTo(SatelliteManager.SATELLITE_RESULT_NOT_SUPPORTED); .isEqualTo(SatelliteManager.SATELLITE_RESULT_NOT_SUPPORTED); } } private static class TestDatagramReceiver extends DatagramReceiver { public static class TestDatagramReceiver extends DatagramReceiver { private long mLong = SATELLITE_ALIGN_TIMEOUT; private long mLong = SATELLITE_ALIGN_TIMEOUT; TestDatagramReceiver(@NonNull Context context, @NonNull Looper looper, public TestDatagramReceiver(@NonNull Context context, @NonNull Looper looper, @NonNull FeatureFlags featureFlags, @NonNull FeatureFlags featureFlags, @NonNull DatagramController datagramController) { @NonNull DatagramController datagramController) { super(context, looper, featureFlags, datagramController); super(context, looper, featureFlags, datagramController); Loading @@ -527,7 +529,7 @@ public class DatagramReceiverTest extends TelephonyTest { } } @Override @Override public void setDeviceAlignedWithSatellite(boolean isAligned) { protected void setDeviceAlignedWithSatellite(boolean isAligned) { super.setDeviceAlignedWithSatellite(isAligned); super.setDeviceAlignedWithSatellite(isAligned); } } Loading @@ -539,6 +541,11 @@ public class DatagramReceiverTest extends TelephonyTest { public void setDuration(long duration) { public void setDuration(long duration) { mLong = duration; mLong = duration; } } @Override protected boolean isDatagramWaitForConnectedStateTimerStarted() { return super.isDatagramWaitForConnectedStateTimerStarted(); } } } private static class TestSatelliteDatagramCallback extends ISatelliteDatagramCallback.Stub { private static class TestSatelliteDatagramCallback extends ISatelliteDatagramCallback.Stub { Loading