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

Commit 5b524109 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Android (Google) Code Review
Browse files

Merge "Update datagram transfer states internally first and then send updates...

Merge "Update datagram transfer states internally first and then send updates to clients." into udc-dev
parents 6444ca66 9b652c7c
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,