1767a662ecde33c3979bf02b793d392aca0403162Wink Saville/* 2767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Copyright (C) 2006 The Android Open Source Project 3767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 4767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5767a662ecde33c3979bf02b793d392aca0403162Wink Saville * you may not use this file except in compliance with the License. 6767a662ecde33c3979bf02b793d392aca0403162Wink Saville * You may obtain a copy of the License at 7767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 8767a662ecde33c3979bf02b793d392aca0403162Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 10767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Unless required by applicable law or agreed to in writing, software 11767a662ecde33c3979bf02b793d392aca0403162Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12767a662ecde33c3979bf02b793d392aca0403162Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See the License for the specific language governing permissions and 14767a662ecde33c3979bf02b793d392aca0403162Wink Saville * limitations under the License. 15767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 16767a662ecde33c3979bf02b793d392aca0403162Wink Saville 17767a662ecde33c3979bf02b793d392aca0403162Wink Savillepackage com.android.internal.telephony.cdma; 18767a662ecde33c3979bf02b793d392aca0403162Wink Saville 19e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.app.ActivityManagerNative; 20142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.content.ContentValues; 21b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport android.content.Context; 22e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.content.Intent; 23ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.content.SharedPreferences; 24142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.database.SQLException; 25142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.net.Uri; 26767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.AsyncResult; 27767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Handler; 28767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Message; 2995a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager; 3095a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager.WakeLock; 31767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Registrant; 32767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.RegistrantList; 33767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.SystemProperties; 34ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.preference.PreferenceManager; 35142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.provider.Telephony; 36767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.CellLocation; 37767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.PhoneNumberUtils; 38767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.ServiceState; 39e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 40767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.text.TextUtils; 41767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.util.Log; 42767a662ecde33c3979bf02b793d392aca0403162Wink Saville 431c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganeshimport com.android.internal.telephony.Call; 44767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CallStateException; 45b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport com.android.internal.telephony.CallTracker; 4690cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalinkimport com.android.internal.telephony.CommandException; 47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CommandsInterface; 48767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Connection; 49ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport com.android.internal.telephony.IccException; 50767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccFileHandler; 51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 52767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 53b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport com.android.internal.telephony.MccTable; 54767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.MmiCode; 553caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwaltimport com.android.internal.telephony.OperatorInfo; 56767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Phone; 57767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneBase; 58767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneNotifier; 59767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneProxy; 60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneSubInfo; 61fd2d01302781af91d77557a99874111a4fee8365Wink Savilleimport com.android.internal.telephony.ServiceStateTracker; 62e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport com.android.internal.telephony.TelephonyIntents; 639bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport com.android.internal.telephony.TelephonyProperties; 6424440cf8a9431291bdcaa77b418e6c4715932507Naveen Kallaimport com.android.internal.telephony.UUSInfo; 65b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport com.android.internal.telephony.cat.CatService; 66142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 67e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kallaimport java.util.ArrayList; 68767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.util.List; 69e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Matcher; 70e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Pattern; 71e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 72b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA; 73b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY; 74b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC; 75b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby 76767a662ecde33c3979bf02b793d392aca0403162Wink Saville/** 77767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 78767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 79767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic class CDMAPhone extends PhoneBase { 80767a662ecde33c3979bf02b793d392aca0403162Wink Saville static final String LOG_TAG = "CDMA"; 81e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final boolean DBG = true; 82767a662ecde33c3979bf02b793d392aca0403162Wink Saville 8322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // Default Emergency Callback Mode exit timer 84019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang private static final int DEFAULT_ECM_EXIT_TIMER_VALUE = 300000; 8595a1d1a89e383dab893750638c2393dec54833ffWink Saville 86ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause static final String VM_COUNT_CDMA = "vm_count_key_cdma"; 87ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private static final String VM_NUMBER_CDMA = "vm_number_key_cdma"; 88ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private String mVmNumber = null; 8922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 9095a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int RESTART_ECM_TIMER = 0; // restart Ecm timer 9195a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int CANCEL_ECM_TIMER = 1; // cancel Ecm timer 9295a1d1a89e383dab893750638c2393dec54833ffWink Saville 93a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Instance Variables 94767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaCallTracker mCT; 95767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaServiceStateTracker mSST; 96e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla ArrayList <CdmaMmiCode> mPendingMmis = new ArrayList<CdmaMmiCode>(); 97767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimPhoneBookInterfaceManager mRuimPhoneBookInterfaceManager; 98767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimSmsInterfaceManager mRuimSmsInterfaceManager; 99767a662ecde33c3979bf02b793d392aca0403162Wink Saville PhoneSubInfo mSubInfo; 100e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville EriManager mEriManager; 10195a1d1a89e383dab893750638c2393dec54833ffWink Saville WakeLock mWakeLock; 102a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatService mCcatService; 103a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville 104e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // mNvLoadedRegistrants are informed after the EVENT_NV_READY 105b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private final RegistrantList mNvLoadedRegistrants = new RegistrantList(); 106e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 107e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // mEriFileLoadedRegistrants are informed after the ERI text has been loaded 108b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private final RegistrantList mEriFileLoadedRegistrants = new RegistrantList(); 109dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 11095a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmTimerResetRegistrants are informed after Ecm timer is canceled or re-started 111b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private final RegistrantList mEcmTimerResetRegistrants = new RegistrantList(); 11295a1d1a89e383dab893750638c2393dec54833ffWink Saville 11395a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmExitRespRegistrant is informed after the phone has been exited 114dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //the emergency callback mode 115dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //keep track of if phone is in emergency callback mode 11695a1d1a89e383dab893750638c2393dec54833ffWink Saville private boolean mIsPhoneInEcmState; 11795a1d1a89e383dab893750638c2393dec54833ffWink Saville private Registrant mEcmExitRespRegistrant; 1182ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang protected String mImei; 1192ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang protected String mImeiSv; 120767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mEsn; 121767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mMeid; 122e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // string to define how the carrier specifies its own ota sp number 123e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private String mCarrierOtaSpNumSchema; 1242563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 12595a1d1a89e383dab893750638c2393dec54833ffWink Saville // A runnable which is used to automatically exit from Ecm after a period of time. 126dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private Runnable mExitEcmRunnable = new Runnable() { 127b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 128dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void run() { 129dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville exitEmergencyCallbackMode(); 130dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 131dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville }; 132767a662ecde33c3979bf02b793d392aca0403162Wink Saville 133767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant mPostDialHandler; 134767a662ecde33c3979bf02b793d392aca0403162Wink Saville 135fe629782f33a07827c69841fce9964bd90ff152aWink Saville static String PROPERTY_CDMA_HOME_OPERATOR_NUMERIC = "ro.cdma.home.operator.numeric"; 136767a662ecde33c3979bf02b793d392aca0403162Wink Saville 137a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Constructors 138767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) { 1399d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville super(notifier, context, ci, false); 1401f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville initSstIcc(); 1419d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville init(context, notifier); 142767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 143767a662ecde33c3979bf02b793d392aca0403162Wink Saville 144767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier, 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville boolean unitTestMode) { 146a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super(notifier, context, ci, unitTestMode); 1471f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville initSstIcc(); 1489d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville init(context, notifier); 1499d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 150767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1511f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville protected void initSstIcc() { 15275acebd02d2b3478d98cc8da98fa9229c53c32d5Ramesh Sudini mSST = new CdmaServiceStateTracker(this); 1531f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccRecords = new RuimRecords(this); 1541f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccCard = new RuimCard(this, LOG_TAG, DBG); 155c46a085eedef8c7c59df4b182d90d787f1ff0f04Kazuhiro Ondo mIccFileHandler = new RuimFileHandler(this); 15675acebd02d2b3478d98cc8da98fa9229c53c32d5Ramesh Sudini } 15775acebd02d2b3478d98cc8da98fa9229c53c32d5Ramesh Sudini 1589d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville protected void init(Context context, PhoneNotifier notifier) { 1593cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink mCM.setPhoneType(Phone.PHONE_TYPE_CDMA); 160767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT = new CdmaCallTracker(this); 161b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSMS = new CdmaSMSDispatcher(this, mSmsStorageMonitor, mSmsUsageMonitor); 16263edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker = new CdmaDataConnectionTracker (this); 163767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager = new RuimPhoneBookInterfaceManager(this); 164bb3716332321e22537a5015be13e2229fb9b90bcJake Hamby mRuimSmsInterfaceManager = new RuimSmsInterfaceManager(this, mSMS); 165767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo = new PhoneSubInfo(this); 166e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager = new EriManager(this, context, EriManager.ERI_FROM_XML); 1671f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mCcatService = CatService.getInstance(mCM, mIccRecords, mContext, 1681f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccFileHandler, mIccCard); 169767a662ecde33c3979bf02b793d392aca0403162Wink Saville 170a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); 1711f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccRecords.registerForRecordsLoaded(this, EVENT_RUIM_RECORDS_LOADED, null); 172a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 173a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOn(this, EVENT_RADIO_ON, null); 174a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setOnSuppServiceNotification(this, EVENT_SSN, null); 17588d852969a0ffd2ce228defe96ecae0173574f55Robert Greenwalt mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); 176a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForNVReady(this, EVENT_NV_READY, null); 177a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setEmergencyCallbackMode(this, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null); 178e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 17995a1d1a89e383dab893750638c2393dec54833ffWink Saville PowerManager pm 18095a1d1a89e383dab893750638c2393dec54833ffWink Saville = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 18195a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,LOG_TAG); 182767a662ecde33c3979bf02b793d392aca0403162Wink Saville 183767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Change the system setting 1849bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE, 185b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby Integer.toString(Phone.PHONE_TYPE_CDMA)); 186dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 18722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // This is needed to handle phone process crashes 18822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 18995a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = inEcm.equals("true"); 1909b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang if (mIsPhoneInEcmState) { 1919b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang // Send a message which will invoke handleExitEmergencyCallbackMode 1929b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang mCM.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 1939b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang } 194ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 195e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // get the string that specifies the carrier OTA Sp number 196e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema = SystemProperties.get( 197e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li TelephonyProperties.PROPERTY_OTASP_NUM_SCHEMA,""); 198e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 199142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator alpha property by retrieving from build-time system property 200142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String operatorAlpha = SystemProperties.get("ro.cdma.home.operator.alpha"); 201142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, operatorAlpha); 202142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 203142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator numeric property by retrieving from build-time system property 204fe629782f33a07827c69841fce9964bd90ff152aWink Saville String operatorNumeric = SystemProperties.get(PROPERTY_CDMA_HOME_OPERATOR_NUMERIC); 205142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_NUMERIC, operatorNumeric); 206142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 207142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets iso country property by retrieving from build-time system property 208142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setIsoCountryProperty(operatorNumeric); 209142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 210142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets current entry in the telephony carrier table 211142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville updateCurrentCarrierInProvider(operatorNumeric); 212142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 213ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Notify voicemails. 214ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause notifier.notifyMessageWaitingChanged(this); 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 216767a662ecde33c3979bf02b793d392aca0403162Wink Saville 217b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 218767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void dispose() { 219767a662ecde33c3979bf02b793d392aca0403162Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 220a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.dispose(); 2211f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville log("dispose"); 222767a662ecde33c3979bf02b793d392aca0403162Wink Saville 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Unregister from all former registered events 2241f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccRecords.unregisterForRecordsLoaded(this); //EVENT_RUIM_RECORDS_LOADED 225a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForAvailable(this); //EVENT_RADIO_AVAILABLE 226a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOffOrNotAvailable(this); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE 227a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOn(this); //EVENT_RADIO_ON 228a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForNVReady(this); //EVENT_NV_READY 22988d852969a0ffd2ce228defe96ecae0173574f55Robert Greenwalt mSST.unregisterForNetworkAttached(this); //EVENT_REGISTERED_TO_NETWORK 230a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unSetOnSuppServiceNotification(this); 231f3ee6f87a344b185d8bde12c77440c9020378510Banavathu, Srinivas Naik removeCallbacks(mExitEcmRunnable); 232767a662ecde33c3979bf02b793d392aca0403162Wink Saville 233e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mPendingMmis.clear(); 234e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 235767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Force all referenced classes to unregister their former registered events 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.dispose(); 23763edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.dispose(); 238767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.dispose(); 239767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSMS.dispose(); 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIccFileHandler.dispose(); // instance of RuimFileHandler 2411f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccRecords.dispose(); 2421f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccCard.dispose(); 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager.dispose(); 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimSmsInterfaceManager.dispose(); 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo.dispose(); 246e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager.dispose(); 247a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka mCcatService.dispose(); 248767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville 251b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 252767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void removeReferences() { 253b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby log("removeReferences"); 254b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby super.removeReferences(); 255b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mRuimPhoneBookInterfaceManager = null; 256b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mRuimSmsInterfaceManager = null; 257b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSMS = null; 258b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSubInfo = null; 259b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mIccRecords = null; 260b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mIccFileHandler = null; 261b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mIccCard = null; 262b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mDataConnectionTracker = null; 263b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mCT = null; 264b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSST = null; 265b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mEriManager = null; 266b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mCcatService = null; 267b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mExitEcmRunnable = null; 268767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 269767a662ecde33c3979bf02b793d392aca0403162Wink Saville 270b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 271767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void finalize() { 272e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if(DBG) Log.d(LOG_TAG, "CDMAPhone finalized"); 27395a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 27495a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "UNEXPECTED; mWakeLock is held when finalizing."); 27595a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 27695a1d1a89e383dab893750638c2393dec54833ffWink Saville } 277767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 278767a662ecde33c3979bf02b793d392aca0403162Wink Saville 279767a662ecde33c3979bf02b793d392aca0403162Wink Saville public ServiceState getServiceState() { 280767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.ss; 281767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 282767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2839d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville public CallTracker getCallTracker() { 2849d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville return mCT; 2859d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 2869d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville 2873cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public Phone.State getState() { 288767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.state; 289767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 290767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2919d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville public ServiceStateTracker getServiceStateTracker() { 2929d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville return mSST; 2939d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 2949d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville 2953cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public String getPhoneName() { 296767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA"; 297767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 298767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2993cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public int getPhoneType() { 3003cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink return Phone.PHONE_TYPE_CDMA; 3013cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink } 3023cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink 303767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canTransfer() { 304767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canTransfer: not possible in CDMA"); 305767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 307767a662ecde33c3979bf02b793d392aca0403162Wink Saville 3083cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public CdmaCall getRingingCall() { 309767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.ringingCall; 310767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 311767a662ecde33c3979bf02b793d392aca0403162Wink Saville 312767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setMute(boolean muted) { 313767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.setMute(muted); 314767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 315767a662ecde33c3979bf02b793d392aca0403162Wink Saville 316767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getMute() { 317767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.getMute(); 318767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 319767a662ecde33c3979bf02b793d392aca0403162Wink Saville 320767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void conference() throws CallStateException { 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville // three way calls in CDMA will be handled by feature codes 322767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "conference: not possible in CDMA"); 323767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 324767a662ecde33c3979bf02b793d392aca0403162Wink Saville 325767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 326767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.setPreferredVoicePrivacy(enable, onComplete); 327767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 328767a662ecde33c3979bf02b793d392aca0403162Wink Saville 329767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 330767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.getPreferredVoicePrivacy(onComplete); 331767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 332767a662ecde33c3979bf02b793d392aca0403162Wink Saville 333767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void clearDisconnected() { 334767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.clearDisconnected(); 335767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 336767a662ecde33c3979bf02b793d392aca0403162Wink Saville 337767a662ecde33c3979bf02b793d392aca0403162Wink Saville public DataActivityState getDataActivityState() { 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataActivityState ret = DataActivityState.NONE; 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville 340a4e82851e9c8a75dfb371403c500e3b3cf3e4565Robert Greenwalt if (mSST.getCurrentDataConnectionState() == ServiceState.STATE_IN_SERVICE) { 341767a662ecde33c3979bf02b793d392aca0403162Wink Saville 34263edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt switch (mDataConnectionTracker.getActivity()) { 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAIN: 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAIN; 345767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 346767a662ecde33c3979bf02b793d392aca0403162Wink Saville 347767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAOUT: 348767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAOUT; 349767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 350767a662ecde33c3979bf02b793d392aca0403162Wink Saville 351767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAINANDOUT: 352767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAINANDOUT; 353767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 354e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 355e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case DORMANT: 356e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataActivityState.DORMANT; 357e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 358767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 359767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 360767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 361767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 362767a662ecde33c3979bf02b793d392aca0403162Wink Saville 363767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void 364767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifySignalStrength() { 365767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifySignalStrength(this); 366767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 367767a662ecde33c3979bf02b793d392aca0403162Wink Saville 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville public Connection 369767a662ecde33c3979bf02b793d392aca0403162Wink Saville dial (String dialString) throws CallStateException { 370767a662ecde33c3979bf02b793d392aca0403162Wink Saville // Need to make sure dialString gets parsed properly 371767a662ecde33c3979bf02b793d392aca0403162Wink Saville String newDialString = PhoneNumberUtils.stripSeparators(dialString); 37222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville return mCT.dial(newDialString); 373767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 374767a662ecde33c3979bf02b793d392aca0403162Wink Saville 37524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla public Connection dial(String dialString, UUSInfo uusInfo) throws CallStateException { 37624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla throw new CallStateException("Sending UUS information NOT supported in CDMA!"); 37724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla } 37824440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla 379e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public SignalStrength getSignalStrength() { 380e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return mSST.mSignalStrength; 381767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 382767a662ecde33c3979bf02b793d392aca0403162Wink Saville 383767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 384767a662ecde33c3979bf02b793d392aca0403162Wink Saville getMessageWaitingIndicator() { 385ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return (getVoiceMessageCount() > 0); 386767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 387767a662ecde33c3979bf02b793d392aca0403162Wink Saville 388767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<? extends MmiCode> 389767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPendingMmiCodes() { 390e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return mPendingMmis; 391767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 392767a662ecde33c3979bf02b793d392aca0403162Wink Saville 393767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForSuppServiceNotification( 394767a662ecde33c3979bf02b793d392aca0403162Wink Saville Handler h, int what, Object obj) { 395767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method registerForSuppServiceNotification is NOT supported in CDMA!"); 396767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 397767a662ecde33c3979bf02b793d392aca0403162Wink Saville 398767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getBackgroundCall() { 399767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.backgroundCall; 400767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 401767a662ecde33c3979bf02b793d392aca0403162Wink Saville 402767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handleInCallMmiCommands(String dialString) { 403767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method handleInCallMmiCommands is NOT supported in CDMA!"); 404767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 405767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 406767a662ecde33c3979bf02b793d392aca0403162Wink Saville 407e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla boolean isInCall() { 408e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State foregroundCallState = getForegroundCall().getState(); 409e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State backgroundCallState = getBackgroundCall().getState(); 410e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State ringingCallState = getRingingCall().getState(); 411e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 412e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return (foregroundCallState.isAlive() || backgroundCallState.isAlive() || ringingCallState 413e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla .isAlive()); 414e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 415e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 416767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 417767a662ecde33c3979bf02b793d392aca0403162Wink Saville setNetworkSelectionModeAutomatic(Message response) { 418767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setNetworkSelectionModeAutomatic is NOT supported in CDMA!"); 419767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 420767a662ecde33c3979bf02b793d392aca0403162Wink Saville 421767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForSuppServiceNotification(Handler h) { 422767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method unregisterForSuppServiceNotification is NOT supported in CDMA!"); 423767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 424767a662ecde33c3979bf02b793d392aca0403162Wink Saville 425767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 426767a662ecde33c3979bf02b793d392aca0403162Wink Saville acceptCall() throws CallStateException { 427767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.acceptCall(); 428767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 429767a662ecde33c3979bf02b793d392aca0403162Wink Saville 430767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 431767a662ecde33c3979bf02b793d392aca0403162Wink Saville rejectCall() throws CallStateException { 432767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.rejectCall(); 433767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 434767a662ecde33c3979bf02b793d392aca0403162Wink Saville 435767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 436767a662ecde33c3979bf02b793d392aca0403162Wink Saville switchHoldingAndActive() throws CallStateException { 437767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.switchWaitingOrHoldingAndActive(); 438767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 439767a662ecde33c3979bf02b793d392aca0403162Wink Saville 440767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1Number() { 441f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getMdnNumber(); 442767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 443767a662ecde33c3979bf02b793d392aca0403162Wink Saville 44422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville public String getCdmaPrlVersion(){ 445daccacb865947c00f277f1823333e2fbf91e652aWink Saville return mSST.getPrlVersion(); 44622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville } 44722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 448019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang public String getCdmaMin() { 449f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getCdmaMin(); 450e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 451e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 4529e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public boolean isMinInfoReady() { 4539e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo return mSST.isMinInfoReady(); 4549e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 4559e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 456767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallWaiting(Message onComplete) { 457767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.queryCallWaiting(CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 458767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 459767a662ecde33c3979bf02b793d392aca0403162Wink Saville 460767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 461767a662ecde33c3979bf02b793d392aca0403162Wink Saville setRadioPower(boolean power) { 462767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.setRadioPower(power); 463767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 464767a662ecde33c3979bf02b793d392aca0403162Wink Saville 465767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEsn() { 466767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mEsn; 467767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 468767a662ecde33c3979bf02b793d392aca0403162Wink Saville 469767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMeid() { 470767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mMeid; 471767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 472767a662ecde33c3979bf02b793d392aca0403162Wink Saville 4733158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville //returns MEID or ESN in CDMA 474767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceId() { 4753158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville String id = getMeid(); 4763158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville if ((id == null) || id.matches("^0*$")) { 4773158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville Log.d(LOG_TAG, "getDeviceId(): MEID is not initialized use ESN"); 4783158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville id = getEsn(); 4793158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville } 4803158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville return id; 481767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 482767a662ecde33c3979bf02b793d392aca0403162Wink Saville 483767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceSvn() { 484767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "getDeviceSvn(): return 0"); 485767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 486767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 487767a662ecde33c3979bf02b793d392aca0403162Wink Saville 488767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getSubscriberId() { 489142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return mSST.getImsi(); 490767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 491767a662ecde33c3979bf02b793d392aca0403162Wink Saville 4922ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang public String getImei() { 4932ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang Log.e(LOG_TAG, "IMEI is not available in CDMA"); 4942ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang return null; 4952ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang } 4962ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang 497767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canConference() { 498767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canConference: not possible in CDMA"); 499767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 500767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 501767a662ecde33c3979bf02b793d392aca0403162Wink Saville 502767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CellLocation getCellLocation() { 503767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.cellLoc; 504767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 505767a662ecde33c3979bf02b793d392aca0403162Wink Saville 506767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getForegroundCall() { 507767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.foregroundCall; 508767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 509767a662ecde33c3979bf02b793d392aca0403162Wink Saville 510767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 5113caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt selectNetworkManually(OperatorInfo network, 512767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response) { 513767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "selectNetworkManually: not possible in CDMA"); 514767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 515767a662ecde33c3979bf02b793d392aca0403162Wink Saville 516767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 517dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mPostDialHandler = new Registrant(h, what, obj); 518767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 519767a662ecde33c3979bf02b793d392aca0403162Wink Saville 520767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handlePinMmi(String dialString) { 521e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaMmiCode mmi = CdmaMmiCode.newFromDialString(dialString, this); 522e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 523e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla if (mmi == null) { 524e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla Log.e(LOG_TAG, "Mmi is NULL!"); 525e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return false; 526e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } else if (mmi.isPukCommand()) { 527e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mPendingMmis.add(mmi); 528e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 529e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mmi.processCode(); 530e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return true; 531e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 532e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla Log.e(LOG_TAG, "Unrecognized mmi!"); 533767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 534767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 535767a662ecde33c3979bf02b793d392aca0403162Wink Saville 536e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla /** 537e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * Removes the given MMI from the pending list and notifies registrants that 538e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * it is complete. 539e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * 540e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * @param mmi MMI that is done 541e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla */ 542e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla void onMMIDone(CdmaMmiCode mmi) { 543e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla /* 544e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * Only notify complete if it's on the pending list. Otherwise, it's 545e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * already been handled (eg, previously canceled). 546e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla */ 547e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla if (mPendingMmis.remove(mmi)) { 548e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 549e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 550e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 551e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 552767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setLine1Number(String alphaTag, String number, Message onComplete) { 553767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setLine1Number: not possible in CDMA"); 554767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 555767a662ecde33c3979bf02b793d392aca0403162Wink Saville 556767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallWaiting(boolean enable, Message onComplete) { 557767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setCallWaiting is NOT supported in CDMA!"); 558767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 559767a662ecde33c3979bf02b793d392aca0403162Wink Saville 5607a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink public void updateServiceLocation() { 5617a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink mSST.enableSingleLocationUpdate(); 562767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 563767a662ecde33c3979bf02b793d392aca0403162Wink Saville 564767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setDataRoamingEnabled(boolean enable) { 56563edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.setDataOnRoamingEnabled(enable); 566767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 567767a662ecde33c3979bf02b793d392aca0403162Wink Saville 568dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 569dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.registerForCdmaOtaProvision(h, what, obj); 570dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 571dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 572dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 573dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.unregisterForCdmaOtaProvision(h); 574dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 575dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 5769e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 5779e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.registerForSubscriptionInfoReady(h, what, obj); 5789e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5799e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 5809e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void unregisterForSubscriptionInfoReady(Handler h) { 5819e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.unregisterForSubscriptionInfoReady(h); 5829e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5839e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 584dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj) { 58595a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant = new Registrant (h, what, obj); 586dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 587dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 588dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unsetOnEcbModeExitResponse(Handler h) { 58995a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.clear(); 590dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 591dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 592dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj) { 59322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.registerForCallWaiting(h, what, obj); 594dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 595dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 596dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCallWaiting(Handler h) { 59722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.unregisterForCallWaiting(h); 598dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 599dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 600767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 601767a662ecde33c3979bf02b793d392aca0403162Wink Saville getNeighboringCids(Message response) { 60290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink /* 60390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * This is currently not implemented. At least as of June 60490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * 2009, there is no neighbor cell information available for 60590cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * CDMA because some party is resisting making this 60690cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * information readily available. Consequently, calling this 60790cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * function can have no useful effect. This situation may 60890cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * (and hopefully will) change in the future. 60990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink */ 61090cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink if (response != null) { 61190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException ce = new CommandException( 61290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException.Error.REQUEST_NOT_SUPPORTED); 61390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink AsyncResult.forMessage(response).exception = ce; 61490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink response.sendToTarget(); 61590cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink } 616767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 617767a662ecde33c3979bf02b793d392aca0403162Wink Saville 61802648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt public DataState getDataConnectionState(String apnType) { 619767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataState ret = DataState.DISCONNECTED; 620767a662ecde33c3979bf02b793d392aca0403162Wink Saville 62182583b8312403ed734c30b161750d40c26086ee2Elliott Hughes if (mSST == null) { 622e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // Radio Technology Change is ongoning, dispose() and removeReferences() have 623e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // already been called 62444038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville 625e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataState.DISCONNECTED; 626a4e82851e9c8a75dfb371403c500e3b3cf3e4565Robert Greenwalt } else if (mSST.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE) { 627767a662ecde33c3979bf02b793d392aca0403162Wink Saville // If we're out of service, open TCP sockets may still work 628767a662ecde33c3979bf02b793d392aca0403162Wink Saville // but no data will flow 629767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 63063edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt } else if (mDataConnectionTracker.isApnTypeEnabled(apnType) == false || 63163edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.isApnTypeActive(apnType) == false) { 63202648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt ret = DataState.DISCONNECTED; 633767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 63463edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt switch (mDataConnectionTracker.getState(apnType)) { 635767a662ecde33c3979bf02b793d392aca0403162Wink Saville case FAILED: 636767a662ecde33c3979bf02b793d392aca0403162Wink Saville case IDLE: 637767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 638767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 639767a662ecde33c3979bf02b793d392aca0403162Wink Saville 640767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTED: 641767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DISCONNECTING: 642767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( mCT.state != Phone.State.IDLE 6439d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville && !mSST.isConcurrentVoiceAndDataAllowed()) { 644767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.SUSPENDED; 645767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 646767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTED; 647767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 648767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 649767a662ecde33c3979bf02b793d392aca0403162Wink Saville 650767a662ecde33c3979bf02b793d392aca0403162Wink Saville case INITING: 651767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTING: 652767a662ecde33c3979bf02b793d392aca0403162Wink Saville case SCANNING: 653767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTING; 654767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 655767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 656767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 657767a662ecde33c3979bf02b793d392aca0403162Wink Saville 6581f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville log("getDataConnectionState apnType=" + apnType + " ret=" + ret); 659767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 660767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 661767a662ecde33c3979bf02b793d392aca0403162Wink Saville 662767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendUssdResponse(String ussdMessge) { 663767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "sendUssdResponse: not possible in CDMA"); 664767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 665767a662ecde33c3979bf02b793d392aca0403162Wink Saville 666767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendDtmf(char c) { 667767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 668767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 669767a662ecde33c3979bf02b793d392aca0403162Wink Saville "sendDtmf called with invalid character '" + c + "'"); 670767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 671767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (mCT.state == Phone.State.OFFHOOK) { 672767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.sendDtmf(c, null); 673767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 674767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 675767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 676767a662ecde33c3979bf02b793d392aca0403162Wink Saville 677767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void startDtmf(char c) { 678767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 679767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 680767a662ecde33c3979bf02b793d392aca0403162Wink Saville "startDtmf called with invalid character '" + c + "'"); 681767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 682767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.startDtmf(c, null); 683767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 684767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 685767a662ecde33c3979bf02b793d392aca0403162Wink Saville 686767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void stopDtmf() { 687767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.stopDtmf(null); 688767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 689767a662ecde33c3979bf02b793d392aca0403162Wink Saville 690dafa22a3ef9328c72319aeec605f6a6d20e46080jsh public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 691e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville boolean check = true; 692e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville for (int itr = 0;itr < dtmfString.length(); itr++) { 693e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) { 694e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Log.e(LOG_TAG, 695e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville "sendDtmf called with invalid character '" + dtmfString.charAt(itr)+ "'"); 696e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville check = false; 697e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 698e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 699e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 700e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if ((mCT.state == Phone.State.OFFHOOK)&&(check)) { 701dafa22a3ef9328c72319aeec605f6a6d20e46080jsh mCM.sendBurstDtmf(dtmfString, on, off, onComplete); 702e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 703e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 704e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 705767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getAvailableNetworks(Message response) { 706767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getAvailableNetworks: not possible in CDMA"); 707767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 708767a662ecde33c3979bf02b793d392aca0403162Wink Saville 709767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) { 710dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Log.e(LOG_TAG, "setOutgoingCallerIdDisplay: not possible in CDMA"); 711767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 712767a662ecde33c3979bf02b793d392aca0403162Wink Saville 713767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableLocationUpdates() { 714767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.enableLocationUpdates(); 715767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 716767a662ecde33c3979bf02b793d392aca0403162Wink Saville 7177a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink public void disableLocationUpdates() { 7187a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink mSST.disableLocationUpdates(); 7197a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink } 7207a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink 721767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getDataCallList(Message response) { 722767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getDataCallList(response); 723767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 724767a662ecde33c3979bf02b793d392aca0403162Wink Saville 725767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getDataRoamingEnabled() { 72663edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt return mDataConnectionTracker.getDataOnRoamingEnabled(); 727767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 728767a662ecde33c3979bf02b793d392aca0403162Wink Saville 729767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setVoiceMailNumber(String alphaTag, 730767a662ecde33c3979bf02b793d392aca0403162Wink Saville String voiceMailNumber, 731767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 732ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause Message resp; 733ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mVmNumber = voiceMailNumber; 734a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville resp = obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete); 7351f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville mIccRecords.setVoiceMailNumber(alphaTag, mVmNumber, resp); 736767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 737767a662ecde33c3979bf02b793d392aca0403162Wink Saville 738767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailNumber() { 739ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause String number = null; 740ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 7417188f946521d64ea21121939d2a4c279f33fe910Wink Saville // TODO: The default value of voicemail number should be read from a system property 742092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi 743092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi // Read platform settings for dynamic voicemail number 744092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi if (getContext().getResources().getBoolean(com.android.internal 745092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi .R.bool.config_telephony_use_own_number_for_voicemail)) { 746092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi number = sp.getString(VM_NUMBER_CDMA, getLine1Number()); 747092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi } else { 748092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi number = sp.getString(VM_NUMBER_CDMA, "*86"); 749092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi } 750ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return number; 751dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 752dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 753dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /* Returns Number of Voicemails 754dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @hide 755dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 756ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause public int getVoiceMessageCount() { 7571f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville int voicemailCount = mIccRecords.getVoiceMessageCount(); 758ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // If mRuimRecords.getVoiceMessageCount returns zero, then there is possibility 759ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // that phone was power cycled and would have lost the voicemail count. 760ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // So get the count from preferences. 761ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause if (voicemailCount == 0) { 762ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 763ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause voicemailCount = sp.getInt(VM_COUNT_CDMA, 0); 764ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 765ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return voicemailCount; 766767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 767767a662ecde33c3979bf02b793d392aca0403162Wink Saville 768767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailAlphaTag() { 769767a662ecde33c3979bf02b793d392aca0403162Wink Saville // TODO: Where can we get this value has to be clarified with QC. 770767a662ecde33c3979bf02b793d392aca0403162Wink Saville String ret = "";//TODO: Remove = "", if we know where to get this value. 771767a662ecde33c3979bf02b793d392aca0403162Wink Saville 772767a662ecde33c3979bf02b793d392aca0403162Wink Saville //ret = mSIMRecords.getVoiceMailAlphaTag(); 773767a662ecde33c3979bf02b793d392aca0403162Wink Saville 774767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ret == null || ret.length() == 0) { 775767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mContext.getText( 776767a662ecde33c3979bf02b793d392aca0403162Wink Saville com.android.internal.R.string.defaultVoiceMailAlphaTag).toString(); 777767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 778767a662ecde33c3979bf02b793d392aca0403162Wink Saville 779767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 780767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 781767a662ecde33c3979bf02b793d392aca0403162Wink Saville 782767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 783767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingOption: not possible in CDMA"); 784767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 785767a662ecde33c3979bf02b793d392aca0403162Wink Saville 786767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallForwardingOption(int commandInterfaceCFAction, 787767a662ecde33c3979bf02b793d392aca0403162Wink Saville int commandInterfaceCFReason, 788767a662ecde33c3979bf02b793d392aca0403162Wink Saville String dialingNumber, 789767a662ecde33c3979bf02b793d392aca0403162Wink Saville int timerSeconds, 790767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 791767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setCallForwardingOption: not possible in CDMA"); 792767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 793767a662ecde33c3979bf02b793d392aca0403162Wink Saville 794767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 795767a662ecde33c3979bf02b793d392aca0403162Wink Saville getOutgoingCallerIdDisplay(Message onComplete) { 796767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getOutgoingCallerIdDisplay: not possible in CDMA"); 797767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 798767a662ecde33c3979bf02b793d392aca0403162Wink Saville 799767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 800767a662ecde33c3979bf02b793d392aca0403162Wink Saville getCallForwardingIndicator() { 801767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingIndicator: not possible in CDMA"); 802767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 803767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 804767a662ecde33c3979bf02b793d392aca0403162Wink Saville 805767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void explicitCallTransfer() { 806767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "explicitCallTransfer: not possible in CDMA"); 807767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 808767a662ecde33c3979bf02b793d392aca0403162Wink Saville 809767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1AlphaTag() { 810767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getLine1AlphaTag: not possible in CDMA"); 811767a662ecde33c3979bf02b793d392aca0403162Wink Saville return null; 812767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 813767a662ecde33c3979bf02b793d392aca0403162Wink Saville 814b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby /** 8151c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify any interested party of a Phone state change {@link Phone.State} 816767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 817767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyPhoneStateChanged() { 818767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyPhoneState(this); 819767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 820767a662ecde33c3979bf02b793d392aca0403162Wink Saville 821767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 8221c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 8231c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 824767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 8251c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh /*package*/ void notifyPreciseCallStateChanged() { 826767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 8271c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh super.notifyPreciseCallStateChangedP(); 828767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 829767a662ecde33c3979bf02b793d392aca0403162Wink Saville 830767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyServiceStateChanged(ServiceState ss) { 831767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyServiceStateChangedP(ss); 832767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 833767a662ecde33c3979bf02b793d392aca0403162Wink Saville 834767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyLocationChanged() { 835767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyCellLocation(this); 836767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 837767a662ecde33c3979bf02b793d392aca0403162Wink Saville 838767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyNewRingingConnection(Connection c) { 839767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 840767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyNewRingingConnectionP(c); 841767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 842767a662ecde33c3979bf02b793d392aca0403162Wink Saville 843767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyDisconnect(Connection cn) { 844767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDisconnectRegistrants.notifyResult(cn); 845767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 846767a662ecde33c3979bf02b793d392aca0403162Wink Saville 847767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyUnknownConnection() { 848767a662ecde33c3979bf02b793d392aca0403162Wink Saville mUnknownConnectionRegistrants.notifyResult(this); 849767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 850767a662ecde33c3979bf02b793d392aca0403162Wink Saville 851e025391bf499e41650fe6508ac78f097559a31a4Wink Saville public boolean isInEmergencyCall() { 852e025391bf499e41650fe6508ac78f097559a31a4Wink Saville return mCT.isInEmergencyCall(); 853e025391bf499e41650fe6508ac78f097559a31a4Wink Saville } 854e025391bf499e41650fe6508ac78f097559a31a4Wink Saville 855e025391bf499e41650fe6508ac78f097559a31a4Wink Saville public boolean isInEcm() { 856e025391bf499e41650fe6508ac78f097559a31a4Wink Saville return mIsPhoneInEcmState; 857e025391bf499e41650fe6508ac78f097559a31a4Wink Saville } 858e025391bf499e41650fe6508ac78f097559a31a4Wink Saville 859dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville void sendEmergencyCallbackModeChange(){ 860dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //Send an Intent 861dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED); 86295a1d1a89e383dab893750638c2393dec54833ffWink Saville intent.putExtra(PHONE_IN_ECM_STATE, mIsPhoneInEcmState); 863dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ActivityManagerNative.broadcastStickyIntent(intent,null); 86495a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) Log.d(LOG_TAG, "sendEmergencyCallbackModeChange"); 865dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 866dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 867dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 868dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void exitEmergencyCallbackMode() { 86995a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 87095a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 87195a1d1a89e383dab893750638c2393dec54833ffWink Saville } 872dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Send a message which will invoke handleExitEmergencyCallbackMode 873a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 874dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 875dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 876dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleEnterEmergencyCallbackMode(Message msg) { 87795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 87895a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleEnterEmergencyCallbackMode,mIsPhoneInEcmState= " 87995a1d1a89e383dab893750638c2393dec54833ffWink Saville + mIsPhoneInEcmState); 88095a1d1a89e383dab893750638c2393dec54833ffWink Saville } 88195a1d1a89e383dab893750638c2393dec54833ffWink Saville // if phone is not in Ecm mode, and it's changed to Ecm mode 88295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState == false) { 88395a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = true; 884dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // notify change 885dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 88622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "true"); 8872563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 888dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Post this runnable so we will automatically exit 889dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if no one invokes exitEmergencyCallbackMode() directly. 89022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville long delayInMillis = SystemProperties.getLong( 89122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 892a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 89395a1d1a89e383dab893750638c2393dec54833ffWink Saville // We don't want to go to sleep while in Ecm 89495a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.acquire(); 895dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 896dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 897dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 898dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleExitEmergencyCallbackMode(Message msg) { 899dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville AsyncResult ar = (AsyncResult)msg.obj; 90095a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 90195a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleExitEmergencyCallbackMode,ar.exception , mIsPhoneInEcmState " 90295a1d1a89e383dab893750638c2393dec54833ffWink Saville + ar.exception + mIsPhoneInEcmState); 90395a1d1a89e383dab893750638c2393dec54833ffWink Saville } 90495a1d1a89e383dab893750638c2393dec54833ffWink Saville // Remove pending exit Ecm runnable, if any 905a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville removeCallbacks(mExitEcmRunnable); 906dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 90795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mEcmExitRespRegistrant != null) { 90895a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.notifyRegistrant(ar); 909dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 910dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if exiting ecm success 911dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (ar.exception == null) { 91295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState) { 91395a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = false; 91422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 915dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 916dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // send an Intent 917dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 91833777d2096c6877ab925db562067ac7272076399Libin Tang // Re-initiate data connection 91963edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.setInternalDataEnabled(true); 920dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 921dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 922dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 92395a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 92495a1d1a89e383dab893750638c2393dec54833ffWink Saville * Handle to cancel or restart Ecm timer in emergency call back mode 92595a1d1a89e383dab893750638c2393dec54833ffWink Saville * if action is CANCEL_ECM_TIMER, cancel Ecm timer and notify apps the timer is canceled; 92695a1d1a89e383dab893750638c2393dec54833ffWink Saville * otherwise, restart Ecm timer and notify apps the timer is restarted. 92795a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 92895a1d1a89e383dab893750638c2393dec54833ffWink Saville void handleTimerInEmergencyCallbackMode(int action) { 92995a1d1a89e383dab893750638c2393dec54833ffWink Saville switch(action) { 93095a1d1a89e383dab893750638c2393dec54833ffWink Saville case CANCEL_ECM_TIMER: 931a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville removeCallbacks(mExitEcmRunnable); 9325644b080741bb4fae103617ecbea7a62b0262a56Kenny Root mEcmTimerResetRegistrants.notifyResult(Boolean.TRUE); 93395a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 93495a1d1a89e383dab893750638c2393dec54833ffWink Saville case RESTART_ECM_TIMER: 93595a1d1a89e383dab893750638c2393dec54833ffWink Saville long delayInMillis = SystemProperties.getLong( 93695a1d1a89e383dab893750638c2393dec54833ffWink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 937a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 9385644b080741bb4fae103617ecbea7a62b0262a56Kenny Root mEcmTimerResetRegistrants.notifyResult(Boolean.FALSE); 93995a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 94095a1d1a89e383dab893750638c2393dec54833ffWink Saville default: 94195a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "handleTimerInEmergencyCallbackMode, unsupported action " + action); 94295a1d1a89e383dab893750638c2393dec54833ffWink Saville } 94395a1d1a89e383dab893750638c2393dec54833ffWink Saville } 94495a1d1a89e383dab893750638c2393dec54833ffWink Saville 94595a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 94695a1d1a89e383dab893750638c2393dec54833ffWink Saville * Registration point for Ecm timer reset 94795a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param h handler to notify 94895a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param what User-defined message code 94995a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param obj placed in Message.obj 95095a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 95195a1d1a89e383dab893750638c2393dec54833ffWink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 95295a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.addUnique(h, what, obj); 95395a1d1a89e383dab893750638c2393dec54833ffWink Saville } 95495a1d1a89e383dab893750638c2393dec54833ffWink Saville 95595a1d1a89e383dab893750638c2393dec54833ffWink Saville public void unregisterForEcmTimerReset(Handler h) { 95695a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.remove(h); 95795a1d1a89e383dab893750638c2393dec54833ffWink Saville } 95895a1d1a89e383dab893750638c2393dec54833ffWink Saville 959a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville @Override 960a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville public void handleMessage(Message msg) { 961a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult ar; 962a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Message onComplete; 963767a662ecde33c3979bf02b793d392aca0403162Wink Saville 964a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville switch(msg.what) { 965a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_AVAILABLE: { 966a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getBasebandVersion(obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE)); 967767a662ecde33c3979bf02b793d392aca0403162Wink Saville 968a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getDeviceIdentity(obtainMessage(EVENT_GET_DEVICE_IDENTITY_DONE)); 969a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 970a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 971767a662ecde33c3979bf02b793d392aca0403162Wink Saville 972a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_BASEBAND_VERSION_DONE:{ 973a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 974767a662ecde33c3979bf02b793d392aca0403162Wink Saville 975a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 976a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 977767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 978767a662ecde33c3979bf02b793d392aca0403162Wink Saville 979a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (DBG) Log.d(LOG_TAG, "Baseband version: " + ar.result); 980a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_BASEBAND_VERSION, (String)ar.result); 981a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 982a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 983767a662ecde33c3979bf02b793d392aca0403162Wink Saville 984a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_DEVICE_IDENTITY_DONE:{ 985a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 986767a662ecde33c3979bf02b793d392aca0403162Wink Saville 987a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 988a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 989767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 990a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville String[] respId = (String[])ar.result; 9912ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang mImei = respId[0]; 9922ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang mImeiSv = respId[1]; 993a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mEsn = respId[2]; 994a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mMeid = respId[3]; 995a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 996a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 997767a662ecde33c3979bf02b793d392aca0403162Wink Saville 998a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_EMERGENCY_CALLBACK_MODE_ENTER:{ 999a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleEnterEmergencyCallbackMode(msg); 1000a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1001a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1002dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1003a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE:{ 1004a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleExitEmergencyCallbackMode(msg); 1005a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1006a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1007dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1008a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RUIM_RECORDS_LOADED:{ 1009a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received"); 1010b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby updateCurrentCarrierInProvider(); 1011a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1012a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1013767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1014a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE:{ 1015a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_OFF_OR_NOT_AVAILABLE Received"); 1016a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1017a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1018767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1019a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_ON:{ 1020a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_ON Received"); 1021a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1022a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1023767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1024a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SSN:{ 1025a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_SSN Received"); 1026a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1027a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1028767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1029a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_REGISTERED_TO_NETWORK:{ 1030a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_REGISTERED_TO_NETWORK Received"); 1031a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1032a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1033767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1034a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_NV_READY:{ 1035a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_NV_READY Received"); 1036a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville //Inform the Service State Tracker 1037a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mNvLoadedRegistrants.notifyRegistrants(); 1038c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo prepareEri(); 1039a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1040a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1041767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1042a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_VM_NUMBER_DONE:{ 1043a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1044a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (IccException.class.isInstance(ar.exception)) { 1045a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville storeVoiceMailNumber(mVmNumber); 1046a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar.exception = null; 1047767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1048a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete = (Message) ar.userObj; 1049a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (onComplete != null) { 1050a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1051a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete.sendToTarget(); 1052ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1053a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1054a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1055ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1056a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville default:{ 1057a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.handleMessage(msg); 1058767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1059767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1060767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1061767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1062dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1063dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the PhoneSubInfo of the CDMAPhone 1064dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1065dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public PhoneSubInfo getPhoneSubInfo() { 1066767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSubInfo; 1067dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1068767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1069dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1070dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccSmsInterfaceManager of the CDMAPhone 1071dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1072dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccSmsInterfaceManager getIccSmsInterfaceManager() { 1073dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimSmsInterfaceManager; 1074dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1075767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1076dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1077dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone 1078dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1079dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager() { 1080dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimPhoneBookInterfaceManager; 1081dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1082767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1083767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForNvLoaded(Handler h, int what, Object obj) { 1084767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant r = new Registrant (h, what, obj); 1085767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNvLoadedRegistrants.add(r); 1086767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1087767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1088767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForNvLoaded(Handler h) { 1089767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNvLoadedRegistrants.remove(h); 1090767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1091767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1092e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void registerForEriFileLoaded(Handler h, int what, Object obj) { 1093e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Registrant r = new Registrant (h, what, obj); 1094e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.add(r); 1095e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1096e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1097e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void unregisterForEriFileLoaded(Handler h) { 1098e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.remove(h); 1099e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1100e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1101dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // override for allowing access from other classes of this package 1102dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1103dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1104dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1105dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public final void setSystemProperty(String property, String value) { 1106dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville super.setSystemProperty(property, value); 1107dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1108767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1109dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1110dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1111dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1112dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccFileHandler getIccFileHandler() { 1113dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return this.mIccFileHandler; 1114dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1115767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1116dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1117dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Activate or deactivate cell broadcast SMS. 1118dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1119dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param activate 0 = activate, 1 = deactivate 1120dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1121dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1122dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 1123ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[CDMAPhone] activateCellBroadcastSms() is obsolete; use SmsManager"); 1124ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1125dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1126767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1127dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1128dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Query the current configuration of cdma cell broadcast SMS. 1129dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1130dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1131dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1132dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void getCellBroadcastSmsConfig(Message response) { 1133ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[CDMAPhone] getCellBroadcastSmsConfig() is obsolete; use SmsManager"); 1134ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1135dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1136767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1137dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1138dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Configure cdma cell broadcast SMS. 1139dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1140dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1141dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1142dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) { 1143ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[CDMAPhone] setCellBroadcastSmsConfig() is obsolete; use SmsManager"); 1144ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1145dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1146dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 11474d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville /** 11484d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville * Returns true if OTA Service Provisioning needs to be performed. 11494d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville */ 11504d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville @Override 11514d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville public boolean needsOtaServiceProvisioning() { 1152fd2d01302781af91d77557a99874111a4fee8365Wink Saville return mSST.getOtasp() != ServiceStateTracker.OTASP_NOT_NEEDED; 11534d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville } 11544d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville 1155e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final String IS683A_FEATURE_CODE = "*228"; 1156e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_FEATURE_CODE_NUM_DIGITS = 4; 1157e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_NUM_DIGITS = 2; 1158e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_OFFSET = 4; 1159dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1160dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_A_BAND = 0; 1161dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_B_BAND = 1; 1162dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_A_BLOCK = 2; 1163dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_B_BLOCK = 3; 1164dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_C_BLOCK = 4; 1165dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_D_BLOCK = 5; 1166dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_E_BLOCK = 6; 1167dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_F_BLOCK = 7; 1168e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int INVALID_SYSTEM_SELECTION_CODE = -1; 1169dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1170b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private static boolean isIs683OtaSpDialStr(String dialStr) { 1171dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int sysSelCodeInt; 1172dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville boolean isOtaspDialString = false; 1173dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int dialStrLen = dialStr.length(); 1174dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1175dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStrLen == IS683A_FEATURE_CODE_NUM_DIGITS) { 1176dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStr.equals(IS683A_FEATURE_CODE)) { 1177dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville isOtaspDialString = true; 1178dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1179e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1180e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1181e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li switch (sysSelCodeInt) { 1182e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_A_BAND: 1183e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_B_BAND: 1184e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_A_BLOCK: 1185e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_B_BLOCK: 1186e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_C_BLOCK: 1187e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_D_BLOCK: 1188e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_E_BLOCK: 1189e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_F_BLOCK: 1190e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaspDialString = true; 1191e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1192e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li default: 1193e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1194e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1195e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1196e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaspDialString; 1197e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1198e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1199e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function extracts the system selection code from the dial string. 1200e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1201b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private static int extractSelCodeFromOtaSpNum(String dialStr) { 1202e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int dialStrLen = dialStr.length(); 1203e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = INVALID_SYSTEM_SELECTION_CODE; 1204e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1205e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((dialStr.regionMatches(0, IS683A_FEATURE_CODE, 1206e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 0, IS683A_FEATURE_CODE_NUM_DIGITS)) && 1207e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li (dialStrLen >= (IS683A_FEATURE_CODE_NUM_DIGITS + 1208e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_SYS_SEL_CODE_NUM_DIGITS))) { 1209e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Since we checked the condition above, the system selection code 1210e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // extracted from dialStr will not cause any exception 1211e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = Integer.parseInt ( 1212e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li dialStr.substring (IS683A_FEATURE_CODE_NUM_DIGITS, 1213e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_FEATURE_CODE_NUM_DIGITS + IS683A_SYS_SEL_CODE_NUM_DIGITS)); 1214e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1215e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "extractSelCodeFromOtaSpNum " + sysSelCodeInt); 1216e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return sysSelCodeInt; 1217e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1218dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1219e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1220e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function checks if the system selection code extracted from 1221e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * the dial string "sysSelCodeInt' is the system selection code specified 1222e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in the carrier ota sp number schema "sch". 1223e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1224b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private static boolean 1225e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li checkOtaSpNumBasedOnSysSelCode (int sysSelCodeInt, String sch[]) { 1226e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1227e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li try { 1228e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Get how many number of system selection code ranges 1229e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selRc = Integer.parseInt((String)sch[1]); 1230e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li for (int i = 0; i < selRc; i++) { 1231e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[i+2]) && !TextUtils.isEmpty(sch[i+3])) { 1232e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMin = Integer.parseInt((String)sch[i+2]); 1233e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMax = Integer.parseInt((String)sch[i+3]); 1234e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Check if the selection code extracted from the dial string falls 1235e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // within any of the range pairs specified in the schema. 1236e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((sysSelCodeInt >= selMin) && (sysSelCodeInt <= selMax)) { 1237e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1238dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville break; 1239e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1240dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1241dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1242e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } catch (NumberFormatException ex) { 1243e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If the carrier ota sp number schema is not correct, we still allow dial 1244e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // and only log the error: 1245e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.e(LOG_TAG, "checkOtaSpNumBasedOnSysSelCode, error", ex); 1246dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1247e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1248e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1249e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1250e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Define the pattern/format for carrier specified OTASP number schema. 1251e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // It separates by comma and/or whitespace. 1252e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static Pattern pOtaSpNumSchema = Pattern.compile("[,\\s]+"); 1253e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1254e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1255e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The following function checks if a dial string is a carrier specified 1256e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * OTASP number or not by checking against the OTASP number schema stored 1257e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in PROPERTY_OTASP_NUM_SCHEMA. 1258e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1259e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * Currently, there are 2 schemas for carriers to specify the OTASP number: 1260e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1) Use system selection code: 1261e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1262e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * SELC,the # of code pairs,min1,max1,min2,max2,... 1263e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "SELC,3,10,20,30,40,60,70" indicates that there are 3 pairs of 1264e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * selection codes, and they are {10,20}, {30,40} and {60,70} respectively. 1265e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1266e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 2) Use feature code: 1267e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1268e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * "FC,length of feature code,feature code". 1269e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "FC,2,*2" indicates that the length of the feature code is 2, 1270e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * and the code itself is "*2". 1271e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1272e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private boolean isCarrierOtaSpNum(String dialStr) { 1273e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1274e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1275e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt == INVALID_SYSTEM_SELECTION_CODE) { 1276e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1277e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1278e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // mCarrierOtaSpNumSchema is retrieved from PROPERTY_OTASP_NUM_SCHEMA: 1279e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(mCarrierOtaSpNumSchema)) { 1280e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Matcher m = pOtaSpNumSchema.matcher(mCarrierOtaSpNumSchema); 1281e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1282e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,schema" + mCarrierOtaSpNumSchema); 1283e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1284e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1285e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (m.find()) { 1286e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String sch[] = pOtaSpNumSchema.split(mCarrierOtaSpNumSchema); 1287e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If carrier uses system selection code mechanism 1288e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("SELC")) { 1289e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt!=INVALID_SYSTEM_SELECTION_CODE) { 1290e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum=checkOtaSpNumBasedOnSysSelCode(sysSelCodeInt,sch); 1291e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1292e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1293e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,sysSelCodeInt is invalid"); 1294e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1295e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1296e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("FC")) { 1297e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int fcLen = Integer.parseInt((String)sch[1]); 1298e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String fc = (String)sch[2]; 1299e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (dialStr.regionMatches(0,fc,0,fcLen)) { 1300e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1301e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1302e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,not otasp number"); 1303e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1304e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1305e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1306e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema not supported" + sch[0]); 1307e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1308e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1309e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1310e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1311e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern not right" + 1312e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema); 1313e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1314e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1315e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1316e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern empty"); 1317e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1318e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1319dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1320767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1321d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang /** 1322d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * isOTASPNumber: checks a given number against the IS-683A OTASP dial string and carrier 1323d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * OTASP dial string. 1324d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * 1325d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @param dialStr the number to look up. 1326d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @return true if the number is in IS-683A OTASP dial string or carrier OTASP dial string 1327d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang */ 1328dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 1329d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang public boolean isOtaSpNumber(String dialStr){ 1330d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang boolean isOtaSpNum = false; 13319e534153264138cfee383c626db92b934fafc1afTammo Spalink String dialableStr = PhoneNumberUtils.extractNetworkPortionAlt(dialStr); 1332d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (dialableStr != null) { 1333d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isIs683OtaSpDialStr(dialableStr); 1334d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (isOtaSpNum == false) { 1335d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isCarrierOtaSpNum(dialableStr); 1336d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1337d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1338d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (DBG) Log.d(LOG_TAG, "isOtaSpNumber " + isOtaSpNum); 1339d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang return isOtaSpNum; 1340d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1341e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1342e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1343e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconIndex() { 1344cc5c1ad53ce4541f17842daba29e7ccba221c079Robert Greenwalt return getServiceState().getCdmaEriIconIndex(); 1345e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1346e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1347e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1348e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI icon mode, 1349e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 0 - ON 1350e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 1 - FLASHING 1351e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1352e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1353e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconMode() { 1354cc5c1ad53ce4541f17842daba29e7ccba221c079Robert Greenwalt return getServiceState().getCdmaEriIconMode(); 1355e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1356e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1357e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1358e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI text, 1359e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1360e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1361e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public String getCdmaEriText() { 1362e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int roamInd = getServiceState().getCdmaRoamingIndicator(); 1363e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); 1364f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mEriManager.getCdmaEriText(roamInd, defRoamInd); 1365e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1366ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1367ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /** 1368ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * Store the voicemail number in preferences 1369ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause */ 1370ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private void storeVoiceMailNumber(String number) { 1371ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Update the preference value of voicemail number 1372ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 1373ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences.Editor editor = sp.edit(); 1374ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause editor.putString(VM_NUMBER_CDMA, number); 1375fa8e271636b9e9b86f247cdb4c91d9ebe9675c27Brad Fitzpatrick editor.apply(); 1376ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1377ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1378142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1379142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * Sets PROPERTY_ICC_OPERATOR_ISO_COUNTRY property 1380142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1381142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1382142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville private void setIsoCountryProperty(String operatorNumeric) { 1383142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (TextUtils.isEmpty(operatorNumeric)) { 1384142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, ""); 1385142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } else { 1386142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String iso = ""; 1387142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1388142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville iso = MccTable.countryCodeForMcc(Integer.parseInt( 1389142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville operatorNumeric.substring(0,3))); 1390142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (NumberFormatException ex) { 1391142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1392142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (StringIndexOutOfBoundsException ex) { 1393142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1394142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1395142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1396142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso); 1397142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1398142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1399142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1400142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1401144fdfec240a56890657d2248a22bdda9f22470cWink Saville * Sets the "current" field in the telephony provider according to the 1402144fdfec240a56890657d2248a22bdda9f22470cWink Saville * build-time operator numeric property 1403142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1404142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * @return true for success; false otherwise. 1405142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1406144fdfec240a56890657d2248a22bdda9f22470cWink Saville boolean updateCurrentCarrierInProvider(String operatorNumeric) { 1407142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (!TextUtils.isEmpty(operatorNumeric)) { 1408142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1409142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"); 1410142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville ContentValues map = new ContentValues(); 1411142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville map.put(Telephony.Carriers.NUMERIC, operatorNumeric); 1412b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby log("updateCurrentCarrierInProvider from system: numeric=" + operatorNumeric); 1413142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville getContext().getContentResolver().insert(uri, map); 1414144fdfec240a56890657d2248a22bdda9f22470cWink Saville 1415144fdfec240a56890657d2248a22bdda9f22470cWink Saville // Updates MCC MNC device configuration information 1416144fdfec240a56890657d2248a22bdda9f22470cWink Saville MccTable.updateMccMncConfiguration(this, operatorNumeric); 1417144fdfec240a56890657d2248a22bdda9f22470cWink Saville 1418142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return true; 1419142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (SQLException e) { 1420142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.e(LOG_TAG, "Can't store current operator", e); 1421142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1422142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1423142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return false; 1424142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 14251f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 1426b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby /** 1427b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * Sets the "current" field in the telephony provider according to the SIM's operator. 1428b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * Implemented in {@link CDMALTEPhone} for CDMA/LTE devices. 1429b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * 1430b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * @return true for success; false otherwise. 1431b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby */ 1432b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby boolean updateCurrentCarrierInProvider() { 1433b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby return true; 1434b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby } 1435b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby 1436c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo public void prepareEri() { 1437c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo mEriManager.loadEriFile(); 1438c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo if(mEriManager.isEriFileLoaded()) { 1439c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo // when the ERI file is loaded 1440c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo log("ERI read, notify registrants"); 1441c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo mEriFileLoadedRegistrants.notifyRegistrants(); 1442c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo } 1443c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo } 1444c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo 1445c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo public boolean isEriFileLoaded() { 1446c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo return mEriManager.isEriFileLoaded(); 1447c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo } 1448c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo 14491f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville protected void log(String s) { 14501f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville if (DBG) 14511f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville Log.d(LOG_TAG, "[CDMAPhone] " + s); 14521f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville } 1453767a662ecde33c3979bf02b793d392aca0403162Wink Saville} 1454