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

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

Merge "Update send sms status only after all parts are sent." into main

parents 3c5232c2 436cbe29
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -2737,6 +2737,14 @@ public abstract class SMSDispatcher extends Handler {
            return mUnsentPartCount != null ? (mUnsentPartCount.get() == 0) : true;
        }

        /**
         * Returns the flag specifying whether any part of this {@link SmsTracker} failed to send
         * or not.
         */
        protected boolean isAnyPartFailed() {
            return mAnyPartFailed != null && mAnyPartFailed.get();
        }

        /**
         * Persist a sent SMS if required:
         * 1. It is a text message
+5 −3
Original line number Diff line number Diff line
@@ -1234,7 +1234,8 @@ public class SmsDispatchersController extends Handler {
            boolean isOverIms, boolean isLastSmsPart, boolean success) {
        notifySmsSentToEmergencyStateTracker(tracker.mDestAddress,
            tracker.mMessageId, isOverIms, isLastSmsPart, success);
        notifySmsSentToDatagramDispatcher(tracker.mUniqueMessageId, isLastSmsPart, success);
        notifySmsSentToDatagramDispatcher(tracker.mUniqueMessageId,
                tracker.isSinglePartOrLastPart(), !tracker.isAnyPartFailed());
    }

    /**
@@ -1256,9 +1257,10 @@ public class SmsDispatchersController extends Handler {

    private void notifySmsSentToDatagramDispatcher(
            long messageId, boolean isLastSmsPart, boolean success) {
        if (SatelliteController.getInstance().shouldSendSmsToDatagramDispatcher(mPhone)) {
        if (SatelliteController.getInstance().shouldSendSmsToDatagramDispatcher(mPhone)
                && isLastSmsPart) {
            DatagramDispatcher.getInstance().onSendSmsDone(
                    mPhone.getSubId(), messageId, isLastSmsPart, success);
                    mPhone.getSubId(), messageId, success);
        }
    }

+19 −19
Original line number Diff line number Diff line
@@ -406,10 +406,9 @@ public class DatagramDispatcher extends Handler {
                SomeArgs args = (SomeArgs) msg.obj;
                int subId = (int) args.arg1;
                long messageId = (long) args.arg2;
                boolean isLastPartSms = (boolean) args.arg3;
                boolean success = (boolean) args.arg4;
                boolean success = (boolean) args.arg3;
                try {
                    handleEventSendSmsDone(subId, messageId, isLastPartSms, success);
                    handleEventSendSmsDone(subId, messageId, success);
                } finally {
                    args.recycle();
                }
@@ -1182,15 +1181,13 @@ public class DatagramDispatcher extends Handler {
     * Sending MO SMS is completed.
     * @param subId subscription ID
     * @param messageId message ID of MO SMS
     * @param isLastSmsPart whether this is the last sms part of MO SMS
     * @param success boolean specifying whether MO SMS is successfully sent or not.
     */
    public void onSendSmsDone(int subId, long messageId, boolean isLastSmsPart, boolean success) {
    public void onSendSmsDone(int subId, long messageId, boolean success) {
        SomeArgs args = SomeArgs.obtain();
        args.arg1 = subId;
        args.arg2 = messageId;
        args.arg3 = isLastSmsPart;
        args.arg4 = success;
        args.arg3 = success;
        sendMessage(obtainMessage(EVENT_SEND_SMS_DONE, args));
    }

@@ -1231,29 +1228,32 @@ public class DatagramDispatcher extends Handler {
        pendingSmsMap.clear();
    }

    private void handleEventSendSmsDone(
            int subId, long messageId, boolean isLastPartSms, boolean success) {
    private void handleEventSendSmsDone(int subId, long messageId, boolean success) {
        synchronized (mLock) {
            mSendingInProgress = false;
            PendingRequest pendingSms = mPendingSmsMap.remove(messageId);
            int datagramType = pendingSms != null && pendingSms.isMtSmsPolling
            if (pendingSms == null) {
                // Just return, the SMS is not sent by DatagramDispatcher such as Data SMS
                plogd("handleEventSendSmsDone there is no pendingSms for messageId=" + messageId);
                return;
            }

            mSendingInProgress = false;
            int datagramType = pendingSms.isMtSmsPolling
                    ? DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS  : DATAGRAM_TYPE_SMS;

            plogd("handleEventSendSmsDone subId=" + subId + " messageId=" + messageId
                    + " isLastPartSms=" + isLastPartSms + " success=" + success
                    + " datagramType=" + datagramType);
                    + " success=" + success + " datagramType=" + datagramType);

            if (success) {
                if (isLastPartSms) {
                    // Update send status only after all parts of the SMS are sent
                // Update send status
                mDatagramController.updateSendStatus(subId, datagramType,
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS,
                        getPendingMessagesCount(), SATELLITE_RESULT_SUCCESS);
                }
                if (datagramType == DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS) {
                    startMtSmsPollingThrottle();
                }
            } else {
                // Update send status
                mDatagramController.updateSendStatus(subId, datagramType,
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                        getPendingMessagesCount(), SATELLITE_RESULT_NETWORK_ERROR);
+4 −8
Original line number Diff line number Diff line
@@ -824,8 +824,7 @@ public class DatagramDispatcherTest extends TelephonyTest {
                        eq(SATELLITE_RESULT_SUCCESS));
        verify(mMockSmsDispatchersController).sendCarrierRoamingNbIotNtnText(eq(mPendingSms));

        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId,
                true, true);
        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId, true);
        processAllMessages();

        mInOrder.verify(mMockDatagramController)
@@ -859,8 +858,7 @@ public class DatagramDispatcherTest extends TelephonyTest {
                        eq(SATELLITE_RESULT_SUCCESS));
        verify(mMockSmsDispatchersController).sendCarrierRoamingNbIotNtnText(eq(mPendingSms));

        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId,
                true, false);
        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId, false);
        processAllMessages();

        mInOrder.verify(mMockDatagramController)
@@ -1058,8 +1056,7 @@ public class DatagramDispatcherTest extends TelephonyTest {
                        eq(SATELLITE_RESULT_SUCCESS));
        verify(mMockSmsDispatchersController).sendCarrierRoamingNbIotNtnText(eq(mPendingSms));

        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId,
                true, true);
        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId, true);
        processAllMessages();

        mInOrder.verify(mMockDatagramController)
@@ -1110,8 +1107,7 @@ public class DatagramDispatcherTest extends TelephonyTest {
        processAllMessages();
        verifyZeroInteractions(mMockSatelliteModemInterface);

        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId,
                true, true);
        mDatagramDispatcherUT.onSendSmsDone(mPhone.getSubId(), mPendingSms.uniqueMessageId, true);
        processAllMessages();
        mInOrder.verify(mMockDatagramController)
                .updateSendStatus(eq(SUB_ID), eq(datagramTypeSms),