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

Commit 0d486b76 authored by Andre Eisenbach's avatar Andre Eisenbach
Browse files

DO NOT MERGE Fix SMS delivered successfully but stuck SENDING issue

Receive and handle ACTION_MESSAGE_SENT intent for SMS type
message to move it to SENT folder when pushMessage request
from MCE  is processed and SMS delivered successfully.

Bug: 22343270
CRs-Fixed: 903561
Change-Id: I9dafffc737a34233ede2d10e22cd969f520a12cf
parent bafc41ac
Loading
Loading
Loading
Loading
+77 −1
Original line number Original line Diff line number Diff line
@@ -70,6 +70,7 @@ import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.telephony.SmsMessage;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.text.format.DateUtils;
import android.text.format.DateUtils;
import android.util.EventLog;
import android.util.Log;
import android.util.Log;
import android.util.Xml;
import android.util.Xml;
import android.os.Looper;
import android.os.Looper;
@@ -1712,7 +1713,20 @@ public class BluetoothMapContentObserver {
                return;
                return;
            }
            }


            if (action.equals(ACTION_MESSAGE_DELIVERY)) {
            if (action.equals(ACTION_MESSAGE_SENT)) {
                int result = intent.getIntExtra(EXTRA_MESSAGE_SENT_RESULT, Activity.RESULT_CANCELED);
                msgInfo.partsSent++;
                if(result != Activity.RESULT_OK) {
                    // If just one of the parts in the message fails, we need to send the entire message again
                    msgInfo.failedSent = true;
                }
                if(D) Log.d(TAG, "onReceive: msgInfo.partsSent = " + msgInfo.partsSent
                        + ", msgInfo.parts = " + msgInfo.parts + " result = " + result);

                if (msgInfo.partsSent == msgInfo.parts) {
                    actionMessageSent(context, intent, msgInfo);
                }
            } else if (action.equals(ACTION_MESSAGE_DELIVERY)) {
                long timestamp = intent.getLongExtra(EXTRA_MESSAGE_SENT_TIMESTAMP, 0);
                long timestamp = intent.getLongExtra(EXTRA_MESSAGE_SENT_TIMESTAMP, 0);
                int status = -1;
                int status = -1;
                if(msgInfo.timestamp == timestamp) {
                if(msgInfo.timestamp == timestamp) {
@@ -1738,6 +1752,67 @@ public class BluetoothMapContentObserver {
            }
            }
        }
        }


        private void actionMessageSent(Context context, Intent intent, PushMsgInfo msgInfo) {
            /* As the MESSAGE_SENT intent is forwarded from the MAP service, we use the intent
             * to carry the result, as getResult() will not return the correct value.
             */
            boolean delete = false;

            if(D) Log.d(TAG,"actionMessageSent(): msgInfo.failedSent = " + msgInfo.failedSent);

            msgInfo.sendInProgress = false;

            if (msgInfo.failedSent == false) {
                if(D) Log.d(TAG, "actionMessageSent: result OK");
                if (msgInfo.transparent == 0) {
                    if (!Sms.moveMessageToFolder(context, msgInfo.uri,
                            Sms.MESSAGE_TYPE_SENT, 0)) {
                        Log.w(TAG, "Failed to move " + msgInfo.uri + " to SENT");
                    }
                } else {
                    delete = true;
                }

                Event evt = new Event(EVENT_TYPE_SENDING_SUCCESS, msgInfo.id,
                    folderSms[Sms.MESSAGE_TYPE_SENT], null, mSmsType);
                sendEvent(evt);

            } else {
                if (msgInfo.retry == 1) {
                    /* Notify failure, but keep message in outbox for resending */
                    msgInfo.resend = true;
                    msgInfo.partsSent = 0; // Reset counter for the retry
                    msgInfo.failedSent = false;
                    Event evt = new Event(EVENT_TYPE_SENDING_FAILURE, msgInfo.id,
                        folderSms[Sms.MESSAGE_TYPE_OUTBOX], null, mSmsType);
                    sendEvent(evt);
                } else {
                    if (msgInfo.transparent == 0) {
                        if (!Sms.moveMessageToFolder(context, msgInfo.uri,
                                Sms.MESSAGE_TYPE_FAILED, 0)) {
                            Log.w(TAG, "Failed to move " + msgInfo.uri + " to FAILED");
                        }
                    } else {
                        delete = true;
                    }

                    Event evt = new Event(EVENT_TYPE_SENDING_FAILURE, msgInfo.id,
                        folderSms[Sms.MESSAGE_TYPE_FAILED], null, mSmsType);
                    sendEvent(evt);
                }
            }

            if (delete == true) {
                /* Delete from Observer message list to avoid delete notifications */
                synchronized(mMsgListSms) {
                    mMsgListSms.remove(msgInfo.id);
                }

                /* Delete from DB */
                mResolver.delete(msgInfo.uri, null, null);
            }
        }

        private void actionMessageDelivery(Context context, Intent intent, PushMsgInfo msgInfo) {
        private void actionMessageDelivery(Context context, Intent intent, PushMsgInfo msgInfo) {
            Uri messageUri = intent.getData();
            Uri messageUri = intent.getData();
            msgInfo.sendInProgress = false;
            msgInfo.sendInProgress = false;
@@ -1783,6 +1858,7 @@ public class BluetoothMapContentObserver {
        if (context.checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SMS)
        if (context.checkCallingOrSelfPermission(android.Manifest.permission.WRITE_SMS)
              != PackageManager.PERMISSION_GRANTED) {
              != PackageManager.PERMISSION_GRANTED) {
            Log.w(TAG, "actionMessageSentDisconnected: Not allowed to delete SMS/MMS messages");
            Log.w(TAG, "actionMessageSentDisconnected: Not allowed to delete SMS/MMS messages");
            EventLog.writeEvent(0x534e4554, "b/22343270", Binder.getCallingUid(), "");
            return;
            return;
        }
        }