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

Commit 9b652c7c authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Update datagram transfer states internally first and then send updates

to clients.

Bug: 275670811
Test: atest DatagramDispatcherTest,
      atest DatagramReceiverTest
      atest CtsTelephonyTestCases:android.telephony.satellite.cts
      Flashed build on raven-userdebug: calls and sms are working

Change-Id: I5dc5df43663299580a35e7517b19b44fa24332d3
parent b7b74a20
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -185,9 +185,9 @@ public class DatagramController {
        mSendDatagramTransferState = datagramTransferState;
        mSendPendingCount = sendPendingCount;
        mSendErrorCode = errorCode;
        notifyDatagramTransferStateChangedToSessionController();
        mPointingAppController.updateSendDatagramTransferState(subId, datagramTransferState,
                sendPendingCount, errorCode);
        notifyDatagramTransferStateChangedToSessionController();
    }

    /**
@@ -210,9 +210,9 @@ public class DatagramController {
        mReceiveDatagramTransferState = datagramTransferState;
        mReceivePendingCount = receivePendingCount;
        mReceiveErrorCode = errorCode;
        notifyDatagramTransferStateChangedToSessionController();
        mPointingAppController.updateReceiveDatagramTransferState(subId, datagramTransferState,
                receivePendingCount, errorCode);
        notifyDatagramTransferStateChangedToSessionController();
    }

    /**
+36 −23
Original line number Diff line number Diff line
@@ -192,11 +192,6 @@ public class DatagramDispatcher extends Handler {
                            argument.needFullScreenPointingUI);
                } else {
                    loge("sendSatelliteDatagram: No phone object");
                    argument.callback.accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
                    // report phone == null case
                    reportSendDatagramCompleted(argument,
                            SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);

                    synchronized (mLock) {
                        // Remove current datagram from pending map
                        if (argument.datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) {
@@ -205,6 +200,21 @@ public class DatagramDispatcher extends Handler {
                            mPendingNonEmergencyDatagramsMap.remove(argument.datagramId);
                        }

                        // Update send status
                        mDatagramController.updateSendStatus(argument.subId,
                                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                                getPendingDatagramCount(),
                                SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
                        mDatagramController.updateSendStatus(argument.subId,
                                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                                0, SatelliteManager.SATELLITE_ERROR_NONE);

                        // report phone == null case
                        reportSendDatagramCompleted(argument,
                                SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
                        argument.callback.accept(
                                SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);

                        // Abort sending all the pending datagrams
                        abortSendingPendingDatagrams(argument.subId,
                                SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
@@ -226,8 +236,7 @@ public class DatagramDispatcher extends Handler {
                synchronized (mLock) {
                    mSendingDatagramInProgress = false;

                    // Send response for current datagram and remove it from pending map.
                    argument.callback.accept(error);
                    // Remove current datagram from pending map.
                    if (argument.datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) {
                        mPendingEmergencyDatagramsMap.remove(argument.datagramId);
                    } else {
@@ -242,21 +251,33 @@ public class DatagramDispatcher extends Handler {
                        mControllerMetricsStats.reportOutgoingDatagramSuccessCount(
                                argument.datagramType);

                        if (getPendingDatagramCount() != 0) {
                        if (getPendingDatagramCount() > 0) {
                            // Send response for current datagram
                            argument.callback.accept(error);
                            // Send pending datagrams
                            sendPendingDatagrams();
                        } else {
                            mDatagramController.updateSendStatus(argument.subId,
                                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                                    getPendingDatagramCount(),
                                    SatelliteManager.SATELLITE_ERROR_NONE);

                                    0, SatelliteManager.SATELLITE_ERROR_NONE);
                            // Send response for current datagram
                            argument.callback.accept(error);
                        }
                    } else {
                        // Update send status
                        mDatagramController.updateSendStatus(argument.subId,
                                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                                getPendingDatagramCount(), error);
                        mDatagramController.updateSendStatus(argument.subId,
                                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                                0, SatelliteManager.SATELLITE_ERROR_NONE);
                        // Send response for current datagram
                        // after updating datagram transfer state internally.
                        argument.callback.accept(error);
                        // Abort sending all the pending datagrams
                        abortSendingPendingDatagrams(argument.subId, error);
                        mControllerMetricsStats.reportOutgoingDatagramFailCount(
                                argument.datagramType);
                        abortSendingPendingDatagrams(argument.subId, error);
                    }
                }
                break;
@@ -306,10 +327,10 @@ public class DatagramDispatcher extends Handler {
            if (!mSendingDatagramInProgress) {
                mSendingDatagramInProgress = true;
                datagramArgs.setDatagramStartTime();
                sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArgs, phone);
                mDatagramController.updateSendStatus(subId,
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
                        getPendingDatagramCount(), SatelliteManager.SATELLITE_ERROR_NONE);
                sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArgs, phone);
            }
        }
    }
@@ -335,10 +356,10 @@ public class DatagramDispatcher extends Handler {
                    pendingDatagram.iterator().next().getValue();
            // Sets the trigger time for getting pending datagrams
            datagramArg.setDatagramStartTime();
            sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArg, phone);
            mDatagramController.updateSendStatus(datagramArg.subId,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
                    getPendingDatagramCount(), SatelliteManager.SATELLITE_ERROR_NONE);
            sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArg, phone);
        }
    }

@@ -358,9 +379,9 @@ public class DatagramDispatcher extends Handler {
        for (Entry<Long, SendSatelliteDatagramArgument> entry :
                pendingDatagramsMap.entrySet()) {
            SendSatelliteDatagramArgument argument = entry.getValue();
            argument.callback.accept(errorCode);
            reportSendDatagramCompleted(argument, errorCode);
            mControllerMetricsStats.reportOutgoingDatagramFailCount(argument.datagramType);
            argument.callback.accept(errorCode);
        }

        // Clear pending datagram maps
@@ -381,14 +402,6 @@ public class DatagramDispatcher extends Handler {
                SatelliteManager.SATELLITE_REQUEST_ABORTED);
        sendErrorCodeAndCleanupPendingDatagrams(mPendingNonEmergencyDatagramsMap,
                SatelliteManager.SATELLITE_REQUEST_ABORTED);

        // Update send status
        mDatagramController.updateSendStatus(subId,
                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                getPendingDatagramCount(), error);
        mDatagramController.updateSendStatus(subId,
                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                getPendingDatagramCount(), SatelliteManager.SATELLITE_ERROR_NONE);
    }

    /**
+8 −11
Original line number Diff line number Diff line
@@ -75,10 +75,7 @@ public class DatagramReceiver extends Handler {

    private long mDatagramTransferStartTime = 0;

    /**
     * The background handler to perform database operations. This is running on a separate thread.
     */
    @NonNull private final Handler mBackgroundHandler;
   @NonNull private final Looper mLooper;

    /**
     * Map key: subId, value: SatelliteDatagramListenerHandler to notify registrants.
@@ -113,13 +110,11 @@ public class DatagramReceiver extends Handler {
            @NonNull DatagramController datagramController) {
        super(looper);
        mContext = context;
        mLooper = looper;
        mContentResolver = context.getContentResolver();
        mDatagramController = datagramController;
        mControllerMetricsStats = ControllerMetricsStats.getInstance();

        HandlerThread backgroundThread = new HandlerThread(TAG);
        backgroundThread.start();
        mBackgroundHandler = new Handler(looper);
        try {
            mSharedPreferences =
                    mContext.getSharedPreferences(SatelliteController.SATELLITE_SHARED_PREF,
@@ -398,8 +393,6 @@ public class DatagramReceiver extends Handler {
                    phone.pollPendingSatelliteDatagrams(onCompleted);
                } else {
                    loge("pollPendingSatelliteDatagrams: No phone object");
                    ((Consumer<Integer>) request.argument)
                            .accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
                    mDatagramController.updateReceiveStatus(request.subId,
                            SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED,
                            mDatagramController.getReceivePendingCount(),
@@ -413,6 +406,9 @@ public class DatagramReceiver extends Handler {
                    reportMetrics(null, SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
                    mControllerMetricsStats.reportIncomingDatagramCount(
                                    SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
                    // Send response for current request
                    ((Consumer<Integer>) request.argument)
                            .accept(SatelliteManager.SATELLITE_INVALID_TELEPHONY_STATE);
                }
                break;
            }
@@ -422,7 +418,6 @@ public class DatagramReceiver extends Handler {
                request = (DatagramReceiverHandlerRequest) ar.userObj;
                int error = SatelliteServiceUtils.getSatelliteError(ar,
                        "pollPendingSatelliteDatagrams");
                ((Consumer<Integer>) request.argument).accept(error);
                logd("EVENT_POLL_PENDING_SATELLITE_DATAGRAMS_DONE error: " + error);

                if (error != SatelliteManager.SATELLITE_ERROR_NONE) {
@@ -438,6 +433,8 @@ public class DatagramReceiver extends Handler {
                    reportMetrics(null, error);
                    mControllerMetricsStats.reportIncomingDatagramCount(error);
                }
                // Send response for current request
                ((Consumer<Integer>) request.argument).accept(error);
                break;
            }
        }
@@ -462,7 +459,7 @@ public class DatagramReceiver extends Handler {
                mSatelliteDatagramListenerHandlers.get(validSubId);
        if (satelliteDatagramListenerHandler == null) {
            satelliteDatagramListenerHandler = new SatelliteDatagramListenerHandler(
                    mBackgroundHandler.getLooper(), validSubId);
                    mLooper, validSubId);
            if (SatelliteModemInterface.getInstance().isSatelliteServiceSupported()) {
                SatelliteModemInterface.getInstance().registerForSatelliteDatagramsReceived(
                        satelliteDatagramListenerHandler,