Loading src/java/com/android/internal/telephony/satellite/DatagramController.java +30 −9 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; Loading @@ -59,6 +61,8 @@ public class DatagramController { public static final int TIMEOUT_TYPE_DATAGRAM_WAIT_FOR_CONNECTED_STATE = 2; /** This type is used by CTS to override the time to wait for response of the send request */ public static final int TIMEOUT_TYPE_WAIT_FOR_DATAGRAM_SENDING_RESPONSE = 3; /** This type is used by CTS to override the time to datagram delay in demo mode */ public static final int TIMEOUT_TYPE_DATAGRAM_DELAY_IN_DEMO_MODE = 4; private static final String ALLOW_MOCK_MODEM_PROPERTY = "persist.radio.allow_mock_modem"; private static final boolean DEBUG = !"user".equals(Build.TYPE); Loading @@ -83,8 +87,8 @@ public class DatagramController { private int mReceivePendingCount = 0; @GuardedBy("mLock") private int mReceiveErrorCode = SatelliteManager.SATELLITE_RESULT_SUCCESS; private SatelliteDatagram mDemoModeDatagram; @GuardedBy("mLock") private final List<SatelliteDatagram> mDemoModeDatagramList; private boolean mIsDemoMode = false; private long mAlignTimeoutDuration = SATELLITE_ALIGN_TIMEOUT; private long mDatagramWaitTimeForConnectedState; Loading Loading @@ -143,6 +147,7 @@ public class DatagramController { mDatagramWaitTimeForConnectedState = getDatagramWaitForConnectedStateTimeoutMillis(); mModemImageSwitchingDuration = getSatelliteModemImageSwitchingDurationMillis(); mDemoModeDatagramList = new ArrayList<>(); } /** Loading Loading @@ -208,7 +213,7 @@ public class DatagramController { public void sendSatelliteDatagram(int subId, @SatelliteManager.DatagramType int datagramType, @NonNull SatelliteDatagram datagram, boolean needFullScreenPointingUI, @NonNull Consumer<Integer> callback) { setDemoModeDatagram(datagramType, datagram); pushDemoModeDatagram(datagramType, datagram); mDatagramDispatcher.sendSatelliteDatagram(subId, datagramType, datagram, needFullScreenPointingUI, callback); } Loading Loading @@ -349,14 +354,25 @@ public class DatagramController { mDatagramReceiver.setDemoMode(isDemoMode); if (!isDemoMode) { mDemoModeDatagram = null; synchronized (mLock) { mDemoModeDatagramList.clear(); } setDeviceAlignedWithSatellite(false); } logd("setDemoMode: mIsDemoMode=" + mIsDemoMode); } /** Get the last sent datagram for demo mode */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public SatelliteDatagram getDemoModeDatagram() { return mDemoModeDatagram; public SatelliteDatagram popDemoModeDatagram() { if (!mIsDemoMode) { return null; } synchronized (mLock) { logd("popDemoModeDatagram"); return mDemoModeDatagramList.size() > 0 ? mDemoModeDatagramList.remove(0) : null; } } /** Loading @@ -365,10 +381,13 @@ public class DatagramController { * @param datagram datagram The last datagram saved when sendSatelliteDatagramForDemo is called */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) protected void setDemoModeDatagram(@SatelliteManager.DatagramType int datagramType, protected void pushDemoModeDatagram(@SatelliteManager.DatagramType int datagramType, SatelliteDatagram datagram) { if (mIsDemoMode && datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) { mDemoModeDatagram = datagram; synchronized (mLock) { mDemoModeDatagramList.add(datagram); logd("pushDemoModeDatagram size=" + mDemoModeDatagramList.size()); } } } Loading Loading @@ -419,6 +438,8 @@ public class DatagramController { } } else if (timeoutType == TIMEOUT_TYPE_WAIT_FOR_DATAGRAM_SENDING_RESPONSE) { mDatagramDispatcher.setWaitTimeForDatagramSendingResponse(reset, timeoutMillis); } else if (timeoutType == TIMEOUT_TYPE_DATAGRAM_DELAY_IN_DEMO_MODE) { mDatagramDispatcher.setTimeoutDatagramDelayInDemoMode(reset, timeoutMillis); } else { loge("Invalid timeout type " + timeoutType); return false; Loading src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +61 −9 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import com.android.internal.telephony.satellite.metrics.ControllerMetricsStats; import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; Loading @@ -61,7 +62,8 @@ public class DatagramDispatcher extends Handler { private static final int EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT = 4; private static final int EVENT_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_TIMED_OUT = 5; private static final int EVENT_ABORT_SENDING_SATELLITE_DATAGRAMS_DONE = 6; private static final int CMD_POLL_PENDING_SATELLITE_DATAGRAMS = 7; private static final Long TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE = TimeUnit.SECONDS.toMillis(10); @NonNull private static DatagramDispatcher sInstance; @NonNull private final Context mContext; @NonNull private final DatagramController mDatagramController; Loading @@ -76,6 +78,7 @@ public class DatagramDispatcher extends Handler { private AtomicBoolean mShouldSendDatagramToModemInDemoMode = null; private final Object mLock = new Object(); private long mDemoTimeoutDuration = TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE; @GuardedBy("mLock") private boolean mSendingDatagramInProgress; Loading Loading @@ -196,7 +199,9 @@ public class DatagramDispatcher extends Handler { switch(msg.what) { case CMD_SEND_SATELLITE_DATAGRAM: { logd("CMD_SEND_SATELLITE_DATAGRAM"); logd("CMD_SEND_SATELLITE_DATAGRAM mIsDemoMode=" + mIsDemoMode + ", shouldSendDatagramToModemInDemoMode=" + shouldSendDatagramToModemInDemoMode()); request = (DatagramDispatcherHandlerRequest) msg.obj; SendSatelliteDatagramArgument argument = (SendSatelliteDatagramArgument) request.argument; Loading @@ -205,7 +210,7 @@ public class DatagramDispatcher extends Handler { synchronized (mLock) { if (mIsDemoMode && !shouldSendDatagramToModemInDemoMode()) { AsyncResult.forMessage(onCompleted, SATELLITE_RESULT_SUCCESS, null); onCompleted.sendToTarget(); sendMessageDelayed(onCompleted, getDemoTimeoutDuration()); } else { SatelliteModemInterface.getInstance().sendSatelliteDatagram( argument.datagram, Loading Loading @@ -266,7 +271,11 @@ public class DatagramDispatcher extends Handler { getPendingDatagramCount(), error); mControllerMetricsStats.reportOutgoingDatagramSuccessCount( argument.datagramType); if (mIsDemoMode) { sendMessageDelayed( obtainMessage(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, request), getDemoTimeoutDuration()); } if (getPendingDatagramCount() > 0) { // Send response for current datagram argument.callback.accept(error); Loading Loading @@ -314,6 +323,15 @@ public class DatagramDispatcher extends Handler { handleEventDatagramWaitForConnectedStateTimedOut(); break; case CMD_POLL_PENDING_SATELLITE_DATAGRAMS: if (mIsDemoMode) { request = (DatagramDispatcherHandlerRequest) msg.obj; SendSatelliteDatagramArgument argument = (SendSatelliteDatagramArgument) request.argument; pollPendingSatelliteDatagrams(argument.subId); } break; default: logw("DatagramDispatcherHandler: unexpected message code: " + msg.what); break; Loading Loading @@ -392,15 +410,15 @@ public class DatagramDispatcher extends Handler { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void setDemoMode(boolean isDemoMode) { mIsDemoMode = isDemoMode; logd("setDemoMode: mIsDemoMode=" + mIsDemoMode); } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void setDeviceAlignedWithSatellite(boolean isAligned) { if (mIsDemoMode) { synchronized (mLock) { mIsAligned = isAligned; if (isAligned) handleEventSatelliteAligned(); } logd("setDeviceAlignedWithSatellite: " + mIsAligned); if (isAligned && mIsDemoMode) handleEventSatelliteAligned(); } } Loading Loading @@ -435,12 +453,15 @@ public class DatagramDispatcher extends Handler { mSendSatelliteDatagramRequest = null; AsyncResult.forMessage(message, null, null); message.sendToTarget(); logd("handleEventSatelliteAligned: EVENT_SEND_SATELLITE_DATAGRAM_DONE"); } } } private void handleEventSatelliteAlignedTimeout( @NonNull DatagramDispatcherHandlerRequest request) { logd("handleEventSatelliteAlignedTimeout"); mSendSatelliteDatagramRequest = null; SatelliteManager.SatelliteException exception = new SatelliteManager.SatelliteException( SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); Loading Loading @@ -608,6 +629,7 @@ public class DatagramDispatcher extends Handler { @GuardedBy("mLock") private void cleanUpResources() { logd("cleanUpResources"); mSendingDatagramInProgress = false; if (getPendingDatagramCount() > 0) { mDatagramController.updateSendStatus( Loading Loading @@ -789,6 +811,36 @@ public class DatagramDispatcher extends Handler { } } private void pollPendingSatelliteDatagrams(int subId) { logd("pollPendingSatelliteDatagrams"); Consumer<Integer> internalCallback = new Consumer<Integer>() { @Override public void accept(Integer result) { logd("pollPendingSatelliteDatagrams result: " + result); } }; mDatagramController.pollPendingSatelliteDatagrams(subId, internalCallback); } long getDemoTimeoutDuration() { return mDemoTimeoutDuration; } /** * This API is used by CTS tests to override the mDemoTimeoutDuration. */ void setTimeoutDatagramDelayInDemoMode(boolean reset, long timeoutMillis) { if (!mIsDemoMode) { return; } if (reset) { mDemoTimeoutDuration = TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE; } else { mDemoTimeoutDuration = timeoutMillis; } logd("setTimeoutDatagramDelayInDemoMode " + mDemoTimeoutDuration + " reset=" + reset); } private static void logd(@NonNull String log) { Rlog.d(TAG, log); } Loading src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +5 −6 Original line number Diff line number Diff line Loading @@ -439,7 +439,7 @@ public class DatagramReceiver extends Handler { "pollPendingSatelliteDatagrams"); if (mIsDemoMode && error == SatelliteManager.SATELLITE_RESULT_SUCCESS) { SatelliteDatagram datagram = mDatagramController.getDemoModeDatagram(); SatelliteDatagram datagram = mDatagramController.popDemoModeDatagram(); final int validSubId = SatelliteServiceUtils.getValidSatelliteSubId( request.subId, mContext); SatelliteDatagramListenerHandler listenerHandler = Loading Loading @@ -744,11 +744,10 @@ public class DatagramReceiver extends Handler { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void setDeviceAlignedWithSatellite(boolean isAligned) { if (mIsDemoMode) { synchronized (mLock) { mIsAligned = isAligned; if (isAligned) handleEventSatelliteAligned(); } logd("setDeviceAlignedWithSatellite: " + mIsAligned); if (isAligned && mIsDemoMode) handleEventSatelliteAligned(); } } Loading src/java/com/android/internal/telephony/satellite/SatelliteController.java +1 −0 Original line number Diff line number Diff line Loading @@ -3213,6 +3213,7 @@ public class SatelliteController extends Handler { private void setDemoModeEnabled(boolean enabled) { mIsDemoModeEnabled = enabled; mDatagramController.setDemoMode(mIsDemoModeEnabled); logd("setDemoModeEnabled: mIsDemoModeEnabled=" + mIsDemoModeEnabled); } private boolean isMockModemAllowed() { Loading tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ public class DatagramDispatcherTest extends TelephonyTest { (int) TimeUnit.SECONDS.toMillis(180); 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 DatagramDispatcher mDatagramDispatcherUT; private TestDatagramDispatcher mTestDemoModeDatagramDispatcher; Loading Loading @@ -409,6 +410,8 @@ public class DatagramDispatcherTest extends TelephonyTest { true, mResultListener::offer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); mInOrder.verify(mMockDatagramController) .updateSendStatus(eq(SUB_ID), Loading Loading @@ -484,6 +487,8 @@ public class DatagramDispatcherTest extends TelephonyTest { true, mResultListener::offer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); mInOrder.verify(mMockDatagramController) .updateSendStatus(eq(SUB_ID), Loading Loading @@ -597,6 +602,11 @@ public class DatagramDispatcherTest extends TelephonyTest { mTestDemoModeDatagramDispatcher.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram, true, mIntegerConsumer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); verify(mMockDatagramController).pollPendingSatelliteDatagrams(anyInt(), any()); waitForIntegerConsumerResult(1); assertEquals(SatelliteManager.SATELLITE_RESULT_SUCCESS, (int) mIntegerConsumerResult.get(0)); Loading @@ -609,6 +619,11 @@ public class DatagramDispatcherTest extends TelephonyTest { mTestDemoModeDatagramDispatcher.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram, true, mIntegerConsumer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); verify(mMockDatagramController, times(2)).pollPendingSatelliteDatagrams(anyInt(), any()); waitForIntegerConsumerResult(1); assertEquals(SatelliteManager.SATELLITE_RESULT_SUCCESS, (int) mIntegerConsumerResult.get(0)); Loading Loading
src/java/com/android/internal/telephony/satellite/DatagramController.java +30 −9 Original line number Diff line number Diff line Loading @@ -35,6 +35,8 @@ import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; Loading @@ -59,6 +61,8 @@ public class DatagramController { public static final int TIMEOUT_TYPE_DATAGRAM_WAIT_FOR_CONNECTED_STATE = 2; /** This type is used by CTS to override the time to wait for response of the send request */ public static final int TIMEOUT_TYPE_WAIT_FOR_DATAGRAM_SENDING_RESPONSE = 3; /** This type is used by CTS to override the time to datagram delay in demo mode */ public static final int TIMEOUT_TYPE_DATAGRAM_DELAY_IN_DEMO_MODE = 4; private static final String ALLOW_MOCK_MODEM_PROPERTY = "persist.radio.allow_mock_modem"; private static final boolean DEBUG = !"user".equals(Build.TYPE); Loading @@ -83,8 +87,8 @@ public class DatagramController { private int mReceivePendingCount = 0; @GuardedBy("mLock") private int mReceiveErrorCode = SatelliteManager.SATELLITE_RESULT_SUCCESS; private SatelliteDatagram mDemoModeDatagram; @GuardedBy("mLock") private final List<SatelliteDatagram> mDemoModeDatagramList; private boolean mIsDemoMode = false; private long mAlignTimeoutDuration = SATELLITE_ALIGN_TIMEOUT; private long mDatagramWaitTimeForConnectedState; Loading Loading @@ -143,6 +147,7 @@ public class DatagramController { mDatagramWaitTimeForConnectedState = getDatagramWaitForConnectedStateTimeoutMillis(); mModemImageSwitchingDuration = getSatelliteModemImageSwitchingDurationMillis(); mDemoModeDatagramList = new ArrayList<>(); } /** Loading Loading @@ -208,7 +213,7 @@ public class DatagramController { public void sendSatelliteDatagram(int subId, @SatelliteManager.DatagramType int datagramType, @NonNull SatelliteDatagram datagram, boolean needFullScreenPointingUI, @NonNull Consumer<Integer> callback) { setDemoModeDatagram(datagramType, datagram); pushDemoModeDatagram(datagramType, datagram); mDatagramDispatcher.sendSatelliteDatagram(subId, datagramType, datagram, needFullScreenPointingUI, callback); } Loading Loading @@ -349,14 +354,25 @@ public class DatagramController { mDatagramReceiver.setDemoMode(isDemoMode); if (!isDemoMode) { mDemoModeDatagram = null; synchronized (mLock) { mDemoModeDatagramList.clear(); } setDeviceAlignedWithSatellite(false); } logd("setDemoMode: mIsDemoMode=" + mIsDemoMode); } /** Get the last sent datagram for demo mode */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public SatelliteDatagram getDemoModeDatagram() { return mDemoModeDatagram; public SatelliteDatagram popDemoModeDatagram() { if (!mIsDemoMode) { return null; } synchronized (mLock) { logd("popDemoModeDatagram"); return mDemoModeDatagramList.size() > 0 ? mDemoModeDatagramList.remove(0) : null; } } /** Loading @@ -365,10 +381,13 @@ public class DatagramController { * @param datagram datagram The last datagram saved when sendSatelliteDatagramForDemo is called */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) protected void setDemoModeDatagram(@SatelliteManager.DatagramType int datagramType, protected void pushDemoModeDatagram(@SatelliteManager.DatagramType int datagramType, SatelliteDatagram datagram) { if (mIsDemoMode && datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) { mDemoModeDatagram = datagram; synchronized (mLock) { mDemoModeDatagramList.add(datagram); logd("pushDemoModeDatagram size=" + mDemoModeDatagramList.size()); } } } Loading Loading @@ -419,6 +438,8 @@ public class DatagramController { } } else if (timeoutType == TIMEOUT_TYPE_WAIT_FOR_DATAGRAM_SENDING_RESPONSE) { mDatagramDispatcher.setWaitTimeForDatagramSendingResponse(reset, timeoutMillis); } else if (timeoutType == TIMEOUT_TYPE_DATAGRAM_DELAY_IN_DEMO_MODE) { mDatagramDispatcher.setTimeoutDatagramDelayInDemoMode(reset, timeoutMillis); } else { loge("Invalid timeout type " + timeoutType); return false; Loading
src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +61 −9 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import com.android.internal.telephony.satellite.metrics.ControllerMetricsStats; import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; Loading @@ -61,7 +62,8 @@ public class DatagramDispatcher extends Handler { private static final int EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT = 4; private static final int EVENT_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_TIMED_OUT = 5; private static final int EVENT_ABORT_SENDING_SATELLITE_DATAGRAMS_DONE = 6; private static final int CMD_POLL_PENDING_SATELLITE_DATAGRAMS = 7; private static final Long TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE = TimeUnit.SECONDS.toMillis(10); @NonNull private static DatagramDispatcher sInstance; @NonNull private final Context mContext; @NonNull private final DatagramController mDatagramController; Loading @@ -76,6 +78,7 @@ public class DatagramDispatcher extends Handler { private AtomicBoolean mShouldSendDatagramToModemInDemoMode = null; private final Object mLock = new Object(); private long mDemoTimeoutDuration = TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE; @GuardedBy("mLock") private boolean mSendingDatagramInProgress; Loading Loading @@ -196,7 +199,9 @@ public class DatagramDispatcher extends Handler { switch(msg.what) { case CMD_SEND_SATELLITE_DATAGRAM: { logd("CMD_SEND_SATELLITE_DATAGRAM"); logd("CMD_SEND_SATELLITE_DATAGRAM mIsDemoMode=" + mIsDemoMode + ", shouldSendDatagramToModemInDemoMode=" + shouldSendDatagramToModemInDemoMode()); request = (DatagramDispatcherHandlerRequest) msg.obj; SendSatelliteDatagramArgument argument = (SendSatelliteDatagramArgument) request.argument; Loading @@ -205,7 +210,7 @@ public class DatagramDispatcher extends Handler { synchronized (mLock) { if (mIsDemoMode && !shouldSendDatagramToModemInDemoMode()) { AsyncResult.forMessage(onCompleted, SATELLITE_RESULT_SUCCESS, null); onCompleted.sendToTarget(); sendMessageDelayed(onCompleted, getDemoTimeoutDuration()); } else { SatelliteModemInterface.getInstance().sendSatelliteDatagram( argument.datagram, Loading Loading @@ -266,7 +271,11 @@ public class DatagramDispatcher extends Handler { getPendingDatagramCount(), error); mControllerMetricsStats.reportOutgoingDatagramSuccessCount( argument.datagramType); if (mIsDemoMode) { sendMessageDelayed( obtainMessage(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, request), getDemoTimeoutDuration()); } if (getPendingDatagramCount() > 0) { // Send response for current datagram argument.callback.accept(error); Loading Loading @@ -314,6 +323,15 @@ public class DatagramDispatcher extends Handler { handleEventDatagramWaitForConnectedStateTimedOut(); break; case CMD_POLL_PENDING_SATELLITE_DATAGRAMS: if (mIsDemoMode) { request = (DatagramDispatcherHandlerRequest) msg.obj; SendSatelliteDatagramArgument argument = (SendSatelliteDatagramArgument) request.argument; pollPendingSatelliteDatagrams(argument.subId); } break; default: logw("DatagramDispatcherHandler: unexpected message code: " + msg.what); break; Loading Loading @@ -392,15 +410,15 @@ public class DatagramDispatcher extends Handler { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void setDemoMode(boolean isDemoMode) { mIsDemoMode = isDemoMode; logd("setDemoMode: mIsDemoMode=" + mIsDemoMode); } @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void setDeviceAlignedWithSatellite(boolean isAligned) { if (mIsDemoMode) { synchronized (mLock) { mIsAligned = isAligned; if (isAligned) handleEventSatelliteAligned(); } logd("setDeviceAlignedWithSatellite: " + mIsAligned); if (isAligned && mIsDemoMode) handleEventSatelliteAligned(); } } Loading Loading @@ -435,12 +453,15 @@ public class DatagramDispatcher extends Handler { mSendSatelliteDatagramRequest = null; AsyncResult.forMessage(message, null, null); message.sendToTarget(); logd("handleEventSatelliteAligned: EVENT_SEND_SATELLITE_DATAGRAM_DONE"); } } } private void handleEventSatelliteAlignedTimeout( @NonNull DatagramDispatcherHandlerRequest request) { logd("handleEventSatelliteAlignedTimeout"); mSendSatelliteDatagramRequest = null; SatelliteManager.SatelliteException exception = new SatelliteManager.SatelliteException( SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); Loading Loading @@ -608,6 +629,7 @@ public class DatagramDispatcher extends Handler { @GuardedBy("mLock") private void cleanUpResources() { logd("cleanUpResources"); mSendingDatagramInProgress = false; if (getPendingDatagramCount() > 0) { mDatagramController.updateSendStatus( Loading Loading @@ -789,6 +811,36 @@ public class DatagramDispatcher extends Handler { } } private void pollPendingSatelliteDatagrams(int subId) { logd("pollPendingSatelliteDatagrams"); Consumer<Integer> internalCallback = new Consumer<Integer>() { @Override public void accept(Integer result) { logd("pollPendingSatelliteDatagrams result: " + result); } }; mDatagramController.pollPendingSatelliteDatagrams(subId, internalCallback); } long getDemoTimeoutDuration() { return mDemoTimeoutDuration; } /** * This API is used by CTS tests to override the mDemoTimeoutDuration. */ void setTimeoutDatagramDelayInDemoMode(boolean reset, long timeoutMillis) { if (!mIsDemoMode) { return; } if (reset) { mDemoTimeoutDuration = TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE; } else { mDemoTimeoutDuration = timeoutMillis; } logd("setTimeoutDatagramDelayInDemoMode " + mDemoTimeoutDuration + " reset=" + reset); } private static void logd(@NonNull String log) { Rlog.d(TAG, log); } Loading
src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +5 −6 Original line number Diff line number Diff line Loading @@ -439,7 +439,7 @@ public class DatagramReceiver extends Handler { "pollPendingSatelliteDatagrams"); if (mIsDemoMode && error == SatelliteManager.SATELLITE_RESULT_SUCCESS) { SatelliteDatagram datagram = mDatagramController.getDemoModeDatagram(); SatelliteDatagram datagram = mDatagramController.popDemoModeDatagram(); final int validSubId = SatelliteServiceUtils.getValidSatelliteSubId( request.subId, mContext); SatelliteDatagramListenerHandler listenerHandler = Loading Loading @@ -744,11 +744,10 @@ public class DatagramReceiver extends Handler { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) protected void setDeviceAlignedWithSatellite(boolean isAligned) { if (mIsDemoMode) { synchronized (mLock) { mIsAligned = isAligned; if (isAligned) handleEventSatelliteAligned(); } logd("setDeviceAlignedWithSatellite: " + mIsAligned); if (isAligned && mIsDemoMode) handleEventSatelliteAligned(); } } Loading
src/java/com/android/internal/telephony/satellite/SatelliteController.java +1 −0 Original line number Diff line number Diff line Loading @@ -3213,6 +3213,7 @@ public class SatelliteController extends Handler { private void setDemoModeEnabled(boolean enabled) { mIsDemoModeEnabled = enabled; mDatagramController.setDemoMode(mIsDemoModeEnabled); logd("setDemoModeEnabled: mIsDemoModeEnabled=" + mIsDemoModeEnabled); } private boolean isMockModemAllowed() { Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/DatagramDispatcherTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ public class DatagramDispatcherTest extends TelephonyTest { (int) TimeUnit.SECONDS.toMillis(180); 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 DatagramDispatcher mDatagramDispatcherUT; private TestDatagramDispatcher mTestDemoModeDatagramDispatcher; Loading Loading @@ -409,6 +410,8 @@ public class DatagramDispatcherTest extends TelephonyTest { true, mResultListener::offer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); mInOrder.verify(mMockDatagramController) .updateSendStatus(eq(SUB_ID), Loading Loading @@ -484,6 +487,8 @@ public class DatagramDispatcherTest extends TelephonyTest { true, mResultListener::offer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); mInOrder.verify(mMockDatagramController) .updateSendStatus(eq(SUB_ID), Loading Loading @@ -597,6 +602,11 @@ public class DatagramDispatcherTest extends TelephonyTest { mTestDemoModeDatagramDispatcher.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram, true, mIntegerConsumer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); verify(mMockDatagramController).pollPendingSatelliteDatagrams(anyInt(), any()); waitForIntegerConsumerResult(1); assertEquals(SatelliteManager.SATELLITE_RESULT_SUCCESS, (int) mIntegerConsumerResult.get(0)); Loading @@ -609,6 +619,11 @@ public class DatagramDispatcherTest extends TelephonyTest { mTestDemoModeDatagramDispatcher.sendSatelliteDatagram(SUB_ID, DATAGRAM_TYPE1, mDatagram, true, mIntegerConsumer); processAllMessages(); moveTimeForward(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE); processAllMessages(); verify(mMockDatagramController, times(2)).pollPendingSatelliteDatagrams(anyInt(), any()); waitForIntegerConsumerResult(1); assertEquals(SatelliteManager.SATELLITE_RESULT_SUCCESS, (int) mIntegerConsumerResult.get(0)); Loading