CDMAPhone.java revision fd2d01302781af91d77557a99874111a4fee8365
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; 20767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.content.Context; 21142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.content.ContentValues; 22e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.content.Intent; 23142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.content.res.Configuration; 24ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.content.SharedPreferences; 25142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.database.SQLException; 26142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.net.Uri; 27767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.AsyncResult; 28767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Handler; 29767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Message; 3095a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager; 3195a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager.WakeLock; 32767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Registrant; 33767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.RegistrantList; 34142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.os.RemoteException; 35767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.SystemProperties; 36ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.preference.PreferenceManager; 37142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.provider.Telephony; 38767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.CellLocation; 39767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.PhoneNumberUtils; 40767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.ServiceState; 41e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 42767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.text.TextUtils; 43767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.util.Log; 44767a662ecde33c3979bf02b793d392aca0403162Wink Saville 45a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenkaimport com.android.internal.telephony.cat.CatService; 461c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganeshimport com.android.internal.telephony.Call; 47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CallStateException; 4890cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalinkimport com.android.internal.telephony.CommandException; 49767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CommandsInterface; 50767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Connection; 51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.DataConnection; 521c1ffa0cab8b56274970736d7f3b8c00c01c3d2bRobert Greenwaltimport com.android.internal.telephony.MccTable; 53767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccCard; 54ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport com.android.internal.telephony.IccException; 55767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccFileHandler; 56767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 57767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 58767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.MmiCode; 59767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Phone; 60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneBase; 61767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneNotifier; 62767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneProxy; 63767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneSubInfo; 64fd2d01302781af91d77557a99874111a4fee8365Wink Savilleimport com.android.internal.telephony.ServiceStateTracker; 65e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport com.android.internal.telephony.TelephonyIntents; 669bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport com.android.internal.telephony.TelephonyProperties; 6724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kallaimport com.android.internal.telephony.UUSInfo; 68767a662ecde33c3979bf02b793d392aca0403162Wink Saville 69142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA; 70142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC; 71142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY; 72142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 73e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kallaimport java.util.ArrayList; 74767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.util.List; 7595a1d1a89e383dab893750638c2393dec54833ffWink Saville 76e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 77e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Matcher; 78e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Pattern; 79e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 80767a662ecde33c3979bf02b793d392aca0403162Wink Saville/** 81767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 82767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 83767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic class CDMAPhone extends PhoneBase { 84767a662ecde33c3979bf02b793d392aca0403162Wink Saville static final String LOG_TAG = "CDMA"; 85e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final boolean DBG = true; 86767a662ecde33c3979bf02b793d392aca0403162Wink Saville 8722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // Default Emergency Callback Mode exit timer 88019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang private static final int DEFAULT_ECM_EXIT_TIMER_VALUE = 300000; 8995a1d1a89e383dab893750638c2393dec54833ffWink Saville 90ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause static final String VM_COUNT_CDMA = "vm_count_key_cdma"; 91ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private static final String VM_NUMBER_CDMA = "vm_number_key_cdma"; 92ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private String mVmNumber = null; 9322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 9495a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int RESTART_ECM_TIMER = 0; // restart Ecm timer 9595a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int CANCEL_ECM_TIMER = 1; // cancel Ecm timer 9695a1d1a89e383dab893750638c2393dec54833ffWink Saville 97a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Instance Variables 98767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaCallTracker mCT; 99767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaSMSDispatcher mSMS; 100767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaServiceStateTracker mSST; 101767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimRecords mRuimRecords; 102767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimCard mRuimCard; 103e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla ArrayList <CdmaMmiCode> mPendingMmis = new ArrayList<CdmaMmiCode>(); 104767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimPhoneBookInterfaceManager mRuimPhoneBookInterfaceManager; 105767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimSmsInterfaceManager mRuimSmsInterfaceManager; 106767a662ecde33c3979bf02b793d392aca0403162Wink Saville PhoneSubInfo mSubInfo; 107e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville EriManager mEriManager; 10895a1d1a89e383dab893750638c2393dec54833ffWink Saville WakeLock mWakeLock; 109a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatService mCcatService; 110a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville 111e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // mNvLoadedRegistrants are informed after the EVENT_NV_READY 112e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private RegistrantList mNvLoadedRegistrants = new RegistrantList(); 113e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 114e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // mEriFileLoadedRegistrants are informed after the ERI text has been loaded 115e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private RegistrantList mEriFileLoadedRegistrants = new RegistrantList(); 116dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 11795a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmTimerResetRegistrants are informed after Ecm timer is canceled or re-started 11895a1d1a89e383dab893750638c2393dec54833ffWink Saville private RegistrantList mEcmTimerResetRegistrants = new RegistrantList(); 11995a1d1a89e383dab893750638c2393dec54833ffWink Saville 12095a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmExitRespRegistrant is informed after the phone has been exited 121dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //the emergency callback mode 122dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //keep track of if phone is in emergency callback mode 12395a1d1a89e383dab893750638c2393dec54833ffWink Saville private boolean mIsPhoneInEcmState; 12495a1d1a89e383dab893750638c2393dec54833ffWink Saville private Registrant mEcmExitRespRegistrant; 125767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mEsn; 126767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mMeid; 127e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // string to define how the carrier specifies its own ota sp number 128e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private String mCarrierOtaSpNumSchema; 1292563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 13095a1d1a89e383dab893750638c2393dec54833ffWink Saville // A runnable which is used to automatically exit from Ecm after a period of time. 131dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private Runnable mExitEcmRunnable = new Runnable() { 132dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void run() { 133dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville exitEmergencyCallbackMode(); 134dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 135dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville }; 136767a662ecde33c3979bf02b793d392aca0403162Wink Saville 137767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant mPostDialHandler; 138767a662ecde33c3979bf02b793d392aca0403162Wink Saville 139767a662ecde33c3979bf02b793d392aca0403162Wink Saville 140a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Constructors 141767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) { 142767a662ecde33c3979bf02b793d392aca0403162Wink Saville this(context,ci,notifier, false); 143767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 144767a662ecde33c3979bf02b793d392aca0403162Wink Saville 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier, 146767a662ecde33c3979bf02b793d392aca0403162Wink Saville boolean unitTestMode) { 147a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super(notifier, context, ci, unitTestMode); 148767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1493cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink mCM.setPhoneType(Phone.PHONE_TYPE_CDMA); 150767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT = new CdmaCallTracker(this); 151767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST = new CdmaServiceStateTracker (this); 152767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSMS = new CdmaSMSDispatcher(this); 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIccFileHandler = new RuimFileHandler(this); 154767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords = new RuimRecords(this); 155767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection = new CdmaDataConnectionTracker (this); 156767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimCard = new RuimCard(this); 157767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager = new RuimPhoneBookInterfaceManager(this); 158bb3716332321e22537a5015be13e2229fb9b90bcJake Hamby mRuimSmsInterfaceManager = new RuimSmsInterfaceManager(this, mSMS); 159767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo = new PhoneSubInfo(this); 160e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager = new EriManager(this, context, EriManager.ERI_FROM_XML); 161a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka mCcatService = CatService.getInstance(mCM, mRuimRecords, mContext, 1624f1244e0de634c6b7a0e67e1a7cb9bf7f914e574Alex Yakavenka mIccFileHandler, mRuimCard); 163767a662ecde33c3979bf02b793d392aca0403162Wink Saville 164a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); 165a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mRuimRecords.registerForRecordsLoaded(this, EVENT_RUIM_RECORDS_LOADED, null); 166a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 167a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOn(this, EVENT_RADIO_ON, null); 168a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setOnSuppServiceNotification(this, EVENT_SSN, null); 169a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mSST.registerForNetworkAttach(this, EVENT_REGISTERED_TO_NETWORK, null); 170a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForNVReady(this, EVENT_NV_READY, null); 171a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setEmergencyCallbackMode(this, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null); 172e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 17395a1d1a89e383dab893750638c2393dec54833ffWink Saville PowerManager pm 17495a1d1a89e383dab893750638c2393dec54833ffWink Saville = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 17595a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,LOG_TAG); 176767a662ecde33c3979bf02b793d392aca0403162Wink Saville 177767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Change the system setting 1789bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE, 1793cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink new Integer(Phone.PHONE_TYPE_CDMA).toString()); 180dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 18122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // This is needed to handle phone process crashes 18222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 18395a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = inEcm.equals("true"); 1849b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang if (mIsPhoneInEcmState) { 1859b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang // Send a message which will invoke handleExitEmergencyCallbackMode 1869b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang mCM.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 1879b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang } 188ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 189e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // get the string that specifies the carrier OTA Sp number 190e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema = SystemProperties.get( 191e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li TelephonyProperties.PROPERTY_OTASP_NUM_SCHEMA,""); 192e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 193142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator alpha property by retrieving from build-time system property 194142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String operatorAlpha = SystemProperties.get("ro.cdma.home.operator.alpha"); 195142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, operatorAlpha); 196142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 197142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator numeric property by retrieving from build-time system property 198142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String operatorNumeric = SystemProperties.get("ro.cdma.home.operator.numeric"); 199142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_NUMERIC, operatorNumeric); 200142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 201142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets iso country property by retrieving from build-time system property 202142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setIsoCountryProperty(operatorNumeric); 203142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 204142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets current entry in the telephony carrier table 205142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville updateCurrentCarrierInProvider(operatorNumeric); 206142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 207ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Notify voicemails. 208ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause notifier.notifyMessageWaitingChanged(this); 209767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 210767a662ecde33c3979bf02b793d392aca0403162Wink Saville 211767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void dispose() { 212767a662ecde33c3979bf02b793d392aca0403162Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 213a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.dispose(); 214767a662ecde33c3979bf02b793d392aca0403162Wink Saville 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Unregister from all former registered events 216a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mRuimRecords.unregisterForRecordsLoaded(this); //EVENT_RUIM_RECORDS_LOADED 217a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForAvailable(this); //EVENT_RADIO_AVAILABLE 218a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOffOrNotAvailable(this); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE 219a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOn(this); //EVENT_RADIO_ON 220a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForNVReady(this); //EVENT_NV_READY 221a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mSST.unregisterForNetworkAttach(this); //EVENT_REGISTERED_TO_NETWORK 222a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unSetOnSuppServiceNotification(this); 223f3ee6f87a344b185d8bde12c77440c9020378510Banavathu, Srinivas Naik removeCallbacks(mExitEcmRunnable); 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville 225e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mPendingMmis.clear(); 226e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 227767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Force all referenced classes to unregister their former registered events 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.dispose(); 229767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection.dispose(); 230767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.dispose(); 231767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSMS.dispose(); 232767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIccFileHandler.dispose(); // instance of RuimFileHandler 233767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords.dispose(); 234767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimCard.dispose(); 235767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager.dispose(); 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimSmsInterfaceManager.dispose(); 237767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo.dispose(); 238e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager.dispose(); 239a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka mCcatService.dispose(); 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 241767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void removeReferences() { 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimPhoneBookInterfaceManager = null; 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimSmsInterfaceManager = null; 246767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSMS = null; 247767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSubInfo = null; 248767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimRecords = null; 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mIccFileHandler = null; 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimCard = null; 251767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mDataConnection = null; 252767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCT = null; 253767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSST = null; 254e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville this.mEriManager = null; 255a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka this.mCcatService = null; 256f3ee6f87a344b185d8bde12c77440c9020378510Banavathu, Srinivas Naik this.mExitEcmRunnable = null; 257767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 258767a662ecde33c3979bf02b793d392aca0403162Wink Saville 259767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void finalize() { 260e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if(DBG) Log.d(LOG_TAG, "CDMAPhone finalized"); 26195a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 26295a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "UNEXPECTED; mWakeLock is held when finalizing."); 26395a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 26495a1d1a89e383dab893750638c2393dec54833ffWink Saville } 265767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 266767a662ecde33c3979bf02b793d392aca0403162Wink Saville 267767a662ecde33c3979bf02b793d392aca0403162Wink Saville public ServiceState getServiceState() { 268767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.ss; 269767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 270767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2713cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public Phone.State getState() { 272767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.state; 273767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 274767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2753cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public String getPhoneName() { 276767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA"; 277767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 278767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2793cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public int getPhoneType() { 2803cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink return Phone.PHONE_TYPE_CDMA; 2813cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink } 2823cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink 283767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canTransfer() { 284767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canTransfer: not possible in CDMA"); 285767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 286767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 287767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2883cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public CdmaCall getRingingCall() { 289767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.ringingCall; 290767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 291767a662ecde33c3979bf02b793d392aca0403162Wink Saville 292767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setMute(boolean muted) { 293767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.setMute(muted); 294767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 295767a662ecde33c3979bf02b793d392aca0403162Wink Saville 296767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getMute() { 297767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.getMute(); 298767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 299767a662ecde33c3979bf02b793d392aca0403162Wink Saville 300767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void conference() throws CallStateException { 301767a662ecde33c3979bf02b793d392aca0403162Wink Saville // three way calls in CDMA will be handled by feature codes 302767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "conference: not possible in CDMA"); 303767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 304767a662ecde33c3979bf02b793d392aca0403162Wink Saville 305767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.setPreferredVoicePrivacy(enable, onComplete); 307767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 308767a662ecde33c3979bf02b793d392aca0403162Wink Saville 309767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 310767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.getPreferredVoicePrivacy(onComplete); 311767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 312767a662ecde33c3979bf02b793d392aca0403162Wink Saville 313767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void clearDisconnected() { 314767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.clearDisconnected(); 315767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 316767a662ecde33c3979bf02b793d392aca0403162Wink Saville 317767a662ecde33c3979bf02b793d392aca0403162Wink Saville public DataActivityState getDataActivityState() { 318767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataActivityState ret = DataActivityState.NONE; 319767a662ecde33c3979bf02b793d392aca0403162Wink Saville 320f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville if (mSST.getCurrentCdmaDataConnectionState() == ServiceState.STATE_IN_SERVICE) { 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville 322767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch (mDataConnection.getActivity()) { 323767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAIN: 324767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAIN; 325767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 326767a662ecde33c3979bf02b793d392aca0403162Wink Saville 327767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAOUT: 328767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAOUT; 329767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 330767a662ecde33c3979bf02b793d392aca0403162Wink Saville 331767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAINANDOUT: 332767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAINANDOUT; 333767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 334e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 335e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case DORMANT: 336e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataActivityState.DORMANT; 337e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 340767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 341767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 342767a662ecde33c3979bf02b793d392aca0403162Wink Saville 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifySignalStrength() { 345767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifySignalStrength(this); 346767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 347767a662ecde33c3979bf02b793d392aca0403162Wink Saville 348767a662ecde33c3979bf02b793d392aca0403162Wink Saville public Connection 349767a662ecde33c3979bf02b793d392aca0403162Wink Saville dial (String dialString) throws CallStateException { 350767a662ecde33c3979bf02b793d392aca0403162Wink Saville // Need to make sure dialString gets parsed properly 351767a662ecde33c3979bf02b793d392aca0403162Wink Saville String newDialString = PhoneNumberUtils.stripSeparators(dialString); 35222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville return mCT.dial(newDialString); 353767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 354767a662ecde33c3979bf02b793d392aca0403162Wink Saville 35524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla public Connection dial(String dialString, UUSInfo uusInfo) throws CallStateException { 35624440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla throw new CallStateException("Sending UUS information NOT supported in CDMA!"); 35724440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla } 35824440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla 359e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public SignalStrength getSignalStrength() { 360e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return mSST.mSignalStrength; 361767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 362767a662ecde33c3979bf02b793d392aca0403162Wink Saville 363767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 364767a662ecde33c3979bf02b793d392aca0403162Wink Saville getMessageWaitingIndicator() { 365ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return (getVoiceMessageCount() > 0); 366767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 367767a662ecde33c3979bf02b793d392aca0403162Wink Saville 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<? extends MmiCode> 369767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPendingMmiCodes() { 370e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return mPendingMmis; 371767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 372767a662ecde33c3979bf02b793d392aca0403162Wink Saville 373767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForSuppServiceNotification( 374767a662ecde33c3979bf02b793d392aca0403162Wink Saville Handler h, int what, Object obj) { 375767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method registerForSuppServiceNotification is NOT supported in CDMA!"); 376767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 377767a662ecde33c3979bf02b793d392aca0403162Wink Saville 378767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getBackgroundCall() { 379767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.backgroundCall; 380767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 381767a662ecde33c3979bf02b793d392aca0403162Wink Saville 382767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handleInCallMmiCommands(String dialString) { 383767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method handleInCallMmiCommands is NOT supported in CDMA!"); 384767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 385767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 386767a662ecde33c3979bf02b793d392aca0403162Wink Saville 387e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla boolean isInCall() { 388e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State foregroundCallState = getForegroundCall().getState(); 389e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State backgroundCallState = getBackgroundCall().getState(); 390e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State ringingCallState = getRingingCall().getState(); 391e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 392e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return (foregroundCallState.isAlive() || backgroundCallState.isAlive() || ringingCallState 393e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla .isAlive()); 394e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 395e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 396767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 397767a662ecde33c3979bf02b793d392aca0403162Wink Saville setNetworkSelectionModeAutomatic(Message response) { 398767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setNetworkSelectionModeAutomatic is NOT supported in CDMA!"); 399767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 400767a662ecde33c3979bf02b793d392aca0403162Wink Saville 401767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForSuppServiceNotification(Handler h) { 402767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method unregisterForSuppServiceNotification is NOT supported in CDMA!"); 403767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 404767a662ecde33c3979bf02b793d392aca0403162Wink Saville 405767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 406767a662ecde33c3979bf02b793d392aca0403162Wink Saville acceptCall() throws CallStateException { 407767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.acceptCall(); 408767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 409767a662ecde33c3979bf02b793d392aca0403162Wink Saville 410767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 411767a662ecde33c3979bf02b793d392aca0403162Wink Saville rejectCall() throws CallStateException { 412767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.rejectCall(); 413767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 414767a662ecde33c3979bf02b793d392aca0403162Wink Saville 415767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 416767a662ecde33c3979bf02b793d392aca0403162Wink Saville switchHoldingAndActive() throws CallStateException { 417767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.switchWaitingOrHoldingAndActive(); 418767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 419767a662ecde33c3979bf02b793d392aca0403162Wink Saville 420767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1Number() { 421f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getMdnNumber(); 422767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 423767a662ecde33c3979bf02b793d392aca0403162Wink Saville 42422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville public String getCdmaPrlVersion(){ 425daccacb865947c00f277f1823333e2fbf91e652aWink Saville return mSST.getPrlVersion(); 42622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville } 42722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 428019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang public String getCdmaMin() { 429f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getCdmaMin(); 430e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 431e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 4329e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public boolean isMinInfoReady() { 4339e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo return mSST.isMinInfoReady(); 4349e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 4359e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 436767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallWaiting(Message onComplete) { 437767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.queryCallWaiting(CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 438767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 439767a662ecde33c3979bf02b793d392aca0403162Wink Saville 440767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 441767a662ecde33c3979bf02b793d392aca0403162Wink Saville setRadioPower(boolean power) { 442767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.setRadioPower(power); 443767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 444767a662ecde33c3979bf02b793d392aca0403162Wink Saville 445767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEsn() { 446767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mEsn; 447767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 448767a662ecde33c3979bf02b793d392aca0403162Wink Saville 449767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMeid() { 450767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mMeid; 451767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 452767a662ecde33c3979bf02b793d392aca0403162Wink Saville 4533158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville //returns MEID or ESN in CDMA 454767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceId() { 4553158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville String id = getMeid(); 4563158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville if ((id == null) || id.matches("^0*$")) { 4573158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville Log.d(LOG_TAG, "getDeviceId(): MEID is not initialized use ESN"); 4583158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville id = getEsn(); 4593158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville } 4603158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville return id; 461767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 462767a662ecde33c3979bf02b793d392aca0403162Wink Saville 463767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceSvn() { 464767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "getDeviceSvn(): return 0"); 465767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 466767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 467767a662ecde33c3979bf02b793d392aca0403162Wink Saville 468767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getSubscriberId() { 469142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return mSST.getImsi(); 470767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 471767a662ecde33c3979bf02b793d392aca0403162Wink Saville 472767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canConference() { 473767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canConference: not possible in CDMA"); 474767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 475767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 476767a662ecde33c3979bf02b793d392aca0403162Wink Saville 477767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CellLocation getCellLocation() { 478767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.cellLoc; 479767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 480767a662ecde33c3979bf02b793d392aca0403162Wink Saville 481767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean disableDataConnectivity() { 482767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mDataConnection.setDataEnabled(false); 483767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 484767a662ecde33c3979bf02b793d392aca0403162Wink Saville 485767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getForegroundCall() { 486767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.foregroundCall; 487767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 488767a662ecde33c3979bf02b793d392aca0403162Wink Saville 489767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 490767a662ecde33c3979bf02b793d392aca0403162Wink Saville selectNetworkManually(com.android.internal.telephony.gsm.NetworkInfo network, 491767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response) { 492767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "selectNetworkManually: not possible in CDMA"); 493767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 494767a662ecde33c3979bf02b793d392aca0403162Wink Saville 495767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 496dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mPostDialHandler = new Registrant(h, what, obj); 497767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 498767a662ecde33c3979bf02b793d392aca0403162Wink Saville 499767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handlePinMmi(String dialString) { 500e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaMmiCode mmi = CdmaMmiCode.newFromDialString(dialString, this); 501e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 502e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla if (mmi == null) { 503e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla Log.e(LOG_TAG, "Mmi is NULL!"); 504e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return false; 505e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } else if (mmi.isPukCommand()) { 506e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mPendingMmis.add(mmi); 507e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 508e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mmi.processCode(); 509e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return true; 510e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 511e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla Log.e(LOG_TAG, "Unrecognized mmi!"); 512767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 513767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 514767a662ecde33c3979bf02b793d392aca0403162Wink Saville 515e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla /** 516e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * Removes the given MMI from the pending list and notifies registrants that 517e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * it is complete. 518e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * 519e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * @param mmi MMI that is done 520e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla */ 521e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla void onMMIDone(CdmaMmiCode mmi) { 522e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla /* 523e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * Only notify complete if it's on the pending list. Otherwise, it's 524e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * already been handled (eg, previously canceled). 525e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla */ 526e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla if (mPendingMmis.remove(mmi)) { 527e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 528e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 529e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 530e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 531767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setLine1Number(String alphaTag, String number, Message onComplete) { 532767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setLine1Number: not possible in CDMA"); 533767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 534767a662ecde33c3979bf02b793d392aca0403162Wink Saville 535767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccCard getIccCard() { 536767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mRuimCard; 537767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 538767a662ecde33c3979bf02b793d392aca0403162Wink Saville 539767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getIccSerialNumber() { 540767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mRuimRecords.iccid; 541767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 542767a662ecde33c3979bf02b793d392aca0403162Wink Saville 543767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallWaiting(boolean enable, Message onComplete) { 544767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setCallWaiting is NOT supported in CDMA!"); 545767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 546767a662ecde33c3979bf02b793d392aca0403162Wink Saville 5477a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink public void updateServiceLocation() { 5487a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink mSST.enableSingleLocationUpdate(); 549767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 550767a662ecde33c3979bf02b793d392aca0403162Wink Saville 551767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setDataRoamingEnabled(boolean enable) { 552767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection.setDataOnRoamingEnabled(enable); 553767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 554767a662ecde33c3979bf02b793d392aca0403162Wink Saville 555dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 556dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.registerForCdmaOtaProvision(h, what, obj); 557dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 558dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 559dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 560dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.unregisterForCdmaOtaProvision(h); 561dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 562dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 5639e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 5649e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.registerForSubscriptionInfoReady(h, what, obj); 5659e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5669e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 5679e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void unregisterForSubscriptionInfoReady(Handler h) { 5689e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.unregisterForSubscriptionInfoReady(h); 5699e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5709e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 571dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj) { 57295a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant = new Registrant (h, what, obj); 573dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 574dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 575dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unsetOnEcbModeExitResponse(Handler h) { 57695a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.clear(); 577dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 578dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 579dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj) { 58022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.registerForCallWaiting(h, what, obj); 581dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 582dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 583dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCallWaiting(Handler h) { 58422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.unregisterForCallWaiting(h); 585dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 586dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 587767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 588767a662ecde33c3979bf02b793d392aca0403162Wink Saville getNeighboringCids(Message response) { 58990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink /* 59090cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * This is currently not implemented. At least as of June 59190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * 2009, there is no neighbor cell information available for 59290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * CDMA because some party is resisting making this 59390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * information readily available. Consequently, calling this 59490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * function can have no useful effect. This situation may 59590cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * (and hopefully will) change in the future. 59690cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink */ 59790cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink if (response != null) { 59890cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException ce = new CommandException( 59990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException.Error.REQUEST_NOT_SUPPORTED); 60090cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink AsyncResult.forMessage(response).exception = ce; 60190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink response.sendToTarget(); 60290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink } 603767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 604767a662ecde33c3979bf02b793d392aca0403162Wink Saville 60502648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt public DataState getDataConnectionState(String apnType) { 606767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataState ret = DataState.DISCONNECTED; 607767a662ecde33c3979bf02b793d392aca0403162Wink Saville 60882583b8312403ed734c30b161750d40c26086ee2Elliott Hughes if (mSST == null) { 609e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // Radio Technology Change is ongoning, dispose() and removeReferences() have 610e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // already been called 61144038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville 612e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataState.DISCONNECTED; 613f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville } else if (mSST.getCurrentCdmaDataConnectionState() != ServiceState.STATE_IN_SERVICE) { 614767a662ecde33c3979bf02b793d392aca0403162Wink Saville // If we're out of service, open TCP sockets may still work 615767a662ecde33c3979bf02b793d392aca0403162Wink Saville // but no data will flow 616767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 61702648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt } else if (mDataConnection.isApnTypeEnabled(apnType) == false) { 61802648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt ret = DataState.DISCONNECTED; 619767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 620767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch (mDataConnection.getState()) { 621767a662ecde33c3979bf02b793d392aca0403162Wink Saville case FAILED: 622767a662ecde33c3979bf02b793d392aca0403162Wink Saville case IDLE: 623767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 624767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 625767a662ecde33c3979bf02b793d392aca0403162Wink Saville 626767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTED: 627767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DISCONNECTING: 628767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( mCT.state != Phone.State.IDLE 629767a662ecde33c3979bf02b793d392aca0403162Wink Saville && !mSST.isConcurrentVoiceAndData()) { 630767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.SUSPENDED; 631767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 632767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTED; 633767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 634767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 635767a662ecde33c3979bf02b793d392aca0403162Wink Saville 636767a662ecde33c3979bf02b793d392aca0403162Wink Saville case INITING: 637767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTING: 638767a662ecde33c3979bf02b793d392aca0403162Wink Saville case SCANNING: 639767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTING; 640767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 641767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 642767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 643767a662ecde33c3979bf02b793d392aca0403162Wink Saville 644767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 645767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 646767a662ecde33c3979bf02b793d392aca0403162Wink Saville 647767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendUssdResponse(String ussdMessge) { 648767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "sendUssdResponse: not possible in CDMA"); 649767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 650767a662ecde33c3979bf02b793d392aca0403162Wink Saville 651767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendDtmf(char c) { 652767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 653767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 654767a662ecde33c3979bf02b793d392aca0403162Wink Saville "sendDtmf called with invalid character '" + c + "'"); 655767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 656767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (mCT.state == Phone.State.OFFHOOK) { 657767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.sendDtmf(c, null); 658767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 659767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 660767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 661767a662ecde33c3979bf02b793d392aca0403162Wink Saville 662767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void startDtmf(char c) { 663767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 664767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 665767a662ecde33c3979bf02b793d392aca0403162Wink Saville "startDtmf called with invalid character '" + c + "'"); 666767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 667767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.startDtmf(c, null); 668767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 669767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 670767a662ecde33c3979bf02b793d392aca0403162Wink Saville 671767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void stopDtmf() { 672767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.stopDtmf(null); 673767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 674767a662ecde33c3979bf02b793d392aca0403162Wink Saville 675dafa22a3ef9328c72319aeec605f6a6d20e46080jsh public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 676e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville boolean check = true; 677e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville for (int itr = 0;itr < dtmfString.length(); itr++) { 678e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) { 679e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Log.e(LOG_TAG, 680e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville "sendDtmf called with invalid character '" + dtmfString.charAt(itr)+ "'"); 681e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville check = false; 682e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 683e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 684e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 685e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if ((mCT.state == Phone.State.OFFHOOK)&&(check)) { 686dafa22a3ef9328c72319aeec605f6a6d20e46080jsh mCM.sendBurstDtmf(dtmfString, on, off, onComplete); 687e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 688e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 689e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 690767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getAvailableNetworks(Message response) { 691767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getAvailableNetworks: not possible in CDMA"); 692767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 693767a662ecde33c3979bf02b793d392aca0403162Wink Saville 694767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) { 695dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Log.e(LOG_TAG, "setOutgoingCallerIdDisplay: not possible in CDMA"); 696767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 697767a662ecde33c3979bf02b793d392aca0403162Wink Saville 698767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableLocationUpdates() { 699767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.enableLocationUpdates(); 700767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 701767a662ecde33c3979bf02b793d392aca0403162Wink Saville 7027a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink public void disableLocationUpdates() { 7037a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink mSST.disableLocationUpdates(); 7047a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink } 7057a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink 706767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getDataCallList(Message response) { 707767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getDataCallList(response); 708767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 709767a662ecde33c3979bf02b793d392aca0403162Wink Saville 710767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getDataRoamingEnabled() { 711767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mDataConnection.getDataOnRoamingEnabled(); 712767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 713767a662ecde33c3979bf02b793d392aca0403162Wink Saville 714767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<DataConnection> getCurrentDataConnectionList () { 715767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mDataConnection.getAllDataConnections(); 716767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 717767a662ecde33c3979bf02b793d392aca0403162Wink Saville 718767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setVoiceMailNumber(String alphaTag, 719767a662ecde33c3979bf02b793d392aca0403162Wink Saville String voiceMailNumber, 720767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 721ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause Message resp; 722ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mVmNumber = voiceMailNumber; 723a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville resp = obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete); 724ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mRuimRecords.setVoiceMailNumber(alphaTag, mVmNumber, resp); 725767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 726767a662ecde33c3979bf02b793d392aca0403162Wink Saville 727767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailNumber() { 728ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause String number = null; 729ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 7307188f946521d64ea21121939d2a4c279f33fe910Wink Saville // TODO: The default value of voicemail number should be read from a system property 731ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause number = sp.getString(VM_NUMBER_CDMA, "*86"); 732ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return number; 733dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 734dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 735dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /* Returns Number of Voicemails 736dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @hide 737dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 738ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause public int getVoiceMessageCount() { 739ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause int voicemailCount = mRuimRecords.getVoiceMessageCount(); 740ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // If mRuimRecords.getVoiceMessageCount returns zero, then there is possibility 741ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // that phone was power cycled and would have lost the voicemail count. 742ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // So get the count from preferences. 743ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause if (voicemailCount == 0) { 744ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 745ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause voicemailCount = sp.getInt(VM_COUNT_CDMA, 0); 746ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 747ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return voicemailCount; 748767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 749767a662ecde33c3979bf02b793d392aca0403162Wink Saville 750767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailAlphaTag() { 751767a662ecde33c3979bf02b793d392aca0403162Wink Saville // TODO: Where can we get this value has to be clarified with QC. 752767a662ecde33c3979bf02b793d392aca0403162Wink Saville String ret = "";//TODO: Remove = "", if we know where to get this value. 753767a662ecde33c3979bf02b793d392aca0403162Wink Saville 754767a662ecde33c3979bf02b793d392aca0403162Wink Saville //ret = mSIMRecords.getVoiceMailAlphaTag(); 755767a662ecde33c3979bf02b793d392aca0403162Wink Saville 756767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ret == null || ret.length() == 0) { 757767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mContext.getText( 758767a662ecde33c3979bf02b793d392aca0403162Wink Saville com.android.internal.R.string.defaultVoiceMailAlphaTag).toString(); 759767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 760767a662ecde33c3979bf02b793d392aca0403162Wink Saville 761767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 762767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 763767a662ecde33c3979bf02b793d392aca0403162Wink Saville 764767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean enableDataConnectivity() { 765dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 766dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // block data activities when phone is in emergency callback mode 76795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState) { 768dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Intent intent = new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS); 769dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ActivityManagerNative.broadcastStickyIntent(intent, null); 770dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return false; 7711cef22890d10417977397a5dccf34956858d0803Guo-Bin Zhang } else if ((mCT.state == Phone.State.OFFHOOK) && mCT.isInEmergencyCall()) { 7721cef22890d10417977397a5dccf34956858d0803Guo-Bin Zhang // Do not allow data call to be enabled when emergency call is going on 7731cef22890d10417977397a5dccf34956858d0803Guo-Bin Zhang return false; 774dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } else { 775dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mDataConnection.setDataEnabled(true); 776dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 777767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 778767a662ecde33c3979bf02b793d392aca0403162Wink Saville 779767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getIccRecordsLoaded() { 780767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mRuimRecords.getRecordsLoaded(); 781767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 782767a662ecde33c3979bf02b793d392aca0403162Wink Saville 783767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 784767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingOption: not possible in CDMA"); 785767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 786767a662ecde33c3979bf02b793d392aca0403162Wink Saville 787767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallForwardingOption(int commandInterfaceCFAction, 788767a662ecde33c3979bf02b793d392aca0403162Wink Saville int commandInterfaceCFReason, 789767a662ecde33c3979bf02b793d392aca0403162Wink Saville String dialingNumber, 790767a662ecde33c3979bf02b793d392aca0403162Wink Saville int timerSeconds, 791767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 792767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setCallForwardingOption: not possible in CDMA"); 793767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 794767a662ecde33c3979bf02b793d392aca0403162Wink Saville 795767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 796767a662ecde33c3979bf02b793d392aca0403162Wink Saville getOutgoingCallerIdDisplay(Message onComplete) { 797767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getOutgoingCallerIdDisplay: not possible in CDMA"); 798767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 799767a662ecde33c3979bf02b793d392aca0403162Wink Saville 800767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 801767a662ecde33c3979bf02b793d392aca0403162Wink Saville getCallForwardingIndicator() { 802767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingIndicator: not possible in CDMA"); 803767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 804767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 805767a662ecde33c3979bf02b793d392aca0403162Wink Saville 806767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void explicitCallTransfer() { 807767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "explicitCallTransfer: not possible in CDMA"); 808767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 809767a662ecde33c3979bf02b793d392aca0403162Wink Saville 810767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1AlphaTag() { 811767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getLine1AlphaTag: not possible in CDMA"); 812767a662ecde33c3979bf02b793d392aca0403162Wink Saville return null; 813767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 814767a662ecde33c3979bf02b793d392aca0403162Wink Saville 815dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 8161c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify any interested party of a Phone state change {@link Phone.State} 817767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 818767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyPhoneStateChanged() { 819767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyPhoneState(this); 820767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 821767a662ecde33c3979bf02b793d392aca0403162Wink Saville 822767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 8231c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 8241c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 825767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 8261c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh /*package*/ void notifyPreciseCallStateChanged() { 827767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 8281c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh super.notifyPreciseCallStateChangedP(); 829767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 830767a662ecde33c3979bf02b793d392aca0403162Wink Saville 831767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyServiceStateChanged(ServiceState ss) { 832767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyServiceStateChangedP(ss); 833767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 834767a662ecde33c3979bf02b793d392aca0403162Wink Saville 835767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyLocationChanged() { 836767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyCellLocation(this); 837767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 838767a662ecde33c3979bf02b793d392aca0403162Wink Saville 839767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyNewRingingConnection(Connection c) { 840767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 841767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyNewRingingConnectionP(c); 842767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 843767a662ecde33c3979bf02b793d392aca0403162Wink Saville 844767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyDisconnect(Connection cn) { 845767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDisconnectRegistrants.notifyResult(cn); 846767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 847767a662ecde33c3979bf02b793d392aca0403162Wink Saville 848767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyUnknownConnection() { 849767a662ecde33c3979bf02b793d392aca0403162Wink Saville mUnknownConnectionRegistrants.notifyResult(this); 850767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 851767a662ecde33c3979bf02b793d392aca0403162Wink Saville 852dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville void sendEmergencyCallbackModeChange(){ 853dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //Send an Intent 854dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED); 85595a1d1a89e383dab893750638c2393dec54833ffWink Saville intent.putExtra(PHONE_IN_ECM_STATE, mIsPhoneInEcmState); 856dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ActivityManagerNative.broadcastStickyIntent(intent,null); 85795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) Log.d(LOG_TAG, "sendEmergencyCallbackModeChange"); 858dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 859dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 860767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void 861767a662ecde33c3979bf02b793d392aca0403162Wink Saville updateMessageWaitingIndicator(boolean mwi) { 862767a662ecde33c3979bf02b793d392aca0403162Wink Saville // this also calls notifyMessageWaitingIndicator() 863767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords.setVoiceMessageWaiting(1, mwi ? -1 : 0); 864767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 865767a662ecde33c3979bf02b793d392aca0403162Wink Saville 866ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /* This function is overloaded to send number of voicemails instead of sending true/false */ 867ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /*package*/ void 868ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause updateMessageWaitingIndicator(int mwi) { 869ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mRuimRecords.setVoiceMessageWaiting(1, mwi); 870d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville } 871767a662ecde33c3979bf02b793d392aca0403162Wink Saville 872dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 873dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void exitEmergencyCallbackMode() { 87495a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 87595a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 87695a1d1a89e383dab893750638c2393dec54833ffWink Saville } 877dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Send a message which will invoke handleExitEmergencyCallbackMode 878a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 879dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 880dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 881dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleEnterEmergencyCallbackMode(Message msg) { 88295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 88395a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleEnterEmergencyCallbackMode,mIsPhoneInEcmState= " 88495a1d1a89e383dab893750638c2393dec54833ffWink Saville + mIsPhoneInEcmState); 88595a1d1a89e383dab893750638c2393dec54833ffWink Saville } 88695a1d1a89e383dab893750638c2393dec54833ffWink Saville // if phone is not in Ecm mode, and it's changed to Ecm mode 88795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState == false) { 88895a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = true; 889dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // notify change 890dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 89122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "true"); 8922563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 893dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Post this runnable so we will automatically exit 894dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if no one invokes exitEmergencyCallbackMode() directly. 89522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville long delayInMillis = SystemProperties.getLong( 89622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 897a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 89895a1d1a89e383dab893750638c2393dec54833ffWink Saville // We don't want to go to sleep while in Ecm 89995a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.acquire(); 900dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 901dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 902dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 903dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleExitEmergencyCallbackMode(Message msg) { 904dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville AsyncResult ar = (AsyncResult)msg.obj; 90595a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 90695a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleExitEmergencyCallbackMode,ar.exception , mIsPhoneInEcmState " 90795a1d1a89e383dab893750638c2393dec54833ffWink Saville + ar.exception + mIsPhoneInEcmState); 90895a1d1a89e383dab893750638c2393dec54833ffWink Saville } 90995a1d1a89e383dab893750638c2393dec54833ffWink Saville // Remove pending exit Ecm runnable, if any 910a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville removeCallbacks(mExitEcmRunnable); 911dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 91295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mEcmExitRespRegistrant != null) { 91395a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.notifyRegistrant(ar); 914dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 915dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if exiting ecm success 916dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (ar.exception == null) { 91795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState) { 91895a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = false; 91922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 920dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 921dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // send an Intent 922dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 92333777d2096c6877ab925db562067ac7272076399Libin Tang // Re-initiate data connection 92433777d2096c6877ab925db562067ac7272076399Libin Tang mDataConnection.setDataEnabled(true); 925dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 926dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 927dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 92895a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 92995a1d1a89e383dab893750638c2393dec54833ffWink Saville * Handle to cancel or restart Ecm timer in emergency call back mode 93095a1d1a89e383dab893750638c2393dec54833ffWink Saville * if action is CANCEL_ECM_TIMER, cancel Ecm timer and notify apps the timer is canceled; 93195a1d1a89e383dab893750638c2393dec54833ffWink Saville * otherwise, restart Ecm timer and notify apps the timer is restarted. 93295a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 93395a1d1a89e383dab893750638c2393dec54833ffWink Saville void handleTimerInEmergencyCallbackMode(int action) { 93495a1d1a89e383dab893750638c2393dec54833ffWink Saville switch(action) { 93595a1d1a89e383dab893750638c2393dec54833ffWink Saville case CANCEL_ECM_TIMER: 936a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville removeCallbacks(mExitEcmRunnable); 93795a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.notifyResult(new Boolean(true)); 93895a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 93995a1d1a89e383dab893750638c2393dec54833ffWink Saville case RESTART_ECM_TIMER: 94095a1d1a89e383dab893750638c2393dec54833ffWink Saville long delayInMillis = SystemProperties.getLong( 94195a1d1a89e383dab893750638c2393dec54833ffWink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 942a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 94395a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.notifyResult(new Boolean(false)); 94495a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 94595a1d1a89e383dab893750638c2393dec54833ffWink Saville default: 94695a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "handleTimerInEmergencyCallbackMode, unsupported action " + action); 94795a1d1a89e383dab893750638c2393dec54833ffWink Saville } 94895a1d1a89e383dab893750638c2393dec54833ffWink Saville } 94995a1d1a89e383dab893750638c2393dec54833ffWink Saville 95095a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 95195a1d1a89e383dab893750638c2393dec54833ffWink Saville * Registration point for Ecm timer reset 95295a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param h handler to notify 95395a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param what User-defined message code 95495a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param obj placed in Message.obj 95595a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 95695a1d1a89e383dab893750638c2393dec54833ffWink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 95795a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.addUnique(h, what, obj); 95895a1d1a89e383dab893750638c2393dec54833ffWink Saville } 95995a1d1a89e383dab893750638c2393dec54833ffWink Saville 96095a1d1a89e383dab893750638c2393dec54833ffWink Saville public void unregisterForEcmTimerReset(Handler h) { 96195a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.remove(h); 96295a1d1a89e383dab893750638c2393dec54833ffWink Saville } 96395a1d1a89e383dab893750638c2393dec54833ffWink Saville 964a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville @Override 965a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville public void handleMessage(Message msg) { 966a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult ar; 967a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Message onComplete; 968767a662ecde33c3979bf02b793d392aca0403162Wink Saville 969a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville switch(msg.what) { 970a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_AVAILABLE: { 971a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getBasebandVersion(obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE)); 972767a662ecde33c3979bf02b793d392aca0403162Wink Saville 973a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getDeviceIdentity(obtainMessage(EVENT_GET_DEVICE_IDENTITY_DONE)); 974a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 975a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 976767a662ecde33c3979bf02b793d392aca0403162Wink Saville 977a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_BASEBAND_VERSION_DONE:{ 978a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 979767a662ecde33c3979bf02b793d392aca0403162Wink Saville 980a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 981a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 982767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 983767a662ecde33c3979bf02b793d392aca0403162Wink Saville 984a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (DBG) Log.d(LOG_TAG, "Baseband version: " + ar.result); 985a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_BASEBAND_VERSION, (String)ar.result); 986a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 987a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 988767a662ecde33c3979bf02b793d392aca0403162Wink Saville 989a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_DEVICE_IDENTITY_DONE:{ 990a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 991767a662ecde33c3979bf02b793d392aca0403162Wink Saville 992a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 993a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 994767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 995a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville String[] respId = (String[])ar.result; 996a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mEsn = respId[2]; 997a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mMeid = respId[3]; 998a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 999a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1000767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1001a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_EMERGENCY_CALLBACK_MODE_ENTER:{ 1002a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleEnterEmergencyCallbackMode(msg); 1003a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1004a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1005dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1006a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE:{ 1007a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleExitEmergencyCallbackMode(msg); 1008a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1009a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1010dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1011a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RUIM_RECORDS_LOADED:{ 1012a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received"); 1013a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1014a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1015767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1016a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE:{ 1017a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_OFF_OR_NOT_AVAILABLE Received"); 1018a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1019a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1020767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1021a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_ON:{ 1022a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_ON Received"); 1023a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1024a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1025767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1026a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SSN:{ 1027a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_SSN Received"); 1028a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1029a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1030767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1031a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_REGISTERED_TO_NETWORK:{ 1032a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_REGISTERED_TO_NETWORK Received"); 1033a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1034a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1035767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1036a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_NV_READY:{ 1037a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_NV_READY Received"); 1038a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville //Inform the Service State Tracker 1039a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mEriManager.loadEriFile(); 1040a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mNvLoadedRegistrants.notifyRegistrants(); 1041a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if(mEriManager.isEriFileLoaded()) { 1042a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // when the ERI file is loaded 1043a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "ERI read, notify registrants"); 1044a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mEriFileLoadedRegistrants.notifyRegistrants(); 1045767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1046a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1047a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1048767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1049a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_VM_NUMBER_DONE:{ 1050a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1051a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (IccException.class.isInstance(ar.exception)) { 1052a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville storeVoiceMailNumber(mVmNumber); 1053a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar.exception = null; 1054767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1055a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete = (Message) ar.userObj; 1056a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (onComplete != null) { 1057a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1058a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete.sendToTarget(); 1059ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1060a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1061a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1062ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1063a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville default:{ 1064a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.handleMessage(msg); 1065767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1066767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1067767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1068767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1069dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1070dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the PhoneSubInfo of the CDMAPhone 1071dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1072dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public PhoneSubInfo getPhoneSubInfo() { 1073767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSubInfo; 1074dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1075767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1076dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1077dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccSmsInterfaceManager of the CDMAPhone 1078dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1079dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccSmsInterfaceManager getIccSmsInterfaceManager() { 1080dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimSmsInterfaceManager; 1081dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1082767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1083dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1084dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone 1085dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1086dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager() { 1087dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimPhoneBookInterfaceManager; 1088dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1089767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1090767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForNvLoaded(Handler h, int what, Object obj) { 1091767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant r = new Registrant (h, what, obj); 1092767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNvLoadedRegistrants.add(r); 1093767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1094767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1095767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForNvLoaded(Handler h) { 1096767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNvLoadedRegistrants.remove(h); 1097767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1098767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1099e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void registerForEriFileLoaded(Handler h, int what, Object obj) { 1100e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Registrant r = new Registrant (h, what, obj); 1101e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.add(r); 1102e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1103e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1104e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void unregisterForEriFileLoaded(Handler h) { 1105e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.remove(h); 1106e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1107e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1108dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // override for allowing access from other classes of this package 1109dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1110dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1111dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1112dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public final void setSystemProperty(String property, String value) { 1113dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville super.setSystemProperty(property, value); 1114dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1115767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1116dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1117dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1118dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1119dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccFileHandler getIccFileHandler() { 1120dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return this.mIccFileHandler; 1121dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1122767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1123dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1124dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Set the TTY mode of the CDMAPhone 1125dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1126dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setTTYMode(int ttyMode, Message onComplete) { 1127dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville this.mCM.setTTYMode(ttyMode, onComplete); 1128dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1129767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1130dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1131dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Queries the TTY mode of the CDMAPhone 1132dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1133dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void queryTTYMode(Message onComplete) { 1134dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville this.mCM.queryTTYMode(onComplete); 1135dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1136e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1137dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1138dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Activate or deactivate cell broadcast SMS. 1139dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1140dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param activate 0 = activate, 1 = deactivate 1141dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1142dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1143dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 1144dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mSMS.activateCellBroadcastSms(activate, response); 1145dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1146767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1147dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1148dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Query the current configuration of cdma cell broadcast SMS. 1149dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1150dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1151dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1152dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void getCellBroadcastSmsConfig(Message response) { 1153dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mSMS.getCellBroadcastSmsConfig(response); 1154dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1155767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1157dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Configure cdma cell broadcast SMS. 1158dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1159dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1160dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1161dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) { 1162dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mSMS.setCellBroadcastConfig(configValuesArray, response); 1163dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1164dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 11654d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville /** 11664d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville * Returns true if OTA Service Provisioning needs to be performed. 11674d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville */ 11684d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville @Override 11694d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville public boolean needsOtaServiceProvisioning() { 1170fd2d01302781af91d77557a99874111a4fee8365Wink Saville return mSST.getOtasp() != ServiceStateTracker.OTASP_NOT_NEEDED; 11714d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville } 11724d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville 1173e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final String IS683A_FEATURE_CODE = "*228"; 1174e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_FEATURE_CODE_NUM_DIGITS = 4; 1175e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_NUM_DIGITS = 2; 1176e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_OFFSET = 4; 1177dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1178dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_A_BAND = 0; 1179dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_B_BAND = 1; 1180dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_A_BLOCK = 2; 1181dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_B_BLOCK = 3; 1182dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_C_BLOCK = 4; 1183dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_D_BLOCK = 5; 1184dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_E_BLOCK = 6; 1185dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_F_BLOCK = 7; 1186e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int INVALID_SYSTEM_SELECTION_CODE = -1; 1187dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1188dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private boolean isIs683OtaSpDialStr(String dialStr) { 1189dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int sysSelCodeInt; 1190dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville boolean isOtaspDialString = false; 1191dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int dialStrLen = dialStr.length(); 1192dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1193dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStrLen == IS683A_FEATURE_CODE_NUM_DIGITS) { 1194dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStr.equals(IS683A_FEATURE_CODE)) { 1195dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville isOtaspDialString = true; 1196dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1197e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1198e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1199e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li switch (sysSelCodeInt) { 1200e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_A_BAND: 1201e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_B_BAND: 1202e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_A_BLOCK: 1203e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_B_BLOCK: 1204e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_C_BLOCK: 1205e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_D_BLOCK: 1206e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_E_BLOCK: 1207e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_F_BLOCK: 1208e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaspDialString = true; 1209e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1210e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li default: 1211e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1212e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1213e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1214e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaspDialString; 1215e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1216e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1217e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function extracts the system selection code from the dial string. 1218e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1219e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private int extractSelCodeFromOtaSpNum(String dialStr) { 1220e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int dialStrLen = dialStr.length(); 1221e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = INVALID_SYSTEM_SELECTION_CODE; 1222e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1223e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((dialStr.regionMatches(0, IS683A_FEATURE_CODE, 1224e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 0, IS683A_FEATURE_CODE_NUM_DIGITS)) && 1225e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li (dialStrLen >= (IS683A_FEATURE_CODE_NUM_DIGITS + 1226e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_SYS_SEL_CODE_NUM_DIGITS))) { 1227e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Since we checked the condition above, the system selection code 1228e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // extracted from dialStr will not cause any exception 1229e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = Integer.parseInt ( 1230e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li dialStr.substring (IS683A_FEATURE_CODE_NUM_DIGITS, 1231e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_FEATURE_CODE_NUM_DIGITS + IS683A_SYS_SEL_CODE_NUM_DIGITS)); 1232e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1233e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "extractSelCodeFromOtaSpNum " + sysSelCodeInt); 1234e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return sysSelCodeInt; 1235e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1236dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1237e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1238e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function checks if the system selection code extracted from 1239e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * the dial string "sysSelCodeInt' is the system selection code specified 1240e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in the carrier ota sp number schema "sch". 1241e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1242e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private boolean 1243e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li checkOtaSpNumBasedOnSysSelCode (int sysSelCodeInt, String sch[]) { 1244e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1245e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li try { 1246e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Get how many number of system selection code ranges 1247e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selRc = Integer.parseInt((String)sch[1]); 1248e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li for (int i = 0; i < selRc; i++) { 1249e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[i+2]) && !TextUtils.isEmpty(sch[i+3])) { 1250e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMin = Integer.parseInt((String)sch[i+2]); 1251e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMax = Integer.parseInt((String)sch[i+3]); 1252e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Check if the selection code extracted from the dial string falls 1253e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // within any of the range pairs specified in the schema. 1254e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((sysSelCodeInt >= selMin) && (sysSelCodeInt <= selMax)) { 1255e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1256dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville break; 1257e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1258dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1259dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1260e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } catch (NumberFormatException ex) { 1261e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If the carrier ota sp number schema is not correct, we still allow dial 1262e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // and only log the error: 1263e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.e(LOG_TAG, "checkOtaSpNumBasedOnSysSelCode, error", ex); 1264dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1265e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1266e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1267e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1268e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Define the pattern/format for carrier specified OTASP number schema. 1269e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // It separates by comma and/or whitespace. 1270e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static Pattern pOtaSpNumSchema = Pattern.compile("[,\\s]+"); 1271e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1272e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1273e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The following function checks if a dial string is a carrier specified 1274e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * OTASP number or not by checking against the OTASP number schema stored 1275e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in PROPERTY_OTASP_NUM_SCHEMA. 1276e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1277e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * Currently, there are 2 schemas for carriers to specify the OTASP number: 1278e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1) Use system selection code: 1279e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1280e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * SELC,the # of code pairs,min1,max1,min2,max2,... 1281e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "SELC,3,10,20,30,40,60,70" indicates that there are 3 pairs of 1282e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * selection codes, and they are {10,20}, {30,40} and {60,70} respectively. 1283e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1284e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 2) Use feature code: 1285e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1286e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * "FC,length of feature code,feature code". 1287e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "FC,2,*2" indicates that the length of the feature code is 2, 1288e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * and the code itself is "*2". 1289e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1290e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private boolean isCarrierOtaSpNum(String dialStr) { 1291e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1292e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1293e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt == INVALID_SYSTEM_SELECTION_CODE) { 1294e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1295e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1296e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // mCarrierOtaSpNumSchema is retrieved from PROPERTY_OTASP_NUM_SCHEMA: 1297e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(mCarrierOtaSpNumSchema)) { 1298e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Matcher m = pOtaSpNumSchema.matcher(mCarrierOtaSpNumSchema); 1299e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1300e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,schema" + mCarrierOtaSpNumSchema); 1301e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1302e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1303e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (m.find()) { 1304e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String sch[] = pOtaSpNumSchema.split(mCarrierOtaSpNumSchema); 1305e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If carrier uses system selection code mechanism 1306e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("SELC")) { 1307e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt!=INVALID_SYSTEM_SELECTION_CODE) { 1308e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum=checkOtaSpNumBasedOnSysSelCode(sysSelCodeInt,sch); 1309e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1310e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1311e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,sysSelCodeInt is invalid"); 1312e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1313e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1314e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("FC")) { 1315e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int fcLen = Integer.parseInt((String)sch[1]); 1316e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String fc = (String)sch[2]; 1317e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (dialStr.regionMatches(0,fc,0,fcLen)) { 1318e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1319e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1320e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,not otasp number"); 1321e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1322e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1323e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1324e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema not supported" + sch[0]); 1325e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1326e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1327e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1328e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1329e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern not right" + 1330e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema); 1331e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1332e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1333e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1334e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern empty"); 1335e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1336e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1337dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1338767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1339d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang /** 1340d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * isOTASPNumber: checks a given number against the IS-683A OTASP dial string and carrier 1341d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * OTASP dial string. 1342d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * 1343d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @param dialStr the number to look up. 1344d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @return true if the number is in IS-683A OTASP dial string or carrier OTASP dial string 1345d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang */ 1346dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 1347d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang public boolean isOtaSpNumber(String dialStr){ 1348d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang boolean isOtaSpNum = false; 13499e534153264138cfee383c626db92b934fafc1afTammo Spalink String dialableStr = PhoneNumberUtils.extractNetworkPortionAlt(dialStr); 1350d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (dialableStr != null) { 1351d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isIs683OtaSpDialStr(dialableStr); 1352d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (isOtaSpNum == false) { 1353d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isCarrierOtaSpNum(dialableStr); 1354d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1355d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1356d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (DBG) Log.d(LOG_TAG, "isOtaSpNumber " + isOtaSpNum); 1357d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang return isOtaSpNum; 1358d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1359e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1360e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1361e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconIndex() { 1362cc5c1ad53ce4541f17842daba29e7ccba221c079Robert Greenwalt return getServiceState().getCdmaEriIconIndex(); 1363e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1364e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1365e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1366e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI icon mode, 1367e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 0 - ON 1368e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 1 - FLASHING 1369e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1370e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1371e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconMode() { 1372cc5c1ad53ce4541f17842daba29e7ccba221c079Robert Greenwalt return getServiceState().getCdmaEriIconMode(); 1373e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1374e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1375e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1376e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI text, 1377e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1378e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1379e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public String getCdmaEriText() { 1380e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int roamInd = getServiceState().getCdmaRoamingIndicator(); 1381e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); 1382f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mEriManager.getCdmaEriText(roamInd, defRoamInd); 1383e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1384ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1385ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /** 1386ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * Store the voicemail number in preferences 1387ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause */ 1388ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private void storeVoiceMailNumber(String number) { 1389ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Update the preference value of voicemail number 1390ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 1391ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences.Editor editor = sp.edit(); 1392ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause editor.putString(VM_NUMBER_CDMA, number); 1393fa8e271636b9e9b86f247cdb4c91d9ebe9675c27Brad Fitzpatrick editor.apply(); 1394ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1395ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1396142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1397142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * Sets PROPERTY_ICC_OPERATOR_ISO_COUNTRY property 1398142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1399142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1400142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville private void setIsoCountryProperty(String operatorNumeric) { 1401142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (TextUtils.isEmpty(operatorNumeric)) { 1402142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, ""); 1403142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } else { 1404142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String iso = ""; 1405142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1406142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville iso = MccTable.countryCodeForMcc(Integer.parseInt( 1407142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville operatorNumeric.substring(0,3))); 1408142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (NumberFormatException ex) { 1409142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1410142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (StringIndexOutOfBoundsException ex) { 1411142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1412142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1413142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1414142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso); 1415142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1416142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1417142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1418142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1419144fdfec240a56890657d2248a22bdda9f22470cWink Saville * Sets the "current" field in the telephony provider according to the 1420144fdfec240a56890657d2248a22bdda9f22470cWink Saville * build-time operator numeric property 1421142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1422142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * @return true for success; false otherwise. 1423142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1424144fdfec240a56890657d2248a22bdda9f22470cWink Saville boolean updateCurrentCarrierInProvider(String operatorNumeric) { 1425142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (!TextUtils.isEmpty(operatorNumeric)) { 1426142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1427142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"); 1428142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville ContentValues map = new ContentValues(); 1429142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville map.put(Telephony.Carriers.NUMERIC, operatorNumeric); 1430142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville getContext().getContentResolver().insert(uri, map); 1431144fdfec240a56890657d2248a22bdda9f22470cWink Saville 1432144fdfec240a56890657d2248a22bdda9f22470cWink Saville // Updates MCC MNC device configuration information 1433144fdfec240a56890657d2248a22bdda9f22470cWink Saville MccTable.updateMccMncConfiguration(this, operatorNumeric); 1434144fdfec240a56890657d2248a22bdda9f22470cWink Saville 1435142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return true; 1436142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (SQLException e) { 1437142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.e(LOG_TAG, "Can't store current operator", e); 1438142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1439142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1440142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return false; 1441142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1442767a662ecde33c3979bf02b793d392aca0403162Wink Saville} 1443