11260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa/* 21260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * Copyright (C) 2006 The Android Open Source Project 31260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * 41260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * Licensed under the Apache License, Version 2.0 (the "License"); 51260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * you may not use this file except in compliance with the License. 61260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * You may obtain a copy of the License at 71260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * 81260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * http://www.apache.org/licenses/LICENSE-2.0 91260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * 101260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * Unless required by applicable law or agreed to in writing, software 111260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * distributed under the License is distributed on an "AS IS" BASIS, 121260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * See the License for the specific language governing permissions and 141260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * limitations under the License. 151260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa */ 161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowapackage com.android.internal.telephony; 181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport static android.telephony.SmsManager.RESULT_ERROR_GENERIC_FAILURE; 201260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport android.app.PendingIntent; 211260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport android.app.PendingIntent.CanceledException; 22c99dab56e20222b28cbc6238645feac938f1c333Ye Wenimport android.net.Uri; 231260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport android.os.AsyncResult; 241260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport android.os.Message; 251260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport android.provider.Telephony.Sms.Intents; 261260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport android.telephony.Rlog; 271260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 284bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wenimport com.android.internal.telephony.cdma.CdmaInboundSmsHandler; 291260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport com.android.internal.telephony.cdma.CdmaSMSDispatcher; 301260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowaimport com.android.internal.telephony.gsm.GsmInboundSmsHandler; 314bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wenimport com.android.internal.telephony.gsm.GsmSMSDispatcher; 324bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wen 334bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wenimport java.util.ArrayList; 344bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wenimport java.util.HashMap; 354bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wenimport java.util.List; 364bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wenimport java.util.concurrent.atomic.AtomicBoolean; 374bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wenimport java.util.concurrent.atomic.AtomicInteger; 381260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 391260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowapublic final class ImsSMSDispatcher extends SMSDispatcher { 401260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private static final String TAG = "RIL_ImsSms"; 411260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 421260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private SMSDispatcher mCdmaDispatcher; 431260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private SMSDispatcher mGsmDispatcher; 441260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 45ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa private GsmInboundSmsHandler mGsmInboundSmsHandler; 46ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa private CdmaInboundSmsHandler mCdmaInboundSmsHandler; 47ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa 481260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa /** true if IMS is registered and sms is supported, false otherwise.*/ 501260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private boolean mIms = false; 511260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private String mImsSmsFormat = SmsConstants.FORMAT_UNKNOWN; 521260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 531260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa public ImsSMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor, 541260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa SmsUsageMonitor usageMonitor) { 55ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa super(phone, usageMonitor, null); 561260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "ImsSMSDispatcher created"); 571260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 58ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa // Create dispatchers, inbound SMS handlers and 59ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa // broadcast undelivered messages in raw table. 60ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa mCdmaDispatcher = new CdmaSMSDispatcher(phone, usageMonitor, this); 611260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmInboundSmsHandler = GsmInboundSmsHandler.makeInboundSmsHandler(phone.getContext(), 621260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa storageMonitor, phone); 631260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaInboundSmsHandler = CdmaInboundSmsHandler.makeInboundSmsHandler(phone.getContext(), 641260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa storageMonitor, phone, (CdmaSMSDispatcher) mCdmaDispatcher); 65ace9a749c5a2a5e07527f728b7331423d16c36cdSukanya Rajkhowa mGsmDispatcher = new GsmSMSDispatcher(phone, usageMonitor, this, mGsmInboundSmsHandler); 661260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Thread broadcastThread = new Thread(new SmsBroadcastUndelivered(phone.getContext(), 671260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmInboundSmsHandler, mCdmaInboundSmsHandler)); 681260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa broadcastThread.start(); 691260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 701260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCi.registerForOn(this, EVENT_RADIO_ON, null); 711260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCi.registerForImsNetworkStateChanged(this, EVENT_IMS_STATE_CHANGED, null); 721260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 731260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 741260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa /* Updates the phone object when there is a change */ 751260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 761260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected void updatePhoneObject(PhoneBase phone) { 771260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "In IMS updatePhoneObject "); 781260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa super.updatePhoneObject(phone); 791260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher.updatePhoneObject(phone); 801260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmDispatcher.updatePhoneObject(phone); 81d2feaf918ab0c1173d4ada182532e48d0c0d3f77Wink Saville mGsmInboundSmsHandler.updatePhoneObject(phone); 82d2feaf918ab0c1173d4ada182532e48d0c0d3f77Wink Saville mCdmaInboundSmsHandler.updatePhoneObject(phone); 831260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 841260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 851260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa public void dispose() { 861260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCi.unregisterForOn(this); 871260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCi.unregisterForImsNetworkStateChanged(this); 881260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmDispatcher.dispose(); 891260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher.dispose(); 901260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmInboundSmsHandler.dispose(); 911260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaInboundSmsHandler.dispose(); 921260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 931260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 941260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa /** 951260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * Handles events coming from the phone stack. Overridden from handler. 961260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * 971260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * @param msg the message to handle 981260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa */ 991260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 1001260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa public void handleMessage(Message msg) { 1011260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa AsyncResult ar; 1021260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1031260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa switch (msg.what) { 1041260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa case EVENT_RADIO_ON: 1051260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa case EVENT_IMS_STATE_CHANGED: // received unsol 1061260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCi.getImsRegistrationState(this.obtainMessage(EVENT_IMS_STATE_DONE)); 1071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa break; 1081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1091260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa case EVENT_IMS_STATE_DONE: 1101260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa ar = (AsyncResult) msg.obj; 1111260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1121260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (ar.exception == null) { 1131260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa updateImsInfo(ar); 1141260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 1151260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.e(TAG, "IMS State query failed with exp " 1161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa + ar.exception); 1171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa break; 1191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1201260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa default: 1211260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa super.handleMessage(msg); 1221260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1231260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1241260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1251260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private void setImsSmsFormat(int format) { 1261260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // valid format? 1271260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa switch (format) { 1281260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa case PhoneConstants.PHONE_TYPE_GSM: 1291260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mImsSmsFormat = "3gpp"; 1301260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa break; 1311260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa case PhoneConstants.PHONE_TYPE_CDMA: 1321260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mImsSmsFormat = "3gpp2"; 1331260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa break; 1341260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa default: 1351260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mImsSmsFormat = "unknown"; 1361260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa break; 1371260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1381260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1391260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1401260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private void updateImsInfo(AsyncResult ar) { 1411260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa int[] responseArray = (int[])ar.result; 1421260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1431260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mIms = false; 1441260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (responseArray[0] == 1) { // IMS is registered 1451260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "IMS is registered!"); 1461260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mIms = true; 1471260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 1481260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "IMS is NOT registered!"); 1491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1501260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1511260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa setImsSmsFormat(responseArray[1]); 1521260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1531260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (("unknown".equals(mImsSmsFormat))) { 1541260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.e(TAG, "IMS format was unknown!"); 1551260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // failed to retrieve valid IMS SMS format info, set IMS to unregistered 1561260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mIms = false; 1571260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1581260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1591260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1601260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 1611260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected void sendData(String destAddr, String scAddr, int destPort, 1621260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) { 1631260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (isCdmaMo()) { 1641260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher.sendData(destAddr, scAddr, destPort, 1651260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa data, sentIntent, deliveryIntent); 1661260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 1671260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmDispatcher.sendData(destAddr, scAddr, destPort, 1681260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa data, sentIntent, deliveryIntent); 1691260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1701260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1711260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1721260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 1731260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected void sendMultipartText(String destAddr, String scAddr, 1741260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, 175b29851580bba4a13ddbf7a534d8b09295eb2c60fYe Wen ArrayList<PendingIntent> deliveryIntents, Uri messageUri, String callingPkg) { 1761260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (isCdmaMo()) { 1771260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher.sendMultipartText(destAddr, scAddr, 178b29851580bba4a13ddbf7a534d8b09295eb2c60fYe Wen parts, sentIntents, deliveryIntents, messageUri, callingPkg); 1791260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 1801260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmDispatcher.sendMultipartText(destAddr, scAddr, 181b29851580bba4a13ddbf7a534d8b09295eb2c60fYe Wen parts, sentIntents, deliveryIntents, messageUri, callingPkg); 1821260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1831260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1841260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1851260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 1861260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected void sendSms(SmsTracker tracker) { 1871260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // sendSms is a helper function to other send functions, sendText/Data... 1881260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // it is not part of ISms.stub 1891260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.e(TAG, "sendSms should never be called from here!"); 1901260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 1911260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 1921260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 1938d8e8f45200d17b78d196d8cba389fd9c547ac11Cheuksan Wang protected void sendSmsByPstn(SmsTracker tracker) { 1948d8e8f45200d17b78d196d8cba389fd9c547ac11Cheuksan Wang // This function should be defined in Gsm/CdmaDispatcher. 1958d8e8f45200d17b78d196d8cba389fd9c547ac11Cheuksan Wang Rlog.e(TAG, "sendSmsByPstn should never be called from here!"); 1968d8e8f45200d17b78d196d8cba389fd9c547ac11Cheuksan Wang } 1978d8e8f45200d17b78d196d8cba389fd9c547ac11Cheuksan Wang 1988d8e8f45200d17b78d196d8cba389fd9c547ac11Cheuksan Wang @Override 199b29851580bba4a13ddbf7a534d8b09295eb2c60fYe Wen protected void sendText(String destAddr, String scAddr, String text, PendingIntent sentIntent, 200b29851580bba4a13ddbf7a534d8b09295eb2c60fYe Wen PendingIntent deliveryIntent, Uri messageUri, String callingPkg) { 2011260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "sendText"); 2021260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (isCdmaMo()) { 2031260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher.sendText(destAddr, scAddr, 204b29851580bba4a13ddbf7a534d8b09295eb2c60fYe Wen text, sentIntent, deliveryIntent, messageUri, callingPkg); 2051260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 2061260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmDispatcher.sendText(destAddr, scAddr, 207b29851580bba4a13ddbf7a534d8b09295eb2c60fYe Wen text, sentIntent, deliveryIntent, messageUri, callingPkg); 2081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 2091260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 2101260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 2111260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 21263418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni protected void injectSmsPdu(byte[] pdu, String format, PendingIntent receivedIntent) { 21363418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni Rlog.d(TAG, "ImsSMSDispatcher:injectSmsPdu"); 21463418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni try { 21563418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni // TODO We need to decide whether we should allow injecting GSM(3gpp) 21663418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni // SMS pdus when the phone is camping on CDMA(3gpp2) network and vice versa. 21763418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni android.telephony.SmsMessage msg = 21863418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni android.telephony.SmsMessage.createFromPdu(pdu, format); 21963418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni 22063418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni // Only class 1 SMS are allowed to be injected. 22163418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni if (msg.getMessageClass() != android.telephony.SmsMessage.MessageClass.CLASS_1) { 22263418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni if (receivedIntent != null) 22363418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni receivedIntent.send(Intents.RESULT_SMS_GENERIC_ERROR); 22463418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni return; 22563418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } 22663418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni 22763418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni AsyncResult ar = new AsyncResult(receivedIntent, msg, null); 22863418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni 22963418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni if (format.equals(SmsConstants.FORMAT_3GPP)) { 23063418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni Rlog.i(TAG, "ImsSMSDispatcher:injectSmsText Sending msg=" + msg + 23163418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni ", format=" + format + "to mGsmInboundSmsHandler"); 23263418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni mGsmInboundSmsHandler.sendMessage(InboundSmsHandler.EVENT_INJECT_SMS, ar); 23363418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } else if (format.equals(SmsConstants.FORMAT_3GPP2)) { 23463418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni Rlog.i(TAG, "ImsSMSDispatcher:injectSmsText Sending msg=" + msg + 23563418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni ", format=" + format + "to mCdmaInboundSmsHandler"); 23663418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni mCdmaInboundSmsHandler.sendMessage(InboundSmsHandler.EVENT_INJECT_SMS, ar); 23763418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } else { 23863418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni // Invalid pdu format. 23963418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni Rlog.e(TAG, "Invalid pdu format: " + format); 2406f64a8956a101bd16c900017f7692f9284c6bdd6Anil Muthineni if (receivedIntent != null) 2416f64a8956a101bd16c900017f7692f9284c6bdd6Anil Muthineni receivedIntent.send(Intents.RESULT_SMS_GENERIC_ERROR); 24263418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } 24363418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } catch (Exception e) { 24463418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni Rlog.e(TAG, "injectSmsPdu failed: ", e); 24563418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni try { 2466f64a8956a101bd16c900017f7692f9284c6bdd6Anil Muthineni if (receivedIntent != null) 2476f64a8956a101bd16c900017f7692f9284c6bdd6Anil Muthineni receivedIntent.send(Intents.RESULT_SMS_GENERIC_ERROR); 24863418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } catch (CanceledException ex) {} 24963418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } 25063418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni } 25163418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni 25263418bbd2a9d7cc88ae24cc5ae776c01d688fc3aAnil Muthineni @Override 2531260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa public void sendRetrySms(SmsTracker tracker) { 2541260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa String oldFormat = tracker.mFormat; 2551260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 2561260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // newFormat will be based on voice technology 2571260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa String newFormat = 2581260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa (PhoneConstants.PHONE_TYPE_CDMA == mPhone.getPhoneType()) ? 2591260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher.getFormat() : 2601260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmDispatcher.getFormat(); 2611260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 2621260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // was previously sent sms format match with voice tech? 2631260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (oldFormat.equals(newFormat)) { 2641260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (isCdmaFormat(newFormat)) { 2651260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "old format matched new format (cdma)"); 2661260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher.sendSms(tracker); 2671260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return; 2681260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 2691260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "old format matched new format (gsm)"); 2701260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mGsmDispatcher.sendSms(tracker); 2711260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return; 2721260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 2731260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 2741260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 2751260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // format didn't match, need to re-encode. 2761260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa HashMap map = tracker.mData; 2771260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 2781260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // to re-encode, fields needed are: scAddr, destAddr, and 2791260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // text if originally sent as sendText or 2801260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // data and destPort if originally sent as sendData. 2811260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (!( map.containsKey("scAddr") && map.containsKey("destAddr") && 2821260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa ( map.containsKey("text") || 2831260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa (map.containsKey("data") && map.containsKey("destPort"))))) { 2841260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // should never come here... 2851260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.e(TAG, "sendRetrySms failed to re-encode per missing fields!"); 286c99dab56e20222b28cbc6238645feac938f1c333Ye Wen tracker.onFailed(mContext, RESULT_ERROR_GENERIC_FAILURE, 0/*errorCode*/); 2871260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return; 2881260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 2891260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa String scAddr = (String)map.get("scAddr"); 2901260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa String destAddr = (String)map.get("destAddr"); 2911260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 2921260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa SmsMessageBase.SubmitPduBase pdu = null; 2931260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // figure out from tracker if this was sendText/Data 2941260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (map.containsKey("text")) { 2951260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "sms failed was text"); 2961260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa String text = (String)map.get("text"); 2971260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 2981260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (isCdmaFormat(newFormat)) { 2991260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "old format (gsm) ==> new format (cdma)"); 3001260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa pdu = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu( 3011260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa scAddr, destAddr, text, (tracker.mDeliveryIntent != null), null); 3021260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 3031260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "old format (cdma) ==> new format (gsm)"); 3041260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa pdu = com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu( 3051260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa scAddr, destAddr, text, (tracker.mDeliveryIntent != null), null); 3061260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3071260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else if (map.containsKey("data")) { 3081260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "sms failed was data"); 3091260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa byte[] data = (byte[])map.get("data"); 3101260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Integer destPort = (Integer)map.get("destPort"); 3111260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3121260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (isCdmaFormat(newFormat)) { 3131260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "old format (gsm) ==> new format (cdma)"); 3141260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa pdu = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu( 3151260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa scAddr, destAddr, destPort.intValue(), data, 3161260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa (tracker.mDeliveryIntent != null)); 3171260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } else { 3181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.d(TAG, "old format (cdma) ==> new format (gsm)"); 3191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa pdu = com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu( 3201260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa scAddr, destAddr, destPort.intValue(), data, 3211260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa (tracker.mDeliveryIntent != null)); 3221260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3231260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3241260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3251260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // replace old smsc and pdu with newly encoded ones 3261260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa map.put("smsc", pdu.encodedScAddress); 3271260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa map.put("pdu", pdu.encodedMessage); 3281260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3291260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa SMSDispatcher dispatcher = (isCdmaFormat(newFormat)) ? 3301260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa mCdmaDispatcher : mGsmDispatcher; 3311260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3321260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa tracker.mFormat = dispatcher.getFormat(); 3331260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa dispatcher.sendSms(tracker); 3341260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3351260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3361260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 3378215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang protected void sendSubmitPdu(SmsTracker tracker) { 3388215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang sendRawPdu(tracker); 3398215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang } 3408215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang 3418215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang @Override 3421260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected String getFormat() { 3431260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // this function should be defined in Gsm/CdmaDispatcher. 3441260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.e(TAG, "getFormat should never be called from here!"); 3451260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return "unknown"; 3461260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3471260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3481260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 3491260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected GsmAlphabet.TextEncodingDetails calculateLength( 3501260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa CharSequence messageBody, boolean use7bitOnly) { 3511260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.e(TAG, "Error! Not implemented for IMS."); 3521260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return null; 3531260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3541260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3551260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 3568215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang protected SmsTracker getNewSubmitPduTracker(String destinationAddress, String scAddress, 3578215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang String message, SmsHeader smsHeader, int format, PendingIntent sentIntent, 358c99dab56e20222b28cbc6238645feac938f1c333Ye Wen PendingIntent deliveryIntent, boolean lastPart, 3594bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wen AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, 3604bd1dec4138ac11a91a8ec606a27fc4c5c63f14bYe Wen String fullMessageText) { 3611260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa Rlog.e(TAG, "Error! Not implemented for IMS."); 3628215559cd1141ac90c478fd3df75e43c9d755c6cCheuksan Wang return null; 3631260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3641260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3651260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 3661260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa public boolean isIms() { 3671260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return mIms; 3681260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3691260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3701260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa @Override 3711260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa public String getImsSmsFormat() { 3721260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return mImsSmsFormat; 3731260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3741260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3751260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa /** 3761260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * Determines whether or not to use CDMA format for MO SMS. 3771260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * If SMS over IMS is supported, then format is based on IMS SMS format, 3781260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * otherwise format is based on current phone type. 3791260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * 3801260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * @return true if Cdma format should be used for MO SMS, false otherwise. 3811260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa */ 3821260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private boolean isCdmaMo() { 3831260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa if (!isIms()) { 3841260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // IMS is not registered, use Voice technology to determine SMS format. 3851260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return (PhoneConstants.PHONE_TYPE_CDMA == mPhone.getPhoneType()); 3861260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3871260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa // IMS is registered with SMS support 3881260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return isCdmaFormat(mImsSmsFormat); 3891260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 3901260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa 3911260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa /** 3921260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * Determines whether or not format given is CDMA format. 3931260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * 3941260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * @param format 3951260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * @return true if format given is CDMA format, false otherwise. 3961260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa */ 3971260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa private boolean isCdmaFormat(String format) { 3981260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa return (mCdmaDispatcher.getFormat().equals(format)); 3991260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa } 4001260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa} 401