10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project 31260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.cdma; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.ActivityManagerNative; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.ContentValues; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Intent; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.SharedPreferences; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.database.SQLException; 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.Uri; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.PowerManager.WakeLock; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Registrant; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RegistrantList; 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 34cbbf6deee30d702e398939f4bb464f5e821f5e6cDianne Hackbornimport android.os.UserHandle; 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.preference.PreferenceManager; 36ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.provider.Settings; 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.provider.Telephony; 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.CellLocation; 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.PhoneNumberUtils; 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState; 41ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.cdma.CdmaCellLocation; 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils; 4399c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Savilleimport android.telephony.Rlog; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CallStateException; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CallTracker; 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CommandException; 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CommandsInterface; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Connection; 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.MccTable; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.MmiCode; 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.OperatorInfo; 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneBase; 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneConstants; 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneNotifier; 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneProxy; 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneSubInfo; 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.ServiceStateTracker; 610d4bcdf379842af4b6304809156971e926f374f0Jake Hambyimport com.android.internal.telephony.SmsBroadcastUndelivered; 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.TelephonyIntents; 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.TelephonyProperties; 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.UUSInfo; 65454b1dfd508844b42eb775e4ab2359be74d3672bWink Savilleimport com.android.internal.telephony.dataconnection.DcTracker; 66d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccException; 67d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccRecords; 68d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.RuimRecords; 69d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccCardApplication; 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.uicc.UiccController; 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor; 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter; 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList; 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.List; 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.regex.Matcher; 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.regex.Pattern; 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA; 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY; 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC; 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class CDMAPhone extends PhoneBase { 86cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville static final String LOG_TAG = "CDMAPhone"; 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final boolean DBG = true; 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final boolean VDBG = false; /* STOP SHIP if true */ 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Default Emergency Callback Mode exit timer 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int DEFAULT_ECM_EXIT_TIMER_VALUE = 300000; 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final String VM_COUNT_CDMA = "vm_count_key_cdma"; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final String VM_NUMBER_CDMA = "vm_number_key_cdma"; 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private String mVmNumber = null; 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int RESTART_ECM_TIMER = 0; // restart Ecm timer 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int CANCEL_ECM_TIMER = 1; // cancel Ecm timer 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Instance Variables 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaCallTracker mCT; 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaServiceStateTracker mSST; 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaSubscriptionSourceManager mCdmaSSM; 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ArrayList <CdmaMmiCode> mPendingMmis = new ArrayList<CdmaMmiCode>(); 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville RuimPhoneBookInterfaceManager mRuimPhoneBookInterfaceManager; 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mCdmaSubscriptionSource = CdmaSubscriptionSourceManager.SUBSCRIPTION_SOURCE_UNKNOWN; 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneSubInfo mSubInfo; 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville EriManager mEriManager; 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville WakeLock mWakeLock; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // mEriFileLoadedRegistrants are informed after the ERI text has been loaded 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final RegistrantList mEriFileLoadedRegistrants = new RegistrantList(); 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // mEcmTimerResetRegistrants are informed after Ecm timer is canceled or re-started 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final RegistrantList mEcmTimerResetRegistrants = new RegistrantList(); 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // mEcmExitRespRegistrant is informed after the phone has been exited 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //the emergency callback mode 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //keep track of if phone is in emergency callback mode 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean mIsPhoneInEcmState; 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private Registrant mEcmExitRespRegistrant; 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected String mImei; 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected String mImeiSv; 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private String mEsn; 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private String mMeid; 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // string to define how the carrier specifies its own ota sp number 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private String mCarrierOtaSpNumSchema; 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // A runnable which is used to automatically exit from Ecm after a period of time. 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private Runnable mExitEcmRunnable = new Runnable() { 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void run() { 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville exitEmergencyCallbackMode(); 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville }; 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Registrant mPostDialHandler; 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static String PROPERTY_CDMA_HOME_OPERATOR_NUMERIC = "ro.cdma.home.operator.numeric"; 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Constructors 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) { 143ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville super("CDMA", notifier, context, ci, false); 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville initSstIcc(); 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville init(context, notifier); 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier, 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean unitTestMode) { 150ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville super("CDMA", notifier, context, ci, unitTestMode); 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville initSstIcc(); 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville init(context, notifier); 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void initSstIcc() { 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST = new CdmaServiceStateTracker(this); 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void init(Context context, PhoneNotifier notifier) { 16022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setPhoneType(PhoneConstants.PHONE_TYPE_CDMA); 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT = new CdmaCallTracker(this); 16222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCdmaSSM = CdmaSubscriptionSourceManager.getInstance(context, mCi, this, 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED, null); 164454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker = new DcTracker(this); 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRuimPhoneBookInterfaceManager = new RuimPhoneBookInterfaceManager(this); 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSubInfo = new PhoneSubInfo(this); 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEriManager = new EriManager(this, context, EriManager.ERI_FROM_XML); 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); 17022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 17122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForOn(this, EVENT_RADIO_ON, null); 17222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setOnSuppServiceNotification(this, EVENT_SSN, null); 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); 17422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setEmergencyCallbackMode(this, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null); 175fba544106298510dc3edf110ab2be92270f08c13Anshul Jain mCi.registerForExitEmergencyCallbackMode(this, EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE, 176fba544106298510dc3edf110ab2be92270f08c13Anshul Jain null); 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PowerManager pm 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,LOG_TAG); 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //Change the system setting 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE, 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Integer.toString(PhoneConstants.PHONE_TYPE_CDMA)); 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This is needed to handle phone process crashes 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsPhoneInEcmState = inEcm.equals("true"); 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mIsPhoneInEcmState) { 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Send a message which will invoke handleExitEmergencyCallbackMode 19122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // get the string that specifies the carrier OTA Sp number 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCarrierOtaSpNumSchema = SystemProperties.get( 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_OTASP_NUM_SCHEMA,""); 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 198ce06370fc58f59abda3cb072326e9425da3d755dWink Saville // Sets operator properties by retrieving from build-time system property 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String operatorAlpha = SystemProperties.get("ro.cdma.home.operator.alpha"); 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String operatorNumeric = SystemProperties.get(PROPERTY_CDMA_HOME_OPERATOR_NUMERIC); 201ce06370fc58f59abda3cb072326e9425da3d755dWink Saville log("init: operatorAlpha='" + operatorAlpha 202ce06370fc58f59abda3cb072326e9425da3d755dWink Saville + "' operatorNumeric='" + operatorNumeric + "'"); 203ce06370fc58f59abda3cb072326e9425da3d755dWink Saville if (mUiccController.getUiccCardApplication(UiccController.APP_FAM_3GPP) == null) { 204ce06370fc58f59abda3cb072326e9425da3d755dWink Saville log("init: APP_FAM_3GPP == NULL"); 205ce06370fc58f59abda3cb072326e9425da3d755dWink Saville if (!TextUtils.isEmpty(operatorAlpha)) { 206ce06370fc58f59abda3cb072326e9425da3d755dWink Saville log("init: set 'gsm.sim.operator.alpha' to operator='" + operatorAlpha + "'"); 207ce06370fc58f59abda3cb072326e9425da3d755dWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, operatorAlpha); 208ce06370fc58f59abda3cb072326e9425da3d755dWink Saville } 209ce06370fc58f59abda3cb072326e9425da3d755dWink Saville if (!TextUtils.isEmpty(operatorNumeric)) { 210ce06370fc58f59abda3cb072326e9425da3d755dWink Saville log("init: set 'gsm.sim.operator.numeric' to operator='" + operatorNumeric + "'"); 211ce06370fc58f59abda3cb072326e9425da3d755dWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_NUMERIC, operatorNumeric); 212ce06370fc58f59abda3cb072326e9425da3d755dWink Saville } 213ce06370fc58f59abda3cb072326e9425da3d755dWink Saville setIsoCountryProperty(operatorNumeric); 2148469152d2c6bdaf4632a07880bd1bcd6af78d10bduho.ro } 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Sets current entry in the telephony carrier table 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville updateCurrentCarrierInProvider(operatorNumeric); 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Notify voicemails. 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifier.notifyMessageWaitingChanged(this); 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dispose() { 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.dispose(); 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville log("dispose"); 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //Unregister from all former registered events 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville unregisterForRuimRecordEvents(); 23122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForAvailable(this); //EVENT_RADIO_AVAILABLE 23222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForOffOrNotAvailable(this); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE 23322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForOn(this); //EVENT_RADIO_ON 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.unregisterForNetworkAttached(this); //EVENT_REGISTERED_TO_NETWORK 23522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unSetOnSuppServiceNotification(this); 236fba544106298510dc3edf110ab2be92270f08c13Anshul Jain mCi.unregisterForExitEmergencyCallbackMode(this); 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville removeCallbacks(mExitEcmRunnable); 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPendingMmis.clear(); 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //Force all referenced classes to unregister their former registered events 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.dispose(); 243454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker.dispose(); 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.dispose(); 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCdmaSSM.dispose(this); 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRuimPhoneBookInterfaceManager.dispose(); 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSubInfo.dispose(); 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEriManager.dispose(); 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void removeReferences() { 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville log("removeReferences"); 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRuimPhoneBookInterfaceManager = null; 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSubInfo = null; 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT = null; 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST = null; 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEriManager = null; 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mExitEcmRunnable = null; 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.removeReferences(); 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void finalize() { 26699c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if(DBG) Rlog.d(LOG_TAG, "CDMAPhone finalized"); 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mWakeLock.isHeld()) { 26899c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "UNEXPECTED; mWakeLock is held when finalizing."); 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLock.release(); 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 273cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public ServiceState getServiceState() { 27522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mSST.mSS; 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 278cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CallTracker getCallTracker() { 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mCT; 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 283cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.State getState() { 28522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCT.mState; 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 288cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public ServiceStateTracker getServiceStateTracker() { 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSST; 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 293cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getPhoneType() { 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.PHONE_TYPE_CDMA; 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 298cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean canTransfer() { 30099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "canTransfer: not possible in CDMA"); 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 304cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CdmaCall getRingingCall() { 30622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCT.mRingingCall; 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 309cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setMute(boolean muted) { 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.setMute(muted); 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 314cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getMute() { 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mCT.getMute(); 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 319cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 320cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public void conference() { 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // three way calls in CDMA will be handled by feature codes 32299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "conference: not possible in CDMA"); 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 325cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 32722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setPreferredVoicePrivacy(enable, onComplete); 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 330cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 33222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getPreferredVoicePrivacy(onComplete); 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 335cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void clearDisconnected() { 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.clearDisconnected(); 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 340cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public DataActivityState getDataActivityState() { 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville DataActivityState ret = DataActivityState.NONE; 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mSST.getCurrentDataConnectionState() == ServiceState.STATE_IN_SERVICE) { 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 346454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville switch (mDcTracker.getActivity()) { 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DATAIN: 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = DataActivityState.DATAIN; 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DATAOUT: 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = DataActivityState.DATAOUT; 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DATAINANDOUT: 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = DataActivityState.DATAINANDOUT; 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DORMANT: 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = DataActivityState.DORMANT; 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 362cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville 363cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville default: 364cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville ret = DataActivityState.NONE; 365cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville break; 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ret; 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 371cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Connection 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dial (String dialString) throws CallStateException { 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Need to make sure dialString gets parsed properly 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String newDialString = PhoneNumberUtils.stripSeparators(dialString); 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mCT.dial(newDialString); 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 379cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Connection dial(String dialString, UUSInfo uusInfo) throws CallStateException { 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new CallStateException("Sending UUS information NOT supported in CDMA!"); 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 384cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getMessageWaitingIndicator() { 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return (getVoiceMessageCount() > 0); 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 390cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public List<? extends MmiCode> 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getPendingMmiCodes() { 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mPendingMmis; 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 396cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSuppServiceNotification( 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 39999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "method registerForSuppServiceNotification is NOT supported in CDMA!"); 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 402cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CdmaCall getBackgroundCall() { 40422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCT.mBackgroundCall; 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 407cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean handleInCallMmiCommands(String dialString) { 40999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "method handleInCallMmiCommands is NOT supported in CDMA!"); 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isInCall() { 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaCall.State foregroundCallState = getForegroundCall().getState(); 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaCall.State backgroundCallState = getBackgroundCall().getState(); 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CdmaCall.State ringingCallState = getRingingCall().getState(); 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return (foregroundCallState.isAlive() || backgroundCallState.isAlive() || ringingCallState 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .isAlive()); 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 422cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setNetworkSelectionModeAutomatic(Message response) { 42599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "method setNetworkSelectionModeAutomatic is NOT supported in CDMA!"); 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 428cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSuppServiceNotification(Handler h) { 43099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "method unregisterForSuppServiceNotification is NOT supported in CDMA!"); 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 433cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville acceptCall() throws CallStateException { 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.acceptCall(); 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 439cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville rejectCall() throws CallStateException { 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.rejectCall(); 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 445cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switchHoldingAndActive() throws CallStateException { 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.switchWaitingOrHoldingAndActive(); 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 451cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4528e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro public String getIccSerialNumber() { 4538e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro IccRecords r = mIccRecords.get(); 4548e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro if (r == null) { 4558e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro // to get ICCID form SIMRecords because it is on MF. 4568e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro r = mUiccController.getIccRecords(UiccController.APP_FAM_3GPP); 4578e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro } 4588e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro return (r != null) ? r.getIccId() : null; 4598e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro } 4608e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro 4618e416432ae310dd451f1360dfd4f70d8ef9b3903duho.ro @Override 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getLine1Number() { 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSST.getMdnNumber(); 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 466cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaPrlVersion(){ 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSST.getPrlVersion(); 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 471cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaMin() { 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSST.getCdmaMin(); 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 476cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isMinInfoReady() { 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSST.isMinInfoReady(); 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 481cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getCallWaiting(Message onComplete) { 48322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.queryCallWaiting(CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 486cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setRadioPower(boolean power) { 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.setRadioPower(power); 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 492cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getEsn() { 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mEsn; 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 497cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getMeid() { 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mMeid; 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //returns MEID or ESN in CDMA 503cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getDeviceId() { 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String id = getMeid(); 5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((id == null) || id.matches("^0*$")) { 50799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "getDeviceId(): MEID is not initialized use ESN"); 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville id = getEsn(); 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return id; 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 513cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getDeviceSvn() { 51599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "getDeviceSvn(): return 0"); 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "0"; 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 519cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getSubscriberId() { 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSST.getImsi(); 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 524cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5250e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi public String getGroupIdLevel1() { 5260e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi Rlog.e(LOG_TAG, "GID1 is not available in CDMA"); 5270e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi return null; 5280e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi } 5290e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi 5300e4abef0d7e978d4c3dea5199f451a1c69158d03Sungmin Choi @Override 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getImei() { 53299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "IMEI is not available in CDMA"); 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 536cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean canConference() { 53899c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "canConference: not possible in CDMA"); 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 542cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CellLocation getCellLocation() { 544ffe6e68213ae3220497188fed814e271b472292aJake Hamby CdmaCellLocation loc = mSST.mCellLoc; 545ffe6e68213ae3220497188fed814e271b472292aJake Hamby 546ffe6e68213ae3220497188fed814e271b472292aJake Hamby int mode = Settings.Secure.getInt(getContext().getContentResolver(), 547ffe6e68213ae3220497188fed814e271b472292aJake Hamby Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); 548ffe6e68213ae3220497188fed814e271b472292aJake Hamby if (mode == Settings.Secure.LOCATION_MODE_OFF) { 549ffe6e68213ae3220497188fed814e271b472292aJake Hamby // clear lat/long values for location privacy 550ffe6e68213ae3220497188fed814e271b472292aJake Hamby CdmaCellLocation privateLoc = new CdmaCellLocation(); 551ffe6e68213ae3220497188fed814e271b472292aJake Hamby privateLoc.setCellLocationData(loc.getBaseStationId(), 552ffe6e68213ae3220497188fed814e271b472292aJake Hamby CdmaCellLocation.INVALID_LAT_LONG, 553ffe6e68213ae3220497188fed814e271b472292aJake Hamby CdmaCellLocation.INVALID_LAT_LONG, 554ffe6e68213ae3220497188fed814e271b472292aJake Hamby loc.getSystemId(), loc.getNetworkId()); 555ffe6e68213ae3220497188fed814e271b472292aJake Hamby loc = privateLoc; 556ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 557ffe6e68213ae3220497188fed814e271b472292aJake Hamby return loc; 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 560cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CdmaCall getForegroundCall() { 56222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCT.mForegroundCall; 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 565cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville selectNetworkManually(OperatorInfo network, 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message response) { 56999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "selectNetworkManually: not possible in CDMA"); 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 572cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPostDialHandler = new Registrant(h, what, obj); 5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 577cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean handlePinMmi(String dialString) { 5793522c54a64f577f2b657a775dae9b4eb2d8003d5Wink Saville CdmaMmiCode mmi = CdmaMmiCode.newFromDialString(dialString, this, mUiccApplication.get()); 5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mmi == null) { 58299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "Mmi is NULL!"); 5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 5843522c54a64f577f2b657a775dae9b4eb2d8003d5Wink Saville } else if (mmi.isPinPukCommand()) { 5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPendingMmis.add(mmi); 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mmi.processCode(); 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 59099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "Unrecognized mmi!"); 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Removes the given MMI from the pending list and notifies registrants that 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * it is complete. 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param mmi MMI that is done 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void onMMIDone(CdmaMmiCode mmi) { 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Only notify complete if it's on the pending list. Otherwise, it's 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * already been handled (eg, previously canceled). 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mPendingMmis.remove(mmi)) { 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 610cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setLine1Number(String alphaTag, String number, Message onComplete) { 61299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "setLine1Number: not possible in CDMA"); 6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 615cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCallWaiting(boolean enable, Message onComplete) { 61799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "method setCallWaiting is NOT supported in CDMA!"); 6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 620cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void updateServiceLocation() { 6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.enableSingleLocationUpdate(); 6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 625cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setDataRoamingEnabled(boolean enable) { 627454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker.setDataOnRoamingEnabled(enable); 6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 630cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 63222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForCdmaOtaProvision(h, what, obj); 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 635cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 63722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForCdmaOtaProvision(h); 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 640cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.registerForSubscriptionInfoReady(h, what, obj); 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 645cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSubscriptionInfoReady(Handler h) { 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.unregisterForSubscriptionInfoReady(h); 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 650cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj) { 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEcmExitRespRegistrant = new Registrant (h, what, obj); 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 655cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unsetOnEcbModeExitResponse(Handler h) { 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEcmExitRespRegistrant.clear(); 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 660cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj) { 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.registerForCallWaiting(h, what, obj); 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 665cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCallWaiting(Handler h) { 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCT.unregisterForCallWaiting(h); 6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 670cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getNeighboringCids(Message response) { 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This is currently not implemented. At least as of June 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2009, there is no neighbor cell information available for 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * CDMA because some party is resisting making this 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * information readily available. Consequently, calling this 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * function can have no useful effect. This situation may 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (and hopefully will) change in the future. 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (response != null) { 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CommandException ce = new CommandException( 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CommandException.Error.REQUEST_NOT_SUPPORTED); 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(response).exception = ce; 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville response.sendToTarget(); 6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 689cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.DataState getDataConnectionState(String apnType) { 6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.DataState ret = PhoneConstants.DataState.DISCONNECTED; 6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mSST == null) { 6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Radio Technology Change is ongoning, dispose() and removeReferences() have 6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // already been called 6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = PhoneConstants.DataState.DISCONNECTED; 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else if (mSST.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE) { 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // If we're out of service, open TCP sockets may still work 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // but no data will flow 7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = PhoneConstants.DataState.DISCONNECTED; 702454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville } else if (mDcTracker.isApnTypeEnabled(apnType) == false || 703454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker.isApnTypeActive(apnType) == false) { 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = PhoneConstants.DataState.DISCONNECTED; 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 706454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville switch (mDcTracker.getState(apnType)) { 707c6bbea82bf74ebb492508199b6f3e172b7ce860aWink Saville case RETRYING: 7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case FAILED: 7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IDLE: 7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = PhoneConstants.DataState.DISCONNECTED; 7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case CONNECTED: 7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DISCONNECTING: 71522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville if ( mCT.mState != PhoneConstants.State.IDLE 7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville && !mSST.isConcurrentVoiceAndDataAllowed()) { 7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = PhoneConstants.DataState.SUSPENDED; 7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = PhoneConstants.DataState.CONNECTED; 7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case CONNECTING: 7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SCANNING: 7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ret = PhoneConstants.DataState.CONNECTING; 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville log("getDataConnectionState apnType=" + apnType + " ret=" + ret); 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ret; 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 734cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void sendUssdResponse(String ussdMessge) { 73699c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "sendUssdResponse: not possible in CDMA"); 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 739cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void sendDtmf(char c) { 7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 74299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, 7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "sendDtmf called with invalid character '" + c + "'"); 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 74522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville if (mCT.mState == PhoneConstants.State.OFFHOOK) { 74622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.sendDtmf(c, null); 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 751cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void startDtmf(char c) { 7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 75499c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "startDtmf called with invalid character '" + c + "'"); 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 75722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.startDtmf(c, null); 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 761cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void stopDtmf() { 76322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.stopDtmf(null); 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 766cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean check = true; 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int itr = 0;itr < dtmfString.length(); itr++) { 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) { 77199c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "sendDtmf called with invalid character '" + dtmfString.charAt(itr)+ "'"); 7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville check = false; 7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 77722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville if ((mCT.mState == PhoneConstants.State.OFFHOOK)&&(check)) { 77822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.sendBurstDtmf(dtmfString, on, off, onComplete); 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 782cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getAvailableNetworks(Message response) { 78499c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "getAvailableNetworks: not possible in CDMA"); 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 787cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) { 78999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "setOutgoingCallerIdDisplay: not possible in CDMA"); 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 792cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void enableLocationUpdates() { 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.enableLocationUpdates(); 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 797cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void disableLocationUpdates() { 7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSST.disableLocationUpdates(); 8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 802cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getDataCallList(Message response) { 80422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getDataCallList(response); 8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 807cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getDataRoamingEnabled() { 809454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getDataOnRoamingEnabled(); 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 812cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setVoiceMailNumber(String alphaTag, 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String voiceMailNumber, 8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message onComplete) { 8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message resp; 8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mVmNumber = voiceMailNumber; 8180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville resp = obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete); 819e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 820e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka if (r != null) { 821e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka r.setVoiceMailNumber(alphaTag, mVmNumber, resp); 822e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 825cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getVoiceMailNumber() { 8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String number = null; 8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // TODO: The default value of voicemail number should be read from a system property 8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Read platform settings for dynamic voicemail number 8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (getContext().getResources().getBoolean(com.android.internal 8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .R.bool.config_telephony_use_own_number_for_voicemail)) { 8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville number = sp.getString(VM_NUMBER_CDMA, getLine1Number()); 8350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville number = sp.getString(VM_NUMBER_CDMA, "*86"); 8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return number; 8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* Returns Number of Voicemails 8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @hide 8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 844cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getVoiceMessageCount() { 846e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 847e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka int voicemailCount = (r != null) ? r.getVoiceMessageCount() : 0; 8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // If mRuimRecords.getVoiceMessageCount returns zero, then there is possibility 8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // that phone was power cycled and would have lost the voicemail count. 8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // So get the count from preferences. 8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (voicemailCount == 0) { 8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville voicemailCount = sp.getInt(VM_COUNT_CDMA, 0); 8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return voicemailCount; 8560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 858cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getVoiceMailAlphaTag() { 8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // TODO: Where can we get this value has to be clarified with QC. 8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String ret = "";//TODO: Remove = "", if we know where to get this value. 8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //ret = mSIMRecords.getVoiceMailAlphaTag(); 8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ret == null || ret.length() == 0) { 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mContext.getText( 8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville com.android.internal.R.string.defaultVoiceMailAlphaTag).toString(); 8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ret; 8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 873cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 87599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "getCallForwardingOption: not possible in CDMA"); 8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 878cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCallForwardingOption(int commandInterfaceCFAction, 8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int commandInterfaceCFReason, 8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String dialingNumber, 8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int timerSeconds, 8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message onComplete) { 88499c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "setCallForwardingOption: not possible in CDMA"); 8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 887cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getOutgoingCallerIdDisplay(Message onComplete) { 89099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "getOutgoingCallerIdDisplay: not possible in CDMA"); 8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 893cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean 8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getCallForwardingIndicator() { 89699c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "getCallForwardingIndicator: not possible in CDMA"); 8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 900cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void explicitCallTransfer() { 90299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "explicitCallTransfer: not possible in CDMA"); 9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 905cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getLine1AlphaTag() { 90799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "getLine1AlphaTag: not possible in CDMA"); 9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 912cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * Notify any interested party of a Phone state change 913cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * {@link com.android.internal.telephony.PhoneConstants.State} 9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /*package*/ void notifyPhoneStateChanged() { 9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyPhoneState(this); 9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 920cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * Notify registrants of a change in the call state. This notifies changes in 921cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * {@link com.android.internal.telephony.Call.State}. Use this when changes 922cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville * in the precise call state are needed, else use notifyPhoneStateChanged. 9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /*package*/ void notifyPreciseCallStateChanged() { 9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* we'd love it if this was package-scoped*/ 9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.notifyPreciseCallStateChangedP(); 9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyServiceStateChanged(ServiceState ss) { 9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.notifyServiceStateChangedP(ss); 9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyLocationChanged() { 9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyCellLocation(this); 9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /*package*/ void notifyNewRingingConnection(Connection c) { 9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* we'd love it if this was package-scoped*/ 9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.notifyNewRingingConnectionP(c); 9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /*package*/ void notifyDisconnect(Connection cn) { 9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.notifyResult(cn); 9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyUnknownConnection() { 9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.notifyResult(this); 9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 950cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEmergencyCall() { 9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mCT.isInEmergencyCall(); 9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 955cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEcm() { 9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mIsPhoneInEcmState; 9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void sendEmergencyCallbackModeChange(){ 9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //Send an Intent 9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED); 9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville intent.putExtra(PhoneConstants.PHONE_IN_ECM_STATE, mIsPhoneInEcmState); 964cbbf6deee30d702e398939f4bb464f5e821f5e6cDianne Hackborn ActivityManagerNative.broadcastStickyIntent(intent,null,UserHandle.USER_ALL); 96599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "sendEmergencyCallbackModeChange"); 9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void exitEmergencyCallbackMode() { 9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mWakeLock.isHeld()) { 9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLock.release(); 9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Send a message which will invoke handleExitEmergencyCallbackMode 97422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void handleEnterEmergencyCallbackMode(Message msg) { 9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (DBG) { 97999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "handleEnterEmergencyCallbackMode,mIsPhoneInEcmState= " 9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + mIsPhoneInEcmState); 9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // if phone is not in Ecm mode, and it's changed to Ecm mode 9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mIsPhoneInEcmState == false) { 9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsPhoneInEcmState = true; 9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // notify change 9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendEmergencyCallbackModeChange(); 9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "true"); 9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Post this runnable so we will automatically exit 9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // if no one invokes exitEmergencyCallbackMode() directly. 9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville long delayInMillis = SystemProperties.getLong( 9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // We don't want to go to sleep while in Ecm 9950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mWakeLock.acquire(); 9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void handleExitEmergencyCallbackMode(Message msg) { 10000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = (AsyncResult)msg.obj; 10010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (DBG) { 100299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "handleExitEmergencyCallbackMode,ar.exception , mIsPhoneInEcmState " 10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + ar.exception + mIsPhoneInEcmState); 10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Remove pending exit Ecm runnable, if any 10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville removeCallbacks(mExitEcmRunnable); 10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mEcmExitRespRegistrant != null) { 10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEcmExitRespRegistrant.notifyRegistrant(ar); 10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // if exiting ecm success 10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ar.exception == null) { 10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mIsPhoneInEcmState) { 10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsPhoneInEcmState = false; 10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // send an Intent 10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendEmergencyCallbackModeChange(); 10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Re-initiate data connection 1020454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker.setInternalDataEnabled(true); 10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Handle to cancel or restart Ecm timer in emergency call back mode 10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * if action is CANCEL_ECM_TIMER, cancel Ecm timer and notify apps the timer is canceled; 10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * otherwise, restart Ecm timer and notify apps the timer is restarted. 10280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void handleTimerInEmergencyCallbackMode(int action) { 10300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch(action) { 10310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case CANCEL_ECM_TIMER: 10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville removeCallbacks(mExitEcmRunnable); 10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEcmTimerResetRegistrants.notifyResult(Boolean.TRUE); 10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case RESTART_ECM_TIMER: 10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville long delayInMillis = SystemProperties.getLong( 10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEcmTimerResetRegistrants.notifyResult(Boolean.FALSE); 10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 104299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "handleTimerInEmergencyCallbackMode, unsupported action " + action); 10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Registration point for Ecm timer reset 10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param h handler to notify 10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param what User-defined message code 10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param obj placed in Message.obj 10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1052cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEcmTimerResetRegistrants.addUnique(h, what, obj); 10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1057cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForEcmTimerReset(Handler h) { 10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEcmTimerResetRegistrants.remove(h); 10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void handleMessage(Message msg) { 10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message onComplete; 10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10675e2000b856a7959609e8f15148a3584ec372f865Wink Saville if (!mIsTheCurrentActivePhone) { 10685e2000b856a7959609e8f15148a3584ec372f865Wink Saville Rlog.e(LOG_TAG, "Received message " + msg + 10695e2000b856a7959609e8f15148a3584ec372f865Wink Saville "[" + msg.what + "] while being destroyed. Ignoring."); 10705e2000b856a7959609e8f15148a3584ec372f865Wink Saville return; 10715e2000b856a7959609e8f15148a3584ec372f865Wink Saville } 10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch(msg.what) { 10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_RADIO_AVAILABLE: { 107422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getBasebandVersion(obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE)); 10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 107622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getDeviceIdentity(obtainMessage(EVENT_GET_DEVICE_IDENTITY_DONE)); 10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_GET_BASEBAND_VERSION_DONE:{ 10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult)msg.obj; 10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ar.exception != null) { 10840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 108799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "Baseband version: " + ar.result); 10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_BASEBAND_VERSION, (String)ar.result); 10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_GET_DEVICE_IDENTITY_DONE:{ 10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult)msg.obj; 10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ar.exception != null) { 10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String[] respId = (String[])ar.result; 10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mImei = respId[0]; 11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mImeiSv = respId[1]; 11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEsn = respId[2]; 11020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMeid = respId[3]; 11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_EMERGENCY_CALLBACK_MODE_ENTER:{ 11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville handleEnterEmergencyCallbackMode(msg); 11080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_ICC_RECORD_EVENTS: 11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult)msg.obj; 11130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville processIccRecordEvents((Integer)ar.result); 11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE:{ 11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville handleExitEmergencyCallbackMode(msg); 11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_RUIM_RECORDS_LOADED:{ 112299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received"); 11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville updateCurrentCarrierInProvider(); 11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE:{ 112899c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "Event EVENT_RADIO_OFF_OR_NOT_AVAILABLE Received"); 11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_RADIO_ON:{ 113399c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "Event EVENT_RADIO_ON Received"); 11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville handleCdmaSubscriptionSource(mCdmaSSM.getCdmaSubscriptionSource()); 11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED:{ 113999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED"); 11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville handleCdmaSubscriptionSource(mCdmaSSM.getCdmaSubscriptionSource()); 11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_SSN:{ 114599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "Event EVENT_SSN Received"); 11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_REGISTERED_TO_NETWORK:{ 115099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "Event EVENT_REGISTERED_TO_NETWORK Received"); 11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_NV_READY:{ 115599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "Event EVENT_NV_READY Received"); 11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville prepareEri(); 11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_SET_VM_NUMBER_DONE:{ 11610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult)msg.obj; 11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (IccException.class.isInstance(ar.exception)) { 11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville storeVoiceMailNumber(mVmNumber); 11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar.exception = null; 11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onComplete = (Message) ar.userObj; 11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (onComplete != null) { 11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onComplete.sendToTarget(); 11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 11730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default:{ 11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.handleMessage(msg); 11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1180e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka @Override 1181e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected void onUpdateIccAvailability() { 1182e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka if (mUiccController == null ) { 1183e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return; 1184e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1185e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 1186e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka UiccCardApplication newUiccApplication = 1187e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccController.getUiccCardApplication(UiccController.APP_FAM_3GPP2); 1188e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 1189df53e221838a87a2d5d5175c1b8372e8515a822cJake Hamby if (newUiccApplication == null) { 1190df53e221838a87a2d5d5175c1b8372e8515a822cJake Hamby log("can't find 3GPP2 application; trying APP_FAM_3GPP"); 1191df53e221838a87a2d5d5175c1b8372e8515a822cJake Hamby newUiccApplication = mUiccController 1192df53e221838a87a2d5d5175c1b8372e8515a822cJake Hamby .getUiccCardApplication(UiccController.APP_FAM_3GPP); 1193df53e221838a87a2d5d5175c1b8372e8515a822cJake Hamby } 1194df53e221838a87a2d5d5175c1b8372e8515a822cJake Hamby 1195e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka UiccCardApplication app = mUiccApplication.get(); 1196e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka if (app != newUiccApplication) { 1197e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka if (app != null) { 1198e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka log("Removing stale icc objects."); 1199e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka if (mIccRecords.get() != null) { 1200e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka unregisterForRuimRecordEvents(); 1201e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mRuimPhoneBookInterfaceManager.updateIccRecords(null); 1202e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1203e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mIccRecords.set(null); 1204e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccApplication.set(null); 1205e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1206e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka if (newUiccApplication != null) { 1207e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka log("New Uicc application found"); 1208e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccApplication.set(newUiccApplication); 1209e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mIccRecords.set(newUiccApplication.getIccRecords()); 1210e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka registerForRuimRecordEvents(); 1211e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mRuimPhoneBookInterfaceManager.updateIccRecords(mIccRecords.get()); 1212e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1213e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1214e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1215e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 12160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void processIccRecordEvents(int eventCode) { 12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (eventCode) { 12180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case RuimRecords.EVENT_MWI: 12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyMessageWaitingIndicator(); 12200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 12210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 122399c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG,"Unknown icc records event code " + eventCode); 12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Handles the call to get the subscription source 12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param newSubscriptionSource holds the new CDMA subscription source value 12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 12330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void handleCdmaSubscriptionSource(int newSubscriptionSource) { 12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (newSubscriptionSource != mCdmaSubscriptionSource) { 12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCdmaSubscriptionSource = newSubscriptionSource; 12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (newSubscriptionSource == CDMA_SUBSCRIPTION_NV) { 12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // NV is ready when subscription source is NV 12380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendMessage(obtainMessage(EVENT_NV_READY)); 12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the PhoneSubInfo of the CDMAPhone 12450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1246cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneSubInfo getPhoneSubInfo() { 12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSubInfo; 12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone 12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1254cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager() { 12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mRuimPhoneBookInterfaceManager; 12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForEriFileLoaded(Handler h, int what, Object obj) { 12600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Registrant r = new Registrant (h, what, obj); 12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEriFileLoadedRegistrants.add(r); 12620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForEriFileLoaded(Handler h) { 12650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEriFileLoadedRegistrants.remove(h); 12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // override for allowing access from other classes of this package 12690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@inheritDoc} 12710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1272cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public final void setSystemProperty(String property, String value) { 12740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.setSystemProperty(property, value); 12750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Activate or deactivate cell broadcast SMS. 12790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param activate 0 = activate, 1 = deactivate 12810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param response Callback message is empty on completion 12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1283cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 128599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "[CDMAPhone] activateCellBroadcastSms() is obsolete; use SmsManager"); 12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville response.sendToTarget(); 12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Query the current configuration of cdma cell broadcast SMS. 12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param response Callback message is empty on completion 12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1294cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getCellBroadcastSmsConfig(Message response) { 129699c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "[CDMAPhone] getCellBroadcastSmsConfig() is obsolete; use SmsManager"); 12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville response.sendToTarget(); 12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Configure cdma cell broadcast SMS. 13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param response Callback message is empty on completion 13040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1305cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) { 130799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "[CDMAPhone] setCellBroadcastSmsConfig() is obsolete; use SmsManager"); 13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville response.sendToTarget(); 13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if OTA Service Provisioning needs to be performed. 13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean needsOtaServiceProvisioning() { 13160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSST.getOtasp() != ServiceStateTracker.OTASP_NOT_NEEDED; 13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final String IS683A_FEATURE_CODE = "*228"; 13200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683A_FEATURE_CODE_NUM_DIGITS = 4; 13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683A_SYS_SEL_CODE_NUM_DIGITS = 2; 13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683A_SYS_SEL_CODE_OFFSET = 4; 13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_800MHZ_A_BAND = 0; 13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_800MHZ_B_BAND = 1; 13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_1900MHZ_A_BLOCK = 2; 13270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_1900MHZ_B_BLOCK = 3; 13280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_1900MHZ_C_BLOCK = 4; 13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_1900MHZ_D_BLOCK = 5; 13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_1900MHZ_E_BLOCK = 6; 13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int IS683_CONST_1900MHZ_F_BLOCK = 7; 13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final int INVALID_SYSTEM_SELECTION_CODE = -1; 13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static boolean isIs683OtaSpDialStr(String dialStr) { 13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int sysSelCodeInt; 13360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isOtaspDialString = false; 13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int dialStrLen = dialStr.length(); 13380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dialStrLen == IS683A_FEATURE_CODE_NUM_DIGITS) { 13400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dialStr.equals(IS683A_FEATURE_CODE)) { 13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isOtaspDialString = true; 13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (sysSelCodeInt) { 13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_800MHZ_A_BAND: 13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_800MHZ_B_BAND: 13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_1900MHZ_A_BLOCK: 13490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_1900MHZ_B_BLOCK: 13500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_1900MHZ_C_BLOCK: 13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_1900MHZ_D_BLOCK: 13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_1900MHZ_E_BLOCK: 13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case IS683_CONST_1900MHZ_F_BLOCK: 13540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isOtaspDialString = true; 13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 13560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isOtaspDialString; 13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This function extracts the system selection code from the dial string. 13640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static int extractSelCodeFromOtaSpNum(String dialStr) { 13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int dialStrLen = dialStr.length(); 13670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int sysSelCodeInt = INVALID_SYSTEM_SELECTION_CODE; 13680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((dialStr.regionMatches(0, IS683A_FEATURE_CODE, 13700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 0, IS683A_FEATURE_CODE_NUM_DIGITS)) && 13710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (dialStrLen >= (IS683A_FEATURE_CODE_NUM_DIGITS + 13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IS683A_SYS_SEL_CODE_NUM_DIGITS))) { 13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Since we checked the condition above, the system selection code 13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // extracted from dialStr will not cause any exception 13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sysSelCodeInt = Integer.parseInt ( 13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dialStr.substring (IS683A_FEATURE_CODE_NUM_DIGITS, 13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IS683A_FEATURE_CODE_NUM_DIGITS + IS683A_SYS_SEL_CODE_NUM_DIGITS)); 13780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 137999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "extractSelCodeFromOtaSpNum " + sysSelCodeInt); 13800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sysSelCodeInt; 13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This function checks if the system selection code extracted from 13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the dial string "sysSelCodeInt' is the system selection code specified 13860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * in the carrier ota sp number schema "sch". 13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static boolean 13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkOtaSpNumBasedOnSysSelCode (int sysSelCodeInt, String sch[]) { 13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isOtaSpNum = false; 13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 13920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Get how many number of system selection code ranges 1393cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville int selRc = Integer.parseInt(sch[1]); 13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < selRc; i++) { 13950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!TextUtils.isEmpty(sch[i+2]) && !TextUtils.isEmpty(sch[i+3])) { 1396cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville int selMin = Integer.parseInt(sch[i+2]); 1397cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville int selMax = Integer.parseInt(sch[i+3]); 13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Check if the selection code extracted from the dial string falls 13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // within any of the range pairs specified in the schema. 14000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((sysSelCodeInt >= selMin) && (sysSelCodeInt <= selMax)) { 14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isOtaSpNum = true; 14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (NumberFormatException ex) { 14070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // If the carrier ota sp number schema is not correct, we still allow dial 14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // and only log the error: 140999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "checkOtaSpNumBasedOnSysSelCode, error", ex); 14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isOtaSpNum; 14120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Define the pattern/format for carrier specified OTASP number schema. 14150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // It separates by comma and/or whitespace. 14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static Pattern pOtaSpNumSchema = Pattern.compile("[,\\s]+"); 14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * The following function checks if a dial string is a carrier specified 14200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * OTASP number or not by checking against the OTASP number schema stored 14210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * in PROPERTY_OTASP_NUM_SCHEMA. 14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Currently, there are 2 schemas for carriers to specify the OTASP number: 14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1) Use system selection code: 14250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * The schema is: 14260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * SELC,the # of code pairs,min1,max1,min2,max2,... 14270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * e.g "SELC,3,10,20,30,40,60,70" indicates that there are 3 pairs of 14280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * selection codes, and they are {10,20}, {30,40} and {60,70} respectively. 14290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2) Use feature code: 14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * The schema is: 14320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * "FC,length of feature code,feature code". 14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * e.g "FC,2,*2" indicates that the length of the feature code is 2, 14340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * and the code itself is "*2". 14350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean isCarrierOtaSpNum(String dialStr) { 14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isOtaSpNum = false; 14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sysSelCodeInt == INVALID_SYSTEM_SELECTION_CODE) { 14400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isOtaSpNum; 14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // mCarrierOtaSpNumSchema is retrieved from PROPERTY_OTASP_NUM_SCHEMA: 14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!TextUtils.isEmpty(mCarrierOtaSpNumSchema)) { 14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Matcher m = pOtaSpNumSchema.matcher(mCarrierOtaSpNumSchema); 14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (DBG) { 144699c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "isCarrierOtaSpNum,schema" + mCarrierOtaSpNumSchema); 14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (m.find()) { 14500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String sch[] = pOtaSpNumSchema.split(mCarrierOtaSpNumSchema); 14510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // If carrier uses system selection code mechanism 14520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("SELC")) { 14530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sysSelCodeInt!=INVALID_SYSTEM_SELECTION_CODE) { 14540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isOtaSpNum=checkOtaSpNumBasedOnSysSelCode(sysSelCodeInt,sch); 14550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 14560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (DBG) { 145799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "isCarrierOtaSpNum,sysSelCodeInt is invalid"); 14580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("FC")) { 1461cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville int fcLen = Integer.parseInt(sch[1]); 1462cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville String fc = sch[2]; 14630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dialStr.regionMatches(0,fc,0,fcLen)) { 14640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isOtaSpNum = true; 14650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 146699c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "isCarrierOtaSpNum,not otasp number"); 14670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 14690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (DBG) { 147099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "isCarrierOtaSpNum,ota schema not supported" + sch[0]); 14710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 14740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (DBG) { 147599c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern not right" + 14760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCarrierOtaSpNumSchema); 14770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 148099c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern empty"); 14810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isOtaSpNum; 14830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * isOTASPNumber: checks a given number against the IS-683A OTASP dial string and carrier 14870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * OTASP dial string. 14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 14890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param dialStr the number to look up. 14900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the number is in IS-683A OTASP dial string or carrier OTASP dial string 14910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 14920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isOtaSpNumber(String dialStr){ 14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isOtaSpNum = false; 14950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String dialableStr = PhoneNumberUtils.extractNetworkPortionAlt(dialStr); 14960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (dialableStr != null) { 14970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isOtaSpNum = isIs683OtaSpDialStr(dialableStr); 14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (isOtaSpNum == false) { 14990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville isOtaSpNum = isCarrierOtaSpNum(dialableStr); 15000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 150299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville if (DBG) Rlog.d(LOG_TAG, "isOtaSpNumber " + isOtaSpNum); 15030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isOtaSpNum; 15040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 15070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconIndex() { 15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return getServiceState().getCdmaEriIconIndex(); 15090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI icon mode, 15130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 0 - ON 15140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1 - FLASHING 15150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 15170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconMode() { 15180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return getServiceState().getCdmaEriIconMode(); 15190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI text, 15230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 15250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaEriText() { 15260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int roamInd = getServiceState().getCdmaRoamingIndicator(); 15270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); 15280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mEriManager.getCdmaEriText(roamInd, defRoamInd); 15290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Store the voicemail number in preferences 15330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void storeVoiceMailNumber(String number) { 15350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Update the preference value of voicemail number 15360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 15370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences.Editor editor = sp.edit(); 15380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.putString(VM_NUMBER_CDMA, number); 15390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.apply(); 15400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Sets PROPERTY_ICC_OPERATOR_ISO_COUNTRY property 15440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 15450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void setIsoCountryProperty(String operatorNumeric) { 15470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (TextUtils.isEmpty(operatorNumeric)) { 1548ce06370fc58f59abda3cb072326e9425da3d755dWink Saville log("setIsoCountryProperty: clear 'gsm.sim.operator.iso-country'"); 15490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, ""); 15500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 15510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String iso = ""; 15520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 15530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iso = MccTable.countryCodeForMcc(Integer.parseInt( 15540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville operatorNumeric.substring(0,3))); 15550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (NumberFormatException ex) { 1556ce06370fc58f59abda3cb072326e9425da3d755dWink Saville loge("setIsoCountryProperty: countryCodeForMcc error", ex); 15570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (StringIndexOutOfBoundsException ex) { 1558ce06370fc58f59abda3cb072326e9425da3d755dWink Saville loge("setIsoCountryProperty: countryCodeForMcc error", ex); 15590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1561ce06370fc58f59abda3cb072326e9425da3d755dWink Saville log("setIsoCountryProperty: set 'gsm.sim.operator.iso-country' to iso=" + iso); 15620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso); 15630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Sets the "current" field in the telephony provider according to the 15680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * build-time operator numeric property 15690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 15700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true for success; false otherwise. 15710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean updateCurrentCarrierInProvider(String operatorNumeric) { 1573ce06370fc58f59abda3cb072326e9425da3d755dWink Saville log("CDMAPhone: updateCurrentCarrierInProvider called"); 15740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!TextUtils.isEmpty(operatorNumeric)) { 15750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 15760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"); 15770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ContentValues map = new ContentValues(); 15780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville map.put(Telephony.Carriers.NUMERIC, operatorNumeric); 15790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville log("updateCurrentCarrierInProvider from system: numeric=" + operatorNumeric); 15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getContext().getContentResolver().insert(uri, map); 15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Updates MCC MNC device configuration information 1583b0b637dbf2a67c0e7eee917c0809f1cc54983986Robert Greenwalt MccTable.updateMccMncConfiguration(mContext, operatorNumeric, false); 15840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 15860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (SQLException e) { 158799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.e(LOG_TAG, "Can't store current operator", e); 15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 15910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Sets the "current" field in the telephony provider according to the SIM's operator. 15950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Implemented in {@link CDMALTEPhone} for CDMA/LTE devices. 15960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 15970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true for success; false otherwise. 15980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 15990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean updateCurrentCarrierInProvider() { 16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void prepareEri() { 16040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEriManager.loadEriFile(); 16050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if(mEriManager.isEriFileLoaded()) { 16060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // when the ERI file is loaded 16070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville log("ERI read, notify registrants"); 16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEriFileLoadedRegistrants.notifyRegistrants(); 16090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isEriFileLoaded() { 16130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mEriManager.isEriFileLoaded(); 16140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1616e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected void registerForRuimRecordEvents() { 1617e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1618e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka if (r == null) { 1619e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return; 1620e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1621e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka r.registerForRecordsEvents(this, EVENT_ICC_RECORD_EVENTS, null); 1622e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka r.registerForRecordsLoaded(this, EVENT_RUIM_RECORDS_LOADED, null); 16230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1625e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected void unregisterForRuimRecordEvents() { 1626e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1627e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka if (r == null) { 1628e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return; 1629e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 1630e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka r.unregisterForRecordsEvents(this); 1631e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka r.unregisterForRecordsLoaded(this); 16320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 16340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void log(String s) { 16350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (DBG) 1636cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville Rlog.d(LOG_TAG, s); 16370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1639ce06370fc58f59abda3cb072326e9425da3d755dWink Saville protected void loge(String s, Exception e) { 1640ce06370fc58f59abda3cb072326e9425da3d755dWink Saville if (DBG) 1641ce06370fc58f59abda3cb072326e9425da3d755dWink Saville Rlog.e(LOG_TAG, s, e); 1642ce06370fc58f59abda3cb072326e9425da3d755dWink Saville } 1643ce06370fc58f59abda3cb072326e9425da3d755dWink Saville 16440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 16450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 16460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println("CDMAPhone extends:"); 16470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.dump(fd, pw, args); 16480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mVmNumber=" + mVmNumber); 16490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCT=" + mCT); 16500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSST=" + mSST); 16510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCdmaSSM=" + mCdmaSSM); 16520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mPendingMmis=" + mPendingMmis); 16530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mRuimPhoneBookInterfaceManager=" + mRuimPhoneBookInterfaceManager); 16540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCdmaSubscriptionSource=" + mCdmaSubscriptionSource); 16550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSubInfo=" + mSubInfo); 16560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mEriManager=" + mEriManager); 16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mWakeLock=" + mWakeLock); 16580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mIsPhoneInEcmState=" + mIsPhoneInEcmState); 16590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (VDBG) pw.println(" mImei=" + mImei); 16600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (VDBG) pw.println(" mImeiSv=" + mImeiSv); 16610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (VDBG) pw.println(" mEsn=" + mEsn); 16620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (VDBG) pw.println(" mMeid=" + mMeid); 16630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCarrierOtaSpNumSchema=" + mCarrierOtaSpNumSchema); 16640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getCdmaEriIconIndex()=" + getCdmaEriIconIndex()); 16650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getCdmaEriIconMode()=" + getCdmaEriIconMode()); 16660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getCdmaEriText()=" + getCdmaEriText()); 16670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isMinInfoReady()=" + isMinInfoReady()); 16680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isCspPlmnEnabled()=" + isCspPlmnEnabled()); 16690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 1671