CdmaSMSDispatcher.java revision 1260f1c6c909f2940989b72afe1b91fd83845eaa
10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2008 The Android Open Source Project
31260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.cdma;
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.Activity;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.PendingIntent;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.PendingIntent.CanceledException;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Intent;
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties;
2699c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Savilleimport android.telephony.Rlog;
270d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport android.telephony.SmsManager;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.GsmAlphabet;
300d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport com.android.internal.telephony.SmsConstants;
311260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport com.android.internal.telephony.PhoneBase;
321260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport com.android.internal.telephony.SMSDispatcher;
331260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport com.android.internal.telephony.ImsSMSDispatcher;
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.SmsHeader;
351260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport com.android.internal.telephony.SmsStorageMonitor;
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.SmsUsageMonitor;
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.TelephonyProperties;
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.cdma.sms.UserData;
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.HashMap;
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
421260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowapublic class CdmaSMSDispatcher extends SMSDispatcher {
43cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    private static final String TAG = "CdmaSMSDispatcher";
44cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    private static final boolean VDBG = false;
451260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    private ImsSMSDispatcher mImsSMSDispatcher;
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
471260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public CdmaSMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor,
481260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            SmsUsageMonitor usageMonitor, ImsSMSDispatcher imsSMSDispatcher) {
490d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        super(phone, usageMonitor);
501260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        mImsSMSDispatcher = imsSMSDispatcher;
511260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        Rlog.d(TAG, "CdmaSMSDispatcher created");
520d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    }
530d4bcdf379842af4b6304809156971e926f374f0Jake Hamby
540d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    /**
550d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * Send the SMS status report to the dispatcher thread to process.
560d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * @param sms the CDMA SMS message containing the status report
570d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     */
580d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    void sendStatusReportMessage(SmsMessage sms) {
590d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        if (VDBG) Rlog.d(TAG, "sending EVENT_HANDLE_STATUS_REPORT message");
600d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        sendMessage(obtainMessage(EVENT_HANDLE_STATUS_REPORT, sms));
610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
640d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    protected void handleStatusReport(Object o) {
650d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        if (o instanceof SmsMessage) {
660d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            if (VDBG) Rlog.d(TAG, "calling handleCdmaStatusReport()");
670d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            handleCdmaStatusReport((SmsMessage) o);
680d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        } else {
690d4bcdf379842af4b6304809156971e926f374f0Jake Hamby            Rlog.e(TAG, "handleStatusReport() called for object type " + o.getClass().getName());
700d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        }
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
731260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    protected String getFormat() {
741260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        return SmsConstants.FORMAT_3GPP2;
751260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
761260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
770d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    /**
780d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * Called from parent class to handle status report from {@code CdmaInboundSmsHandler}.
790d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     * @param sms the CDMA SMS message to process
800d4bcdf379842af4b6304809156971e926f374f0Jake Hamby     */
810d4bcdf379842af4b6304809156971e926f374f0Jake Hamby    void handleCdmaStatusReport(SmsMessage sms) {
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, count = deliveryPendingList.size(); i < count; i++) {
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            SmsTracker tracker = deliveryPendingList.get(i);
8422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            if (tracker.mMessageRef == sms.mMessageRef) {
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                // Found it.  Remove from list and broadcast.
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                deliveryPendingList.remove(i);
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                PendingIntent intent = tracker.mDeliveryIntent;
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                Intent fillIn = new Intent();
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                fillIn.putExtra("pdu", sms.getPdu());
901260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                fillIn.putExtra("format", getFormat());
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                    intent.send(mContext, Activity.RESULT_OK, fillIn);
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (CanceledException ex) {}
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                break;  // Only expect to see one tracker matching this message.
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** {@inheritDoc} */
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void sendData(String destAddr, String scAddr, int destPort,
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                scAddr, destAddr, destPort, data, (deliveryIntent != null));
1051260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        HashMap map =  SmsTrackerMapFactory(destAddr, scAddr, destPort, data, pdu);
1061260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        SmsTracker tracker = SmsTrackerFactory(map, sentIntent, deliveryIntent,
1071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                getFormat());
1081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        sendSubmitPdu(tracker);
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** {@inheritDoc} */
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void sendText(String destAddr, String scAddr, String text,
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            PendingIntent sentIntent, PendingIntent deliveryIntent) {
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                scAddr, destAddr, text, (deliveryIntent != null), null);
1171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        HashMap map =  SmsTrackerMapFactory(destAddr, scAddr, text, pdu);
1181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        SmsTracker tracker = SmsTrackerFactory(map, sentIntent,
1191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                deliveryIntent, getFormat());
1201260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        sendSubmitPdu(tracker);
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** {@inheritDoc} */
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected GsmAlphabet.TextEncodingDetails calculateLength(CharSequence messageBody,
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            boolean use7bitOnly) {
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return SmsMessage.calculateLength(messageBody, use7bitOnly);
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** {@inheritDoc} */
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void sendNewSubmitPdu(String destinationAddress, String scAddress,
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            String message, SmsHeader smsHeader, int encoding,
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart) {
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        UserData uData = new UserData();
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        uData.payloadStr = message;
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        uData.userDataHeader = smsHeader;
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (encoding == SmsConstants.ENCODING_7BIT) {
1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } else { // assume UTF-16
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            uData.msgEncoding = UserData.ENCODING_UNICODE_16;
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        uData.msgEncodingSet = true;
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        /* By setting the statusReportRequested bit only for the
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * last message fragment, this will result in only one
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * callback to the sender when that last fragment delivery
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville         * has been acknowledged. */
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        SmsMessage.SubmitPdu submitPdu = SmsMessage.getSubmitPdu(destinationAddress,
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                uData, (deliveryIntent != null) && lastPart);
1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1521260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        HashMap map =  SmsTrackerMapFactory(destinationAddress, scAddress,
1531260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                message, submitPdu);
1541260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        SmsTracker tracker = SmsTrackerFactory(map, sentIntent,
1551260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                deliveryIntent, getFormat());
1561260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        sendSubmitPdu(tracker);
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1591260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    protected void sendSubmitPdu(SmsTracker tracker) {
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (SystemProperties.getBoolean(TelephonyProperties.PROPERTY_INECM_MODE, false)) {
1611260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            if (tracker.mSentIntent != null) {
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                try {
1631260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                    tracker.mSentIntent.send(SmsManager.RESULT_ERROR_NO_SERVICE);
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                } catch (CanceledException ex) {}
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
166cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville            if (VDBG) {
16799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville                Rlog.d(TAG, "Block SMS in Emergency Callback mode");
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return;
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1711260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        sendRawPdu(tracker);
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** {@inheritDoc} */
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    @Override
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void sendSms(SmsTracker tracker) {
1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        HashMap<String, Object> map = tracker.mData;
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1790d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        // byte[] smsc = (byte[]) map.get("smsc");  // unused for CDMA
1800d4bcdf379842af4b6304809156971e926f374f0Jake Hamby        byte[] pdu = (byte[]) map.get("pdu");
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Message reply = obtainMessage(EVENT_SEND_SMS_COMPLETE, tracker);
1831260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
1841260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        Rlog.d(TAG, "sendSms: "
1851260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                +" isIms()="+isIms()
1861260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                +" mRetryCount="+tracker.mRetryCount
1871260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                +" mImsRetry="+tracker.mImsRetry
1881260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                +" mMessageRef="+tracker.mMessageRef
1891260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa                +" SS=" +mPhone.getServiceState().getState());
1901260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
1911260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        // sms over cdma is used:
1921260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        //   if sms over IMS is not supported AND
1931260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        //   this is not a retry case after sms over IMS failed
1941260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        //     indicated by mImsRetry > 0
1951260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        if (0 == tracker.mImsRetry && !isIms()) {
1961260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            mCi.sendCdmaSms(pdu, reply);
1971260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        } else {
1981260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            mCi.sendImsCdmaSms(pdu, tracker.mImsRetry, tracker.mMessageRef, reply);
1991260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            // increment it here, so in case of SMS_FAIL_RETRY over IMS
2001260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            // next retry will be sent using IMS request again.
2011260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa            tracker.mImsRetry++;
2021260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        }
2031260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
2041260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
2051260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    @Override
2061260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public void sendRetrySms(SmsTracker tracker) {
2071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        //re-routing to ImsSMSDispatcher
2081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        mImsSMSDispatcher.sendRetrySms(tracker);
2091260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
2101260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
2111260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    @Override
2121260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public boolean isIms() {
2131260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        return mImsSMSDispatcher.isIms();
2141260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    }
2151260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa
2161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    @Override
2171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa    public String getImsSmsFormat() {
2181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa        return mImsSMSDispatcher.getImsSmsFormat();
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
221