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