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