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

Commit 436cbe29 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Update send sms status only after all parts are sent.

Bug: 378982497
Test: atest DatagramControllerTest
Test: Manually tested SMS/CALLS/MMS/DATA
FLAG: EXEMPT bugfix
Change-Id: I0811655fedd8f08a8df0c296fc5d6fb1a61ef370
parent a8c92455
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),