Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7972e038 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 13410570 from 1802a19f to 25Q3-release

Change-Id: I47226ebb3ac0bf86e6259609b9cc0ee86d380142
parents 4b716724 1802a19f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ flag {
    }
}

# OWNER=yomna TARGET=25Q4
flag {
    name: "vendor_specific_cellular_identifier_disclosure_indications"
    is_exported: true
+3 −2
Original line number Diff line number Diff line
@@ -2552,8 +2552,9 @@ public class DataNetwork extends StateMachine {
                // the MMS capability from this cellular network. This will allow IWLAN to be
                // brought up for MMS later.
                if (dataProfile != null && !dataProfile.getApn().equals(mDataProfile.getApn())) {
                    log("Found a different apn name " + mDataProfile.getApn()
                            + " that can serve MMS on IWLAN.");
                    log("Found a different apn name " + dataProfile.getApn()
                            + " that can serve MMS on IWLAN. Current data profile "
                            + mDataProfile.getApn());
                    builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
                }
            }
+22 −15
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ public class DatagramController {
    @NonNull private final PointingAppController mPointingAppController;
    @NonNull private final DatagramDispatcher mDatagramDispatcher;
    @NonNull private final DatagramReceiver mDatagramReceiver;
    @Nullable private PersistentLogger mPersistentLogger = null;

    public static final long MAX_DATAGRAM_ID = (long) Math.pow(2, 16);
    public static final int ROUNDING_UNIT = 10;
@@ -82,6 +83,7 @@ public class DatagramController {
    private static final String ALLOW_MOCK_MODEM_PROPERTY = "persist.radio.allow_mock_modem";
    private static final boolean DEBUG = !"user".equals(Build.TYPE);

    /** All the atomic variables are declared here. */
    /** Variables used to update onSendDatagramStateChanged(). */
    private AtomicInteger mSendSubId = new AtomicInteger(0);
    private @SatelliteManager.DatagramType AtomicInteger mDatagramType =
@@ -99,9 +101,6 @@ public class DatagramController {
    private AtomicInteger mReceivePendingCount = new AtomicInteger(0);
    private AtomicInteger mReceiveErrorCode =
            new AtomicInteger(SatelliteManager.SATELLITE_RESULT_SUCCESS);
    private final Object mLock = new Object();
    @GuardedBy("mLock")
    private final List<SatelliteDatagram> mDemoModeDatagramList;
    private AtomicBoolean mIsDemoMode = new AtomicBoolean(false);
    private AtomicLong mAlignTimeoutDuration = new AtomicLong(SATELLITE_ALIGN_TIMEOUT);
    private AtomicLong mDatagramWaitTimeForConnectedState = new AtomicLong(0);
@@ -111,13 +110,16 @@ public class DatagramController {
    @SatelliteManager.SatelliteModemState
    private AtomicInteger mSatelltieModemState =
            new AtomicInteger(SatelliteManager.SATELLITE_MODEM_STATE_UNKNOWN);
    @Nullable
    private PersistentLogger mPersistentLogger = null;

    /** All the variables protected by lock are declared here. */
    private final Object mLock = new Object();
    @GuardedBy("mLock")
    private final List<SatelliteDatagram> mDemoModeDatagramList;

    /**
     * @return The singleton instance of DatagramController.
     */
    public static DatagramController getInstance() {
    static DatagramController getInstance() {
        if (sInstance == null) {
            loge("DatagramController was not yet initialized.");
        }
@@ -133,7 +135,7 @@ public class DatagramController {
     *                              PointingApp about datagram transfer state changes.
     * @return The singleton instance of DatagramController.
     */
    public static DatagramController make(@NonNull Context context, @NonNull Looper looper,
    static DatagramController make(@NonNull Context context, @NonNull Looper looper,
            @NonNull FeatureFlags featureFlags,
            @NonNull PointingAppController pointingAppController) {
        if (sInstance == null) {
@@ -188,7 +190,8 @@ public class DatagramController {
     *
     * @return The {@link SatelliteManager.SatelliteResult} result of the operation.
     */
    @SatelliteManager.SatelliteResult public int registerForSatelliteDatagram(int subId,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    @SatelliteManager.SatelliteResult protected int registerForSatelliteDatagram(int subId,
            @NonNull ISatelliteDatagramCallback callback) {
        return mDatagramReceiver.registerForSatelliteDatagram(subId, callback);
    }
@@ -201,7 +204,8 @@ public class DatagramController {
     * @param callback The callback that was passed to
     *                 {@link #registerForSatelliteDatagram(int, ISatelliteDatagramCallback)}.
     */
    public void unregisterForSatelliteDatagram(int subId,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void unregisterForSatelliteDatagram(int subId,
            @NonNull ISatelliteDatagramCallback callback) {
        mDatagramReceiver.unregisterForSatelliteDatagram(subId, callback);
    }
@@ -217,7 +221,8 @@ public class DatagramController {
     * @param subId The subId of the subscription used for receiving datagrams.
     * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request.
     */
    public void pollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void pollPendingSatelliteDatagrams(int subId, @NonNull Consumer<Integer> callback) {
        plogd("pollPendingSatelliteDatagrams");
        mDatagramReceiver.pollPendingSatelliteDatagrams(subId, callback);
    }
@@ -241,7 +246,8 @@ public class DatagramController {
     *                                 full screen mode.
     * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request.
     */
    public void sendSatelliteDatagram(int subId, @SatelliteManager.DatagramType int datagramType,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void sendSatelliteDatagram(int subId, @SatelliteManager.DatagramType int datagramType,
            @NonNull SatelliteDatagram datagram, boolean needFullScreenPointingUI,
            @NonNull Consumer<Integer> callback) {
        mDatagramDispatcher.sendSatelliteDatagram(subId, datagramType, datagram,
@@ -343,7 +349,8 @@ public class DatagramController {


    /** @return {@code true} if already sent an emergency datagram during a session. */
    public boolean isEmergencyCommunicationEstablished() {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected boolean isEmergencyCommunicationEstablished() {
        return mDatagramDispatcher.isEmergencyCommunicationEstablished();
    }

@@ -365,7 +372,7 @@ public class DatagramController {
     *
     * @param subId The subId of the subscription used to receive SMS
     */
    public void onSmsReceived(int subId) {
    void onSmsReceived(int subId) {
        // To keep exist notification flow, need to call with each state.
        updateReceiveStatus(subId, SatelliteManager.DATAGRAM_TYPE_SMS,
                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING,
@@ -382,7 +389,7 @@ public class DatagramController {
     * Set whether the device is aligned with the satellite.
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public void setDeviceAlignedWithSatellite(boolean isAligned) {
    protected void setDeviceAlignedWithSatellite(boolean isAligned) {
        mDatagramDispatcher.setDeviceAlignedWithSatellite(isAligned);
        mDatagramReceiver.setDeviceAlignedWithSatellite(isAligned);
        if (isAligned) {
@@ -654,7 +661,7 @@ public class DatagramController {
     * and it is required to wait for alignment else {@code false}
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public boolean waitForAligningToSatellite(boolean isAligned) {
    protected boolean waitForAligningToSatellite(boolean isAligned) {
        if (isAligned) {
            return false;
        }
+33 −49
Original line number Diff line number Diff line
@@ -107,6 +107,12 @@ public class DatagramDispatcher extends Handler {
    private AtomicLong mWaitTimeForDatagramSendingForLastMessageResponse = new AtomicLong(0);
    @SatelliteManager.DatagramType
    private AtomicInteger mLastSendRequestDatagramType = new AtomicInteger(DATAGRAM_TYPE_UNKNOWN);
    private AtomicInteger mModemState = new AtomicInteger(SATELLITE_MODEM_STATE_UNKNOWN);
    private AtomicBoolean mHasEnteredConnectedState = new AtomicBoolean(false);
    private AtomicBoolean mShouldPollMtSms = new AtomicBoolean(false);
    private AtomicBoolean mIsMtSmsPollingThrottled = new AtomicBoolean(false);
    private AtomicInteger mConnectedStateCounter = new AtomicInteger(0);
    private AtomicLong mSmsTransmissionStartTime = new AtomicLong(0);

    private DatagramDispatcherHandlerRequest mSendSatelliteDatagramRequest = null;
    private final Object mLock = new Object();
@@ -131,18 +137,6 @@ public class DatagramDispatcher extends Handler {
    @GuardedBy("mLock")
    private final LinkedHashMap<Long, PendingRequest> mPendingSmsMap = new LinkedHashMap<>();

    @GuardedBy("mLock")
    private int mModemState = SATELLITE_MODEM_STATE_UNKNOWN;
    @GuardedBy("mLock")
    private boolean mHasEnteredConnectedState = false;
    @GuardedBy("mLock")
    private boolean mShouldPollMtSms = false;
    @GuardedBy("mLock")
    private boolean mIsMtSmsPollingThrottled = false;
    @GuardedBy("mLock")
    private int mConnectedStateCounter = 0;
    private long mSmsTransmissionStartTime = 0;

    /**
     * Create the DatagramDispatcher singleton instance.
     * @param context The Context to use to create the DatagramDispatcher.
@@ -395,7 +389,7 @@ public class DatagramDispatcher extends Handler {
                    return;
                }

                mSmsTransmissionStartTime = System.currentTimeMillis();
                mSmsTransmissionStartTime.set(System.currentTimeMillis());
                smsDispatchersController.sendCarrierRoamingNbIotNtnText(pendingRequest);
                break;
            }
@@ -414,9 +408,7 @@ public class DatagramDispatcher extends Handler {
            }

            case EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT: {
                synchronized (mLock) {
                    mIsMtSmsPollingThrottled = false;
                }
                mIsMtSmsPollingThrottled.set(false);
                if (allowMtSmsPolling()) {
                    sendMessage(obtainMessage(CMD_SEND_MT_SMS_POLLING_MESSAGE));
                }
@@ -756,8 +748,8 @@ public class DatagramDispatcher extends Handler {
        int datagramType = pendingRequest.isMtSmsPolling
                ? DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS : DATAGRAM_TYPE_SMS;
        if (resultCode == SATELLITE_RESULT_SUCCESS) {
            long smsTransmissionTime = mSmsTransmissionStartTime > 0
                    ? (System.currentTimeMillis() - mSmsTransmissionStartTime) : 0;
            long smsTransmissionTime = mSmsTransmissionStartTime.get() > 0
                    ? (System.currentTimeMillis() - mSmsTransmissionStartTime.get()) : 0;
            mControllerMetricsStats.reportOutgoingDatagramSuccessCount(datagramType, false);
            mSessionMetricsStats.addCountOfSuccessfulOutgoingDatagram(
                    datagramType, smsTransmissionTime);
@@ -814,7 +806,7 @@ public class DatagramDispatcher extends Handler {
     */
    public void onSatelliteModemStateChanged(@SatelliteManager.SatelliteModemState int state) {
        synchronized (mLock) {
            mModemState = state;
            mModemState.set(state);
            if (state == SatelliteManager.SATELLITE_MODEM_STATE_OFF
                    || state == SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE) {
                plogd("onSatelliteModemStateChanged: cleaning up resources");
@@ -824,11 +816,11 @@ public class DatagramDispatcher extends Handler {
            }

            if (state == SATELLITE_MODEM_STATE_CONNECTED) {
                mHasEnteredConnectedState = true;
                mHasEnteredConnectedState.set(true);

                mConnectedStateCounter++;
                mConnectedStateCounter.incrementAndGet();
                if (isFirstConnected()) {
                    mShouldPollMtSms = shouldPollMtSms();
                    mShouldPollMtSms.set(shouldPollMtSms());
                }

                if (isDatagramWaitForConnectedStateTimerStarted()) {
@@ -838,9 +830,9 @@ public class DatagramDispatcher extends Handler {
            }

            if (state == SATELLITE_MODEM_STATE_NOT_CONNECTED) {
                if (mHasEnteredConnectedState) {
                    mHasEnteredConnectedState = false;
                    mShouldPollMtSms = shouldPollMtSms();
                if (mHasEnteredConnectedState.get()) {
                    mHasEnteredConnectedState.set(false);
                    mShouldPollMtSms.set(shouldPollMtSms());
                }
            }
        }
@@ -851,7 +843,7 @@ public class DatagramDispatcher extends Handler {

    /** Returns true if this is the first time the satellite modem is connected. */
    private boolean isFirstConnected() {
        return mConnectedStateCounter == 1;
        return mConnectedStateCounter.get() == 1;
    }

    @GuardedBy("mLock")
@@ -882,10 +874,10 @@ public class DatagramDispatcher extends Handler {
        mSendSatelliteDatagramRequest = null;
        mIsAligned.set(false);
        mLastSendRequestDatagramType.set(DATAGRAM_TYPE_UNKNOWN);
        mModemState = SATELLITE_MODEM_STATE_UNKNOWN;
        mHasEnteredConnectedState = false;
        mShouldPollMtSms = false;
        mConnectedStateCounter = 0;
        mModemState.set(SATELLITE_MODEM_STATE_UNKNOWN);
        mHasEnteredConnectedState.set(false);
        mShouldPollMtSms.set(false);
        mConnectedStateCounter.set(0);
        stopMtSmsPollingThrottle();
    }

@@ -1287,7 +1279,7 @@ public class DatagramDispatcher extends Handler {
                reportSendSmsCompleted(pendingSms, SATELLITE_RESULT_SUCCESS);
                if (datagramType == DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS) {
                    startMtSmsPollingThrottle();
                    mShouldPollMtSms = false;
                    mShouldPollMtSms.set(false);
                }
            } else {
                // Update send status
@@ -1325,14 +1317,14 @@ public class DatagramDispatcher extends Handler {

    private void handleCmdSendMtSmsPollingMessage() {
        synchronized (mLock) {
            if (!mShouldPollMtSms) {
                plogd("sendMtSmsPollingMessage: mShouldPollMtSms=" + mShouldPollMtSms);
            if (!mShouldPollMtSms.get()) {
                plogd("sendMtSmsPollingMessage: mShouldPollMtSms=" + mShouldPollMtSms.get());
                return;
            }

            plogd("sendMtSmsPollingMessage");
            if (!allowCheckMessageInNotConnected()) {
                mShouldPollMtSms = false;
                mShouldPollMtSms.set(false);
            }

            for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) {
@@ -1361,17 +1353,15 @@ public class DatagramDispatcher extends Handler {
        smsDispatchersController.sendMtSmsPollingMessage();
    }

    @GuardedBy("mLock")
    private void startMtSmsPollingThrottle() {
        plogd("startMtSmsPollingThrottle");
        mIsMtSmsPollingThrottled = true;
        mIsMtSmsPollingThrottled.set(true);
        sendMessageDelayed(obtainMessage(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT),
                getMtSmsPollingThrottleMillis());
    }

    @GuardedBy("mLock")
    private void stopMtSmsPollingThrottle() {
        mIsMtSmsPollingThrottled = false;
        mIsMtSmsPollingThrottled.set(false);
        removeMessages(EVENT_MT_SMS_POLLING_THROTTLE_TIMED_OUT);
    }

@@ -1385,22 +1375,16 @@ public class DatagramDispatcher extends Handler {
            return false;
        }

        boolean isModemStateConnectedOrTransferring;
        boolean isAligned = mIsAligned.get();
        boolean isMtSmsPollingThrottled;
        synchronized (mLock) {
            isMtSmsPollingThrottled = mIsMtSmsPollingThrottled;
            isModemStateConnectedOrTransferring =
                    mModemState == SATELLITE_MODEM_STATE_CONNECTED
                            || mModemState == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
        }
        boolean isModemStateConnectedOrTransferring =
                mModemState.get() == SATELLITE_MODEM_STATE_CONNECTED
                        || mModemState.get() == SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;

        if (isMtSmsPollingThrottled) {
        if (mIsMtSmsPollingThrottled.get()) {
            plogd("allowMtSmsPolling: polling is throttled");
            return false;
        }

        if (!isAligned) {
        if (!mIsAligned.get()) {
            plogd("allowMtSmsPolling: not aligned");
            return false;
        }
+73 −84
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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.
@@ -636,7 +641,6 @@ public class DatagramReceiver extends Handler {
    }

    private void handleSatelliteConnectedEvent() {
        synchronized (mLock) {
        if (isDatagramWaitForConnectedStateTimerStarted()) {
            stopDatagramWaitForConnectedStateTimer();
            if (mPendingPollSatelliteDatagramsRequest == null) {
@@ -652,7 +656,6 @@ public class DatagramReceiver extends Handler {
            mPendingPollSatelliteDatagramsRequest = null;
        }
    }
    }

    private void pollPendingSatelliteDatagramsInternal(int subId,
            @NonNull Consumer<Integer> callback) {
@@ -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,
@@ -676,7 +678,6 @@ public class DatagramReceiver extends Handler {
                    mDatagramController.getReceivePendingCount(),
                    SatelliteManager.SATELLITE_RESULT_SUCCESS);
            startDatagramWaitForConnectedStateTimer();
            }
            return;
        }

@@ -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);
@@ -700,7 +700,6 @@ public class DatagramReceiver extends Handler {
            } else {
                startSatelliteAlignedTimer(request);
            }
            }
        } else {
            sendRequestAsync(CMD_POLL_PENDING_SATELLITE_DATAGRAMS, callback, phone, subId);
        }
@@ -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");
@@ -735,9 +733,7 @@ public class DatagramReceiver extends Handler {
            handleSatelliteConnectedEvent();
        }
    }
    }

    @GuardedBy("mLock")
    private void cleanupDemoModeResources() {
        if (isSatelliteAlignedTimerStarted()) {
            stopSatelliteAlignedTimer();
@@ -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;
@@ -765,7 +759,6 @@ public class DatagramReceiver extends Handler {
            mPendingPollSatelliteDatagramsRequest = null;
        }
        stopDatagramWaitForConnectedStateTimer();
        }

        int subId = SatelliteController.getInstance().getSelectedSatelliteSubId();
        if (mDatagramController.isReceivingDatagrams()) {
@@ -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()) {
@@ -933,7 +924,6 @@ public class DatagramReceiver extends Handler {
    }

    private void handleEventDatagramWaitForConnectedStateTimedOut() {
        synchronized (mLock) {
        if (mPendingPollSatelliteDatagramsRequest == null) {
            plogw("handleEventDatagramWaitForConnectedStateTimedOut: "
                    + "mPendingPollSatelliteDatagramsRequest is null");
@@ -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