Loading src/java/com/android/internal/telephony/satellite/DatagramController.java +39 −40 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.internal.telephony.flags.FeatureFlags; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; /** Loading Loading @@ -81,17 +82,15 @@ public class DatagramController { /** Variables used to update onSendDatagramStateChanged(). */ private final Object mLock = new Object(); @GuardedBy("mLock") private int mSendSubId; @GuardedBy("mLock") private @SatelliteManager.DatagramType int mDatagramType = DATAGRAM_TYPE_UNKNOWN; @GuardedBy("mLock") private @SatelliteManager.SatelliteDatagramTransferState int mSendDatagramTransferState = SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE; @GuardedBy("mLock") private int mSendPendingCount = 0; @GuardedBy("mLock") private int mSendErrorCode = SatelliteManager.SATELLITE_RESULT_SUCCESS; private AtomicInteger mSendSubId = new AtomicInteger(0); private @SatelliteManager.DatagramType AtomicInteger mDatagramType = new AtomicInteger(DATAGRAM_TYPE_UNKNOWN); private @SatelliteManager.SatelliteDatagramTransferState AtomicInteger mSendDatagramTransferState = new AtomicInteger(SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE); private AtomicInteger mSendPendingCount = new AtomicInteger(0); private AtomicInteger mSendErrorCode = new AtomicInteger(SatelliteManager.SATELLITE_RESULT_SUCCESS); /** Variables used to update onReceiveDatagramStateChanged(). */ @GuardedBy("mLock") private int mReceiveSubId; Loading Loading @@ -258,11 +257,13 @@ public class DatagramController { * @param datagramTransferState The new send datagram transfer state. * @param sendPendingCount number of datagrams that are currently being sent * @param errorCode If datagram transfer failed, the reason for failure. * * This method is only used by {@link DatagramDispatcher}. */ public void updateSendStatus(int subId, @SatelliteManager.DatagramType int datagramType, @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void updateSendStatus(int subId, @SatelliteManager.DatagramType int datagramType, @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState, int sendPendingCount, int errorCode) { synchronized (mLock) { plogd("updateSendStatus" + " subId: " + subId + " datagramType: " + datagramType Loading @@ -273,17 +274,16 @@ public class DatagramController { return; } mSendSubId = subId; mDatagramType = datagramType; mSendDatagramTransferState = datagramTransferState; mSendPendingCount = sendPendingCount; mSendErrorCode = errorCode; notifyDatagramTransferStateChangedToSessionController(mDatagramType); mPointingAppController.updateSendDatagramTransferState(mSendSubId, mDatagramType, mSendDatagramTransferState, mSendPendingCount, mSendErrorCode); mSendSubId.set(subId); mDatagramType.set(datagramType); mSendDatagramTransferState.set(datagramTransferState); mSendPendingCount.set(sendPendingCount); mSendErrorCode.set(errorCode); notifyDatagramTransferStateChangedToSessionController(datagramType); mPointingAppController.updateSendDatagramTransferState(subId, datagramType, datagramTransferState, sendPendingCount, errorCode); retryPollPendingDatagramsInDemoMode(); } } private boolean shouldSuppressDatagramTransferStateUpdate( @SatelliteManager.DatagramType int datagramType) { Loading Loading @@ -318,12 +318,12 @@ public class DatagramController { + " receivePendingCount: " + receivePendingCount + " errorCode: " + errorCode); mReceiveSubId = subId; mDatagramType = datagramType; mDatagramType.set(datagramType); mReceiveDatagramTransferState = datagramTransferState; mReceivePendingCount = receivePendingCount; mReceiveErrorCode = errorCode; notifyDatagramTransferStateChangedToSessionController(mDatagramType); notifyDatagramTransferStateChangedToSessionController(datagramType); mPointingAppController.updateReceiveDatagramTransferState(mReceiveSubId, mReceiveDatagramTransferState, mReceivePendingCount, mReceiveErrorCode); retryPollPendingDatagramsInDemoMode(); Loading Loading @@ -432,11 +432,9 @@ public class DatagramController { } } public boolean isSendingInIdleState() { synchronized (mLock) { return (mSendDatagramTransferState == SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE); } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected boolean isSendingInIdleState() { return mSendDatagramTransferState.get() == SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE; } public boolean isPollingInIdleState() { Loading Loading @@ -598,7 +596,8 @@ public class DatagramController { } else { synchronized (mLock) { sessionController.onDatagramTransferStateChanged( mSendDatagramTransferState, mReceiveDatagramTransferState, datagramType); mSendDatagramTransferState.get(), mReceiveDatagramTransferState, datagramType); } } } Loading tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java +28 −4 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TR import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING; import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SUCCESS; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading @@ -37,9 +39,9 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import android.annotation.NonNull; import android.content.Context; import android.os.Looper; import android.telephony.satellite.SatelliteDatagram; import android.telephony.satellite.SatelliteManager; Loading @@ -48,6 +50,7 @@ import android.testing.TestableLooper; import com.android.internal.R; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.flags.FeatureFlags; import org.junit.After; import org.junit.Before; Loading @@ -63,7 +66,7 @@ import java.util.function.Consumer; public class DatagramControllerTest extends TelephonyTest { private static final String TAG = "DatagramControllerTest"; private DatagramController mDatagramControllerUT; private TestDatagramController mDatagramControllerUT; @Mock private DatagramReceiver mMockDatagramReceiver; @Mock private DatagramDispatcher mMockDatagramDispatcher; Loading @@ -88,7 +91,7 @@ public class DatagramControllerTest extends TelephonyTest { replaceInstance(SatelliteSessionController.class, "sInstance", null, mMockSatelliteSessionController); when(mMockSatelliteController.isSatelliteAttachRequired()).thenReturn(true); mDatagramControllerUT = new DatagramController( mDatagramControllerUT = new TestDatagramController( mContext, Looper.myLooper(), mFeatureFlags, mMockPointingAppController); // Move both send and receive to IDLE state Loading Loading @@ -336,4 +339,25 @@ public class DatagramControllerTest extends TelephonyTest { mDatagramControllerUT.setDemoMode(true); mDatagramControllerUT.pushDemoModeDatagram(datagramType, datagram); } public static class TestDatagramController extends DatagramController { public TestDatagramController(@NonNull Context context, @NonNull Looper looper, @NonNull FeatureFlags featureFlags, @NonNull PointingAppController pointingAppController) { super(context, looper, featureFlags, pointingAppController); } @Override protected void updateSendStatus(int subId, int datagramType, int datagramTransferState, int sendPendingCount, int errorCode) { super.updateSendStatus(subId, datagramType, datagramTransferState, sendPendingCount, errorCode); } @Override protected boolean isSendingInIdleState() { return super.isSendingInIdleState(); } } } tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ public class DatagramDispatcherTest extends TelephonyTest { private TestDatagramDispatcher mDatagramDispatcherUT; @Mock private SatelliteController mMockSatelliteController; @Mock private DatagramController mMockDatagramController; @Mock private DatagramControllerTest.TestDatagramController mMockDatagramController; @Mock private DatagramReceiver mMockDatagramReceiver; @Mock private SatelliteModemInterface mMockSatelliteModemInterface; @Mock private ControllerMetricsStats mMockControllerMetricsStats; Loading Loading @@ -166,6 +166,7 @@ public class DatagramDispatcherTest extends TelephonyTest { mMockSessionMetricsStats); when(mFeatureFlags.carrierRoamingNbIotNtn()).thenReturn(true); mDatagramDispatcherUT = new TestDatagramDispatcher(mContext, Looper.myLooper(), mFeatureFlags, mMockDatagramController); Loading tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ public class DatagramReceiverTest extends TelephonyTest { private TestDatagramReceiver mTestDemoModeDatagramReceiver; @Mock private SatelliteController mMockSatelliteController; @Mock private DatagramController mMockDatagramController; @Mock private DatagramControllerTest.TestDatagramController mMockDatagramController; @Mock private SatelliteModemInterface mMockSatelliteModemInterface; @Mock private ControllerMetricsStats mMockControllerMetricsStats; @Mock private SatelliteSessionController mMockSatelliteSessionController; Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -263,7 +263,7 @@ public class SatelliteControllerTest extends TelephonyTest { private SubscriptionInfo testSubscriptionInfo2; @Mock private SatelliteController mMockSatelliteController; @Mock private DatagramController mMockDatagramController; @Mock private DatagramControllerTest.TestDatagramController mMockDatagramController; @Mock private SatelliteModemInterface mMockSatelliteModemInterface; @Mock private SatelliteSessionController mMockSatelliteSessionController; @Mock private PointingAppController mMockPointingAppController; Loading Loading
src/java/com/android/internal/telephony/satellite/DatagramController.java +39 −40 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import com.android.internal.telephony.flags.FeatureFlags; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; /** Loading Loading @@ -81,17 +82,15 @@ public class DatagramController { /** Variables used to update onSendDatagramStateChanged(). */ private final Object mLock = new Object(); @GuardedBy("mLock") private int mSendSubId; @GuardedBy("mLock") private @SatelliteManager.DatagramType int mDatagramType = DATAGRAM_TYPE_UNKNOWN; @GuardedBy("mLock") private @SatelliteManager.SatelliteDatagramTransferState int mSendDatagramTransferState = SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE; @GuardedBy("mLock") private int mSendPendingCount = 0; @GuardedBy("mLock") private int mSendErrorCode = SatelliteManager.SATELLITE_RESULT_SUCCESS; private AtomicInteger mSendSubId = new AtomicInteger(0); private @SatelliteManager.DatagramType AtomicInteger mDatagramType = new AtomicInteger(DATAGRAM_TYPE_UNKNOWN); private @SatelliteManager.SatelliteDatagramTransferState AtomicInteger mSendDatagramTransferState = new AtomicInteger(SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE); private AtomicInteger mSendPendingCount = new AtomicInteger(0); private AtomicInteger mSendErrorCode = new AtomicInteger(SatelliteManager.SATELLITE_RESULT_SUCCESS); /** Variables used to update onReceiveDatagramStateChanged(). */ @GuardedBy("mLock") private int mReceiveSubId; Loading Loading @@ -258,11 +257,13 @@ public class DatagramController { * @param datagramTransferState The new send datagram transfer state. * @param sendPendingCount number of datagrams that are currently being sent * @param errorCode If datagram transfer failed, the reason for failure. * * This method is only used by {@link DatagramDispatcher}. */ public void updateSendStatus(int subId, @SatelliteManager.DatagramType int datagramType, @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void updateSendStatus(int subId, @SatelliteManager.DatagramType int datagramType, @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState, int sendPendingCount, int errorCode) { synchronized (mLock) { plogd("updateSendStatus" + " subId: " + subId + " datagramType: " + datagramType Loading @@ -273,17 +274,16 @@ public class DatagramController { return; } mSendSubId = subId; mDatagramType = datagramType; mSendDatagramTransferState = datagramTransferState; mSendPendingCount = sendPendingCount; mSendErrorCode = errorCode; notifyDatagramTransferStateChangedToSessionController(mDatagramType); mPointingAppController.updateSendDatagramTransferState(mSendSubId, mDatagramType, mSendDatagramTransferState, mSendPendingCount, mSendErrorCode); mSendSubId.set(subId); mDatagramType.set(datagramType); mSendDatagramTransferState.set(datagramTransferState); mSendPendingCount.set(sendPendingCount); mSendErrorCode.set(errorCode); notifyDatagramTransferStateChangedToSessionController(datagramType); mPointingAppController.updateSendDatagramTransferState(subId, datagramType, datagramTransferState, sendPendingCount, errorCode); retryPollPendingDatagramsInDemoMode(); } } private boolean shouldSuppressDatagramTransferStateUpdate( @SatelliteManager.DatagramType int datagramType) { Loading Loading @@ -318,12 +318,12 @@ public class DatagramController { + " receivePendingCount: " + receivePendingCount + " errorCode: " + errorCode); mReceiveSubId = subId; mDatagramType = datagramType; mDatagramType.set(datagramType); mReceiveDatagramTransferState = datagramTransferState; mReceivePendingCount = receivePendingCount; mReceiveErrorCode = errorCode; notifyDatagramTransferStateChangedToSessionController(mDatagramType); notifyDatagramTransferStateChangedToSessionController(datagramType); mPointingAppController.updateReceiveDatagramTransferState(mReceiveSubId, mReceiveDatagramTransferState, mReceivePendingCount, mReceiveErrorCode); retryPollPendingDatagramsInDemoMode(); Loading Loading @@ -432,11 +432,9 @@ public class DatagramController { } } public boolean isSendingInIdleState() { synchronized (mLock) { return (mSendDatagramTransferState == SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE); } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected boolean isSendingInIdleState() { return mSendDatagramTransferState.get() == SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE; } public boolean isPollingInIdleState() { Loading Loading @@ -598,7 +596,8 @@ public class DatagramController { } else { synchronized (mLock) { sessionController.onDatagramTransferStateChanged( mSendDatagramTransferState, mReceiveDatagramTransferState, datagramType); mSendDatagramTransferState.get(), mReceiveDatagramTransferState, datagramType); } } } Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramControllerTest.java +28 −4 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TR import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING; import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SUCCESS; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; Loading @@ -37,9 +39,9 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import android.annotation.NonNull; import android.content.Context; import android.os.Looper; import android.telephony.satellite.SatelliteDatagram; import android.telephony.satellite.SatelliteManager; Loading @@ -48,6 +50,7 @@ import android.testing.TestableLooper; import com.android.internal.R; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.flags.FeatureFlags; import org.junit.After; import org.junit.Before; Loading @@ -63,7 +66,7 @@ import java.util.function.Consumer; public class DatagramControllerTest extends TelephonyTest { private static final String TAG = "DatagramControllerTest"; private DatagramController mDatagramControllerUT; private TestDatagramController mDatagramControllerUT; @Mock private DatagramReceiver mMockDatagramReceiver; @Mock private DatagramDispatcher mMockDatagramDispatcher; Loading @@ -88,7 +91,7 @@ public class DatagramControllerTest extends TelephonyTest { replaceInstance(SatelliteSessionController.class, "sInstance", null, mMockSatelliteSessionController); when(mMockSatelliteController.isSatelliteAttachRequired()).thenReturn(true); mDatagramControllerUT = new DatagramController( mDatagramControllerUT = new TestDatagramController( mContext, Looper.myLooper(), mFeatureFlags, mMockPointingAppController); // Move both send and receive to IDLE state Loading Loading @@ -336,4 +339,25 @@ public class DatagramControllerTest extends TelephonyTest { mDatagramControllerUT.setDemoMode(true); mDatagramControllerUT.pushDemoModeDatagram(datagramType, datagram); } public static class TestDatagramController extends DatagramController { public TestDatagramController(@NonNull Context context, @NonNull Looper looper, @NonNull FeatureFlags featureFlags, @NonNull PointingAppController pointingAppController) { super(context, looper, featureFlags, pointingAppController); } @Override protected void updateSendStatus(int subId, int datagramType, int datagramTransferState, int sendPendingCount, int errorCode) { super.updateSendStatus(subId, datagramType, datagramTransferState, sendPendingCount, errorCode); } @Override protected boolean isSendingInIdleState() { return super.isSendingInIdleState(); } } }
tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ public class DatagramDispatcherTest extends TelephonyTest { private TestDatagramDispatcher mDatagramDispatcherUT; @Mock private SatelliteController mMockSatelliteController; @Mock private DatagramController mMockDatagramController; @Mock private DatagramControllerTest.TestDatagramController mMockDatagramController; @Mock private DatagramReceiver mMockDatagramReceiver; @Mock private SatelliteModemInterface mMockSatelliteModemInterface; @Mock private ControllerMetricsStats mMockControllerMetricsStats; Loading Loading @@ -166,6 +166,7 @@ public class DatagramDispatcherTest extends TelephonyTest { mMockSessionMetricsStats); when(mFeatureFlags.carrierRoamingNbIotNtn()).thenReturn(true); mDatagramDispatcherUT = new TestDatagramDispatcher(mContext, Looper.myLooper(), mFeatureFlags, mMockDatagramController); Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramReceiverTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ public class DatagramReceiverTest extends TelephonyTest { private TestDatagramReceiver mTestDemoModeDatagramReceiver; @Mock private SatelliteController mMockSatelliteController; @Mock private DatagramController mMockDatagramController; @Mock private DatagramControllerTest.TestDatagramController mMockDatagramController; @Mock private SatelliteModemInterface mMockSatelliteModemInterface; @Mock private ControllerMetricsStats mMockControllerMetricsStats; @Mock private SatelliteSessionController mMockSatelliteSessionController; Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -263,7 +263,7 @@ public class SatelliteControllerTest extends TelephonyTest { private SubscriptionInfo testSubscriptionInfo2; @Mock private SatelliteController mMockSatelliteController; @Mock private DatagramController mMockDatagramController; @Mock private DatagramControllerTest.TestDatagramController mMockDatagramController; @Mock private SatelliteModemInterface mMockSatelliteModemInterface; @Mock private SatelliteSessionController mMockSatelliteSessionController; @Mock private PointingAppController mMockPointingAppController; Loading