Loading src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +73 −84 Original line number Diff line number Diff line Loading @@ -46,7 +46,6 @@ import android.util.Log; import android.util.Pair; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.IIntegerConsumer; Loading Loading @@ -80,8 +79,8 @@ public class DatagramReceiver extends Handler { /** Key used to read/write satellite datagramId in shared preferences. */ private static final String SATELLITE_DATAGRAM_ID_KEY = "satellite_datagram_id_key"; private static AtomicLong mNextDatagramId = new AtomicLong(0); /** All the variables initialized inside the constructor are declared here. */ @NonNull private static DatagramReceiver sInstance; @NonNull private final Context mContext; @NonNull private final ContentResolver mContentResolver; Loading @@ -91,17 +90,23 @@ public class DatagramReceiver extends Handler { @NonNull private final SessionMetricsStats mSessionMetricsStats; @NonNull private final Looper mLooper; @NonNull private final FeatureFlags mFeatureFlags; @Nullable private PersistentLogger mPersistentLogger = null; /** All the atomic variables are declared here. */ private static AtomicLong mNextDatagramId = new AtomicLong(0); private AtomicLong mDatagramTransferStartTime = new AtomicLong(0); private AtomicBoolean mIsDemoMode = new AtomicBoolean(false); private AtomicBoolean mIsAligned = new AtomicBoolean(false); /** * All the variables declared here should only be accessed by methods that run inside the * handler thread. */ @Nullable private DatagramReceiverHandlerRequest mDemoPollPendingSatelliteDatagramsRequest = null; @Nullable private DatagramReceiverHandlerRequest mPendingPollSatelliteDatagramsRequest = null; private final Object mLock = new Object(); @Nullable private PersistentLogger mPersistentLogger = null; /** * Map key: subId, value: SatelliteDatagramListenerHandler to notify registrants. Loading Loading @@ -636,7 +641,6 @@ public class DatagramReceiver extends Handler { } private void handleSatelliteConnectedEvent() { synchronized (mLock) { if (isDatagramWaitForConnectedStateTimerStarted()) { stopDatagramWaitForConnectedStateTimer(); if (mPendingPollSatelliteDatagramsRequest == null) { Loading @@ -652,7 +656,6 @@ public class DatagramReceiver extends Handler { mPendingPollSatelliteDatagramsRequest = null; } } } private void pollPendingSatelliteDatagramsInternal(int subId, @NonNull Consumer<Integer> callback) { Loading @@ -667,7 +670,6 @@ public class DatagramReceiver extends Handler { if (mDatagramController.needsWaitingForSatelliteConnected( SatelliteManager.DATAGRAM_TYPE_UNKNOWN)) { plogd("pollPendingSatelliteDatagramsInternal: wait for satellite connected"); synchronized (mLock) { mPendingPollSatelliteDatagramsRequest = new DatagramReceiverHandlerRequest( callback, SatelliteServiceUtils.getPhone(), subId); mDatagramController.updateReceiveStatus(subId, Loading @@ -676,7 +678,6 @@ public class DatagramReceiver extends Handler { mDatagramController.getReceivePendingCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS); startDatagramWaitForConnectedStateTimer(); } return; } Loading @@ -691,7 +692,6 @@ public class DatagramReceiver extends Handler { if (mIsDemoMode.get()) { DatagramReceiverHandlerRequest request = new DatagramReceiverHandlerRequest( callback, phone, subId); synchronized (mLock) { if (!mDatagramController.waitForAligningToSatellite(mIsAligned.get())) { Message msg = obtainMessage(EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE, request); Loading @@ -700,7 +700,6 @@ public class DatagramReceiver extends Handler { } else { startSatelliteAlignedTimer(request); } } } else { sendRequestAsync(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, callback, phone, subId); } Loading @@ -726,7 +725,6 @@ public class DatagramReceiver extends Handler { private void handleEventSatelliteModemStateChanged( @SatelliteManager.SatelliteModemState int state) { plogd("handleEventSatelliteModemStateChanged: state = " + state); synchronized (mLock) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { plogd("onSatelliteModemStateChanged: cleaning up resources"); Loading @@ -735,9 +733,7 @@ public class DatagramReceiver extends Handler { handleSatelliteConnectedEvent(); } } } @GuardedBy("mLock") private void cleanupDemoModeResources() { if (isSatelliteAlignedTimerStarted()) { stopSatelliteAlignedTimer(); Loading @@ -755,9 +751,7 @@ public class DatagramReceiver extends Handler { mIsAligned.set(false); } @GuardedBy("mLock") private void cleanUpResources() { synchronized (mLock) { if (mPendingPollSatelliteDatagramsRequest != null) { Consumer<Integer> callback = (Consumer<Integer>) mPendingPollSatelliteDatagramsRequest.argument; Loading @@ -765,7 +759,6 @@ public class DatagramReceiver extends Handler { mPendingPollSatelliteDatagramsRequest = null; } stopDatagramWaitForConnectedStateTimer(); } int subId = SatelliteController.getInstance().getSelectedSatelliteSubId(); if (mDatagramController.isReceivingDatagrams()) { Loading Loading @@ -855,12 +848,10 @@ public class DatagramReceiver extends Handler { } private void handleRequestSetDeviceAlignedWithSatellite(boolean isAligned) { synchronized (mLock) { mIsAligned.set(isAligned); plogd("setDeviceAlignedWithSatellite: " + isAligned); if (isAligned && mIsDemoMode.get()) handleEventSatelliteAligned(); } } private void startSatelliteAlignedTimer(DatagramReceiverHandlerRequest request) { if (isSatelliteAlignedTimerStarted()) { Loading Loading @@ -933,7 +924,6 @@ public class DatagramReceiver extends Handler { } private void handleEventDatagramWaitForConnectedStateTimedOut() { synchronized (mLock) { if (mPendingPollSatelliteDatagramsRequest == null) { plogw("handleEventDatagramWaitForConnectedStateTimedOut: " + "mPendingPollSatelliteDatagramsRequest is null"); Loading @@ -960,7 +950,6 @@ public class DatagramReceiver extends Handler { callback.accept(SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); mPendingPollSatelliteDatagramsRequest = null; } } /** * Destroys this DatagramDispatcher. Used for tearing down static resources during testing. Loading Loading
src/java/com/android/internal/telephony/satellite/DatagramReceiver.java +73 −84 Original line number Diff line number Diff line Loading @@ -46,7 +46,6 @@ import android.util.Log; import android.util.Pair; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.IIntegerConsumer; Loading Loading @@ -80,8 +79,8 @@ public class DatagramReceiver extends Handler { /** Key used to read/write satellite datagramId in shared preferences. */ private static final String SATELLITE_DATAGRAM_ID_KEY = "satellite_datagram_id_key"; private static AtomicLong mNextDatagramId = new AtomicLong(0); /** All the variables initialized inside the constructor are declared here. */ @NonNull private static DatagramReceiver sInstance; @NonNull private final Context mContext; @NonNull private final ContentResolver mContentResolver; Loading @@ -91,17 +90,23 @@ public class DatagramReceiver extends Handler { @NonNull private final SessionMetricsStats mSessionMetricsStats; @NonNull private final Looper mLooper; @NonNull private final FeatureFlags mFeatureFlags; @Nullable private PersistentLogger mPersistentLogger = null; /** All the atomic variables are declared here. */ private static AtomicLong mNextDatagramId = new AtomicLong(0); private AtomicLong mDatagramTransferStartTime = new AtomicLong(0); private AtomicBoolean mIsDemoMode = new AtomicBoolean(false); private AtomicBoolean mIsAligned = new AtomicBoolean(false); /** * All the variables declared here should only be accessed by methods that run inside the * handler thread. */ @Nullable private DatagramReceiverHandlerRequest mDemoPollPendingSatelliteDatagramsRequest = null; @Nullable private DatagramReceiverHandlerRequest mPendingPollSatelliteDatagramsRequest = null; private final Object mLock = new Object(); @Nullable private PersistentLogger mPersistentLogger = null; /** * Map key: subId, value: SatelliteDatagramListenerHandler to notify registrants. Loading Loading @@ -636,7 +641,6 @@ public class DatagramReceiver extends Handler { } private void handleSatelliteConnectedEvent() { synchronized (mLock) { if (isDatagramWaitForConnectedStateTimerStarted()) { stopDatagramWaitForConnectedStateTimer(); if (mPendingPollSatelliteDatagramsRequest == null) { Loading @@ -652,7 +656,6 @@ public class DatagramReceiver extends Handler { mPendingPollSatelliteDatagramsRequest = null; } } } private void pollPendingSatelliteDatagramsInternal(int subId, @NonNull Consumer<Integer> callback) { Loading @@ -667,7 +670,6 @@ public class DatagramReceiver extends Handler { if (mDatagramController.needsWaitingForSatelliteConnected( SatelliteManager.DATAGRAM_TYPE_UNKNOWN)) { plogd("pollPendingSatelliteDatagramsInternal: wait for satellite connected"); synchronized (mLock) { mPendingPollSatelliteDatagramsRequest = new DatagramReceiverHandlerRequest( callback, SatelliteServiceUtils.getPhone(), subId); mDatagramController.updateReceiveStatus(subId, Loading @@ -676,7 +678,6 @@ public class DatagramReceiver extends Handler { mDatagramController.getReceivePendingCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS); startDatagramWaitForConnectedStateTimer(); } return; } Loading @@ -691,7 +692,6 @@ public class DatagramReceiver extends Handler { if (mIsDemoMode.get()) { DatagramReceiverHandlerRequest request = new DatagramReceiverHandlerRequest( callback, phone, subId); synchronized (mLock) { if (!mDatagramController.waitForAligningToSatellite(mIsAligned.get())) { Message msg = obtainMessage(EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE, request); Loading @@ -700,7 +700,6 @@ public class DatagramReceiver extends Handler { } else { startSatelliteAlignedTimer(request); } } } else { sendRequestAsync(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, callback, phone, subId); } Loading @@ -726,7 +725,6 @@ public class DatagramReceiver extends Handler { private void handleEventSatelliteModemStateChanged( @SatelliteManager.SatelliteModemState int state) { plogd("handleEventSatelliteModemStateChanged: state = " + state); synchronized (mLock) { if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) { plogd("onSatelliteModemStateChanged: cleaning up resources"); Loading @@ -735,9 +733,7 @@ public class DatagramReceiver extends Handler { handleSatelliteConnectedEvent(); } } } @GuardedBy("mLock") private void cleanupDemoModeResources() { if (isSatelliteAlignedTimerStarted()) { stopSatelliteAlignedTimer(); Loading @@ -755,9 +751,7 @@ public class DatagramReceiver extends Handler { mIsAligned.set(false); } @GuardedBy("mLock") private void cleanUpResources() { synchronized (mLock) { if (mPendingPollSatelliteDatagramsRequest != null) { Consumer<Integer> callback = (Consumer<Integer>) mPendingPollSatelliteDatagramsRequest.argument; Loading @@ -765,7 +759,6 @@ public class DatagramReceiver extends Handler { mPendingPollSatelliteDatagramsRequest = null; } stopDatagramWaitForConnectedStateTimer(); } int subId = SatelliteController.getInstance().getSelectedSatelliteSubId(); if (mDatagramController.isReceivingDatagrams()) { Loading Loading @@ -855,12 +848,10 @@ public class DatagramReceiver extends Handler { } private void handleRequestSetDeviceAlignedWithSatellite(boolean isAligned) { synchronized (mLock) { mIsAligned.set(isAligned); plogd("setDeviceAlignedWithSatellite: " + isAligned); if (isAligned && mIsDemoMode.get()) handleEventSatelliteAligned(); } } private void startSatelliteAlignedTimer(DatagramReceiverHandlerRequest request) { if (isSatelliteAlignedTimerStarted()) { Loading Loading @@ -933,7 +924,6 @@ public class DatagramReceiver extends Handler { } private void handleEventDatagramWaitForConnectedStateTimedOut() { synchronized (mLock) { if (mPendingPollSatelliteDatagramsRequest == null) { plogw("handleEventDatagramWaitForConnectedStateTimedOut: " + "mPendingPollSatelliteDatagramsRequest is null"); Loading @@ -960,7 +950,6 @@ public class DatagramReceiver extends Handler { callback.accept(SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE); mPendingPollSatelliteDatagramsRequest = null; } } /** * Destroys this DatagramDispatcher. Used for tearing down static resources during testing. Loading