1767a662ecde33c3979bf02b793d392aca0403162Wink Saville/* 2767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Copyright (C) 2006 The Android Open Source Project 3767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 4767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5767a662ecde33c3979bf02b793d392aca0403162Wink Saville * you may not use this file except in compliance with the License. 6767a662ecde33c3979bf02b793d392aca0403162Wink Saville * You may obtain a copy of the License at 7767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 8767a662ecde33c3979bf02b793d392aca0403162Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 10767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Unless required by applicable law or agreed to in writing, software 11767a662ecde33c3979bf02b793d392aca0403162Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12767a662ecde33c3979bf02b793d392aca0403162Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See the License for the specific language governing permissions and 14767a662ecde33c3979bf02b793d392aca0403162Wink Saville * limitations under the License. 15767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 16767a662ecde33c3979bf02b793d392aca0403162Wink Saville 17767a662ecde33c3979bf02b793d392aca0403162Wink Savillepackage com.android.internal.telephony.cdma; 18767a662ecde33c3979bf02b793d392aca0403162Wink Saville 19e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.app.ActivityManagerNative; 20142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.content.ContentValues; 21b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport android.content.Context; 22e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.content.Intent; 23ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.content.SharedPreferences; 24142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.database.SQLException; 25142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.net.Uri; 26767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.AsyncResult; 27767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Handler; 28767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Message; 2995a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager; 3095a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager.WakeLock; 31767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Registrant; 32767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.RegistrantList; 33767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.SystemProperties; 34ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.preference.PreferenceManager; 35142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.provider.Telephony; 36767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.CellLocation; 37767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.PhoneNumberUtils; 38767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.ServiceState; 39e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 40767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.text.TextUtils; 41767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.util.Log; 42767a662ecde33c3979bf02b793d392aca0403162Wink Saville 431c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganeshimport com.android.internal.telephony.Call; 44767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CallStateException; 45b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport com.android.internal.telephony.CallTracker; 4690cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalinkimport com.android.internal.telephony.CommandException; 47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CommandsInterface; 48767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Connection; 49e7af59b375f08b13d964816fc52048e670764bdbAlex Yakavenkaimport com.android.internal.telephony.IccCard; 50ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport com.android.internal.telephony.IccException; 51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccFileHandler; 52767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 53767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 54b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport com.android.internal.telephony.MccTable; 55767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.MmiCode; 563caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwaltimport com.android.internal.telephony.OperatorInfo; 57767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Phone; 58767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneBase; 59767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneNotifier; 60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneProxy; 61767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneSubInfo; 62fd2d01302781af91d77557a99874111a4fee8365Wink Savilleimport com.android.internal.telephony.ServiceStateTracker; 63e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport com.android.internal.telephony.TelephonyIntents; 649bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport com.android.internal.telephony.TelephonyProperties; 6524440cf8a9431291bdcaa77b418e6c4715932507Naveen Kallaimport com.android.internal.telephony.UUSInfo; 66b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport com.android.internal.telephony.cat.CatService; 6722c1700378667c1f25974b134cc201663ac2c29eWink Savilleimport com.android.internal.telephony.uicc.UiccController; 68142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 6930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Savilleimport java.io.FileDescriptor; 7030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Savilleimport java.io.PrintWriter; 71e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kallaimport java.util.ArrayList; 72767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.util.List; 73e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Matcher; 74e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Pattern; 75e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 76b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA; 77b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY; 78b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hambyimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC; 79b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby 80767a662ecde33c3979bf02b793d392aca0403162Wink Saville/** 81767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 82767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 83767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic class CDMAPhone extends PhoneBase { 84767a662ecde33c3979bf02b793d392aca0403162Wink Saville static final String LOG_TAG = "CDMA"; 85e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final boolean DBG = true; 8630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville private static final boolean VDBG = false; /* STOP SHIP if true */ 87767a662ecde33c3979bf02b793d392aca0403162Wink Saville 8822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // Default Emergency Callback Mode exit timer 89019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang private static final int DEFAULT_ECM_EXIT_TIMER_VALUE = 300000; 9095a1d1a89e383dab893750638c2393dec54833ffWink Saville 91ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause static final String VM_COUNT_CDMA = "vm_count_key_cdma"; 92ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private static final String VM_NUMBER_CDMA = "vm_number_key_cdma"; 93ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private String mVmNumber = null; 9422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 9595a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int RESTART_ECM_TIMER = 0; // restart Ecm timer 9695a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int CANCEL_ECM_TIMER = 1; // cancel Ecm timer 9795a1d1a89e383dab893750638c2393dec54833ffWink Saville 98a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Instance Variables 99767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaCallTracker mCT; 100767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaServiceStateTracker mSST; 101fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla CdmaSubscriptionSourceManager mCdmaSSM; 102e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla ArrayList <CdmaMmiCode> mPendingMmis = new ArrayList<CdmaMmiCode>(); 103767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimPhoneBookInterfaceManager mRuimPhoneBookInterfaceManager; 104767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimSmsInterfaceManager mRuimSmsInterfaceManager; 105fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla int mCdmaSubscriptionSource = CdmaSubscriptionSourceManager.SUBSCRIPTION_SOURCE_UNKNOWN; 106767a662ecde33c3979bf02b793d392aca0403162Wink Saville PhoneSubInfo mSubInfo; 107e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville EriManager mEriManager; 10895a1d1a89e383dab893750638c2393dec54833ffWink Saville WakeLock mWakeLock; 109a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville 110e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // mEriFileLoadedRegistrants are informed after the ERI text has been loaded 111b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private final RegistrantList mEriFileLoadedRegistrants = new RegistrantList(); 112dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 11395a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmTimerResetRegistrants are informed after Ecm timer is canceled or re-started 114b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private final RegistrantList mEcmTimerResetRegistrants = new RegistrantList(); 11595a1d1a89e383dab893750638c2393dec54833ffWink Saville 11695a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmExitRespRegistrant is informed after the phone has been exited 117dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //the emergency callback mode 118dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //keep track of if phone is in emergency callback mode 11995a1d1a89e383dab893750638c2393dec54833ffWink Saville private boolean mIsPhoneInEcmState; 12095a1d1a89e383dab893750638c2393dec54833ffWink Saville private Registrant mEcmExitRespRegistrant; 1212ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang protected String mImei; 1222ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang protected String mImeiSv; 123767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mEsn; 124767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mMeid; 125e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // string to define how the carrier specifies its own ota sp number 126e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private String mCarrierOtaSpNumSchema; 1272563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 12895a1d1a89e383dab893750638c2393dec54833ffWink Saville // A runnable which is used to automatically exit from Ecm after a period of time. 129dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private Runnable mExitEcmRunnable = new Runnable() { 130b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 131dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void run() { 132dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville exitEmergencyCallbackMode(); 133dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 134dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville }; 135767a662ecde33c3979bf02b793d392aca0403162Wink Saville 136767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant mPostDialHandler; 137767a662ecde33c3979bf02b793d392aca0403162Wink Saville 138fe629782f33a07827c69841fce9964bd90ff152aWink Saville static String PROPERTY_CDMA_HOME_OPERATOR_NUMERIC = "ro.cdma.home.operator.numeric"; 139767a662ecde33c3979bf02b793d392aca0403162Wink Saville 140a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Constructors 141767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) { 1429d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville super(notifier, context, ci, false); 1431f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville initSstIcc(); 1449d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville init(context, notifier); 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 146767a662ecde33c3979bf02b793d392aca0403162Wink Saville 147767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier, 148767a662ecde33c3979bf02b793d392aca0403162Wink Saville boolean unitTestMode) { 149a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super(notifier, context, ci, unitTestMode); 1501f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville initSstIcc(); 1519d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville init(context, notifier); 1529d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1541f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville protected void initSstIcc() { 155ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccCard.set(UiccController.getInstance(this).getIccCard()); 156ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords = mIccCard.get().getIccRecords(); 157ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville // CdmaServiceStateTracker registers with IccCard to know 158ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville // when the Ruim card is ready. So create mIccCard before the ServiceStateTracker 159fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla mSST = new CdmaServiceStateTracker(this); 16075acebd02d2b3478d98cc8da98fa9229c53c32d5Ramesh Sudini } 16175acebd02d2b3478d98cc8da98fa9229c53c32d5Ramesh Sudini 1629d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville protected void init(Context context, PhoneNotifier notifier) { 1633cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink mCM.setPhoneType(Phone.PHONE_TYPE_CDMA); 164767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT = new CdmaCallTracker(this); 165fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla mCdmaSSM = CdmaSubscriptionSourceManager.getInstance(context, mCM, this, 166fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED, null); 167b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSMS = new CdmaSMSDispatcher(this, mSmsStorageMonitor, mSmsUsageMonitor); 16863edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker = new CdmaDataConnectionTracker (this); 169767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager = new RuimPhoneBookInterfaceManager(this); 170bb3716332321e22537a5015be13e2229fb9b90bcJake Hamby mRuimSmsInterfaceManager = new RuimSmsInterfaceManager(this, mSMS); 171767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo = new PhoneSubInfo(this); 172e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager = new EriManager(this, context, EriManager.ERI_FROM_XML); 173767a662ecde33c3979bf02b793d392aca0403162Wink Saville 174a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); 175ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville registerForRuimRecordEvents(); 176a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 177a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOn(this, EVENT_RADIO_ON, null); 178a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setOnSuppServiceNotification(this, EVENT_SSN, null); 17988d852969a0ffd2ce228defe96ecae0173574f55Robert Greenwalt mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); 180a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setEmergencyCallbackMode(this, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null); 181e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 18295a1d1a89e383dab893750638c2393dec54833ffWink Saville PowerManager pm 18395a1d1a89e383dab893750638c2393dec54833ffWink Saville = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 18495a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,LOG_TAG); 185767a662ecde33c3979bf02b793d392aca0403162Wink Saville 186767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Change the system setting 1879bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE, 188b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby Integer.toString(Phone.PHONE_TYPE_CDMA)); 189dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 19022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // This is needed to handle phone process crashes 19122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 19295a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = inEcm.equals("true"); 1939b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang if (mIsPhoneInEcmState) { 1949b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang // Send a message which will invoke handleExitEmergencyCallbackMode 1959b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang mCM.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 1969b62851c3fbcd7fb61ead7583dcae33e411232d0Libin Tang } 197ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 198e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // get the string that specifies the carrier OTA Sp number 199e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema = SystemProperties.get( 200e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li TelephonyProperties.PROPERTY_OTASP_NUM_SCHEMA,""); 201e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 202142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator alpha property by retrieving from build-time system property 203142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String operatorAlpha = SystemProperties.get("ro.cdma.home.operator.alpha"); 204142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, operatorAlpha); 205142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 206142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator numeric property by retrieving from build-time system property 207fe629782f33a07827c69841fce9964bd90ff152aWink Saville String operatorNumeric = SystemProperties.get(PROPERTY_CDMA_HOME_OPERATOR_NUMERIC); 208431a4a3b97f494c23e3dc7e781c2efcea63f3a7eWink Saville log("CDMAPhone: init set 'gsm.sim.operator.numeric' to operator='" + 209431a4a3b97f494c23e3dc7e781c2efcea63f3a7eWink Saville operatorNumeric + "'"); 210142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_NUMERIC, operatorNumeric); 211142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 212142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets iso country property by retrieving from build-time system property 213142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setIsoCountryProperty(operatorNumeric); 214142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 215142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets current entry in the telephony carrier table 216142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville updateCurrentCarrierInProvider(operatorNumeric); 217142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 218ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Notify voicemails. 219ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause notifier.notifyMessageWaitingChanged(this); 220767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 221767a662ecde33c3979bf02b793d392aca0403162Wink Saville 222b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void dispose() { 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 225a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.dispose(); 2261f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville log("dispose"); 227767a662ecde33c3979bf02b793d392aca0403162Wink Saville 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Unregister from all former registered events 22980198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka unregisterForRuimRecordEvents(); 230a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForAvailable(this); //EVENT_RADIO_AVAILABLE 231a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOffOrNotAvailable(this); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE 232a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOn(this); //EVENT_RADIO_ON 23388d852969a0ffd2ce228defe96ecae0173574f55Robert Greenwalt mSST.unregisterForNetworkAttached(this); //EVENT_REGISTERED_TO_NETWORK 234a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unSetOnSuppServiceNotification(this); 235f3ee6f87a344b185d8bde12c77440c9020378510Banavathu, Srinivas Naik removeCallbacks(mExitEcmRunnable); 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville 237e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mPendingMmis.clear(); 238e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 239767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Force all referenced classes to unregister their former registered events 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.dispose(); 24163edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.dispose(); 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.dispose(); 243fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla mCdmaSSM.dispose(this); 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSMS.dispose(); 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager.dispose(); 246767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimSmsInterfaceManager.dispose(); 247767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo.dispose(); 248e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager.dispose(); 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 251767a662ecde33c3979bf02b793d392aca0403162Wink Saville 252b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 253767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void removeReferences() { 254b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby log("removeReferences"); 255b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mRuimPhoneBookInterfaceManager = null; 256b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mRuimSmsInterfaceManager = null; 257b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSubInfo = null; 258b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mCT = null; 259b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSST = null; 260b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mEriManager = null; 261b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mExitEcmRunnable = null; 262ce2dcb6f1358398eef9ccffccd0c0a309238f7a4Alex Yakavenka super.removeReferences(); 263767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 264767a662ecde33c3979bf02b793d392aca0403162Wink Saville 265b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 266767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void finalize() { 267e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if(DBG) Log.d(LOG_TAG, "CDMAPhone finalized"); 26895a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 26995a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "UNEXPECTED; mWakeLock is held when finalizing."); 27095a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 27195a1d1a89e383dab893750638c2393dec54833ffWink Saville } 272767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 273767a662ecde33c3979bf02b793d392aca0403162Wink Saville 274767a662ecde33c3979bf02b793d392aca0403162Wink Saville public ServiceState getServiceState() { 275767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.ss; 276767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 277767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2789d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville public CallTracker getCallTracker() { 2799d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville return mCT; 2809d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 2819d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville 2823cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public Phone.State getState() { 283767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.state; 284767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 285767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2869d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville public ServiceStateTracker getServiceStateTracker() { 2879d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville return mSST; 2889d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 2899d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville 2903cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public String getPhoneName() { 291767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA"; 292767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 293767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2943cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public int getPhoneType() { 2953cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink return Phone.PHONE_TYPE_CDMA; 2963cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink } 2973cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink 298767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canTransfer() { 299767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canTransfer: not possible in CDMA"); 300767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 301767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 302767a662ecde33c3979bf02b793d392aca0403162Wink Saville 3033cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public CdmaCall getRingingCall() { 304767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.ringingCall; 305767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville 307767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setMute(boolean muted) { 308767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.setMute(muted); 309767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 310767a662ecde33c3979bf02b793d392aca0403162Wink Saville 311767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getMute() { 312767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.getMute(); 313767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 314767a662ecde33c3979bf02b793d392aca0403162Wink Saville 315767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void conference() throws CallStateException { 316767a662ecde33c3979bf02b793d392aca0403162Wink Saville // three way calls in CDMA will be handled by feature codes 317767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "conference: not possible in CDMA"); 318767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 319767a662ecde33c3979bf02b793d392aca0403162Wink Saville 320767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.setPreferredVoicePrivacy(enable, onComplete); 322767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 323767a662ecde33c3979bf02b793d392aca0403162Wink Saville 324767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 325767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.getPreferredVoicePrivacy(onComplete); 326767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 327767a662ecde33c3979bf02b793d392aca0403162Wink Saville 328767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void clearDisconnected() { 329767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.clearDisconnected(); 330767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 331767a662ecde33c3979bf02b793d392aca0403162Wink Saville 332767a662ecde33c3979bf02b793d392aca0403162Wink Saville public DataActivityState getDataActivityState() { 333767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataActivityState ret = DataActivityState.NONE; 334767a662ecde33c3979bf02b793d392aca0403162Wink Saville 335a4e82851e9c8a75dfb371403c500e3b3cf3e4565Robert Greenwalt if (mSST.getCurrentDataConnectionState() == ServiceState.STATE_IN_SERVICE) { 336767a662ecde33c3979bf02b793d392aca0403162Wink Saville 33763edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt switch (mDataConnectionTracker.getActivity()) { 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAIN: 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAIN; 340767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 341767a662ecde33c3979bf02b793d392aca0403162Wink Saville 342767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAOUT: 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAOUT; 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 345767a662ecde33c3979bf02b793d392aca0403162Wink Saville 346767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAINANDOUT: 347767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAINANDOUT; 348767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 349e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 350e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case DORMANT: 351e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataActivityState.DORMANT; 352e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 353767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 354767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 355767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 356767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 357767a662ecde33c3979bf02b793d392aca0403162Wink Saville 358767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void 359767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifySignalStrength() { 360767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifySignalStrength(this); 361767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 362767a662ecde33c3979bf02b793d392aca0403162Wink Saville 363767a662ecde33c3979bf02b793d392aca0403162Wink Saville public Connection 364767a662ecde33c3979bf02b793d392aca0403162Wink Saville dial (String dialString) throws CallStateException { 365767a662ecde33c3979bf02b793d392aca0403162Wink Saville // Need to make sure dialString gets parsed properly 366767a662ecde33c3979bf02b793d392aca0403162Wink Saville String newDialString = PhoneNumberUtils.stripSeparators(dialString); 36722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville return mCT.dial(newDialString); 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 369767a662ecde33c3979bf02b793d392aca0403162Wink Saville 37024440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla public Connection dial(String dialString, UUSInfo uusInfo) throws CallStateException { 37124440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla throw new CallStateException("Sending UUS information NOT supported in CDMA!"); 37224440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla } 37324440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla 374e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public SignalStrength getSignalStrength() { 375e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return mSST.mSignalStrength; 376767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 377767a662ecde33c3979bf02b793d392aca0403162Wink Saville 378767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 379767a662ecde33c3979bf02b793d392aca0403162Wink Saville getMessageWaitingIndicator() { 380ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return (getVoiceMessageCount() > 0); 381767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 382767a662ecde33c3979bf02b793d392aca0403162Wink Saville 383767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<? extends MmiCode> 384767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPendingMmiCodes() { 385e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return mPendingMmis; 386767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 387767a662ecde33c3979bf02b793d392aca0403162Wink Saville 388767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForSuppServiceNotification( 389767a662ecde33c3979bf02b793d392aca0403162Wink Saville Handler h, int what, Object obj) { 390767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method registerForSuppServiceNotification is NOT supported in CDMA!"); 391767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 392767a662ecde33c3979bf02b793d392aca0403162Wink Saville 393767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getBackgroundCall() { 394767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.backgroundCall; 395767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 396767a662ecde33c3979bf02b793d392aca0403162Wink Saville 397767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handleInCallMmiCommands(String dialString) { 398767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method handleInCallMmiCommands is NOT supported in CDMA!"); 399767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 400767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 401767a662ecde33c3979bf02b793d392aca0403162Wink Saville 402e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla boolean isInCall() { 403e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State foregroundCallState = getForegroundCall().getState(); 404e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State backgroundCallState = getBackgroundCall().getState(); 405e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaCall.State ringingCallState = getRingingCall().getState(); 406e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 407e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return (foregroundCallState.isAlive() || backgroundCallState.isAlive() || ringingCallState 408e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla .isAlive()); 409e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 410e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 411767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 412767a662ecde33c3979bf02b793d392aca0403162Wink Saville setNetworkSelectionModeAutomatic(Message response) { 413767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setNetworkSelectionModeAutomatic is NOT supported in CDMA!"); 414767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 415767a662ecde33c3979bf02b793d392aca0403162Wink Saville 416767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForSuppServiceNotification(Handler h) { 417767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method unregisterForSuppServiceNotification is NOT supported in CDMA!"); 418767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 419767a662ecde33c3979bf02b793d392aca0403162Wink Saville 420767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 421767a662ecde33c3979bf02b793d392aca0403162Wink Saville acceptCall() throws CallStateException { 422767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.acceptCall(); 423767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 424767a662ecde33c3979bf02b793d392aca0403162Wink Saville 425767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 426767a662ecde33c3979bf02b793d392aca0403162Wink Saville rejectCall() throws CallStateException { 427767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.rejectCall(); 428767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 429767a662ecde33c3979bf02b793d392aca0403162Wink Saville 430767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 431767a662ecde33c3979bf02b793d392aca0403162Wink Saville switchHoldingAndActive() throws CallStateException { 432767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.switchWaitingOrHoldingAndActive(); 433767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 434767a662ecde33c3979bf02b793d392aca0403162Wink Saville 435767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1Number() { 436f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getMdnNumber(); 437767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 438767a662ecde33c3979bf02b793d392aca0403162Wink Saville 43922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville public String getCdmaPrlVersion(){ 440daccacb865947c00f277f1823333e2fbf91e652aWink Saville return mSST.getPrlVersion(); 44122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville } 44222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 443019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang public String getCdmaMin() { 444f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getCdmaMin(); 445e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 446e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 4479e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public boolean isMinInfoReady() { 4489e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo return mSST.isMinInfoReady(); 4499e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 4509e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 451767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallWaiting(Message onComplete) { 452767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.queryCallWaiting(CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 453767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 454767a662ecde33c3979bf02b793d392aca0403162Wink Saville 455767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 456767a662ecde33c3979bf02b793d392aca0403162Wink Saville setRadioPower(boolean power) { 457767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.setRadioPower(power); 458767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 459767a662ecde33c3979bf02b793d392aca0403162Wink Saville 460767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEsn() { 461767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mEsn; 462767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 463767a662ecde33c3979bf02b793d392aca0403162Wink Saville 464767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMeid() { 465767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mMeid; 466767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 467767a662ecde33c3979bf02b793d392aca0403162Wink Saville 4683158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville //returns MEID or ESN in CDMA 469767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceId() { 4703158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville String id = getMeid(); 4713158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville if ((id == null) || id.matches("^0*$")) { 4723158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville Log.d(LOG_TAG, "getDeviceId(): MEID is not initialized use ESN"); 4733158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville id = getEsn(); 4743158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville } 4753158cf689f4994ec53c3b727f9b6ad7751a5551bWink Saville return id; 476767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 477767a662ecde33c3979bf02b793d392aca0403162Wink Saville 478767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceSvn() { 479767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "getDeviceSvn(): return 0"); 480767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 481767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 482767a662ecde33c3979bf02b793d392aca0403162Wink Saville 483767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getSubscriberId() { 484142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return mSST.getImsi(); 485767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 486767a662ecde33c3979bf02b793d392aca0403162Wink Saville 4872ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang public String getImei() { 4882ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang Log.e(LOG_TAG, "IMEI is not available in CDMA"); 4892ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang return null; 4902ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang } 4912ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang 492767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canConference() { 493767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canConference: not possible in CDMA"); 494767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 495767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 496767a662ecde33c3979bf02b793d392aca0403162Wink Saville 497767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CellLocation getCellLocation() { 498767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.cellLoc; 499767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 500767a662ecde33c3979bf02b793d392aca0403162Wink Saville 501767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getForegroundCall() { 502767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.foregroundCall; 503767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 504767a662ecde33c3979bf02b793d392aca0403162Wink Saville 505767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 5063caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt selectNetworkManually(OperatorInfo network, 507767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response) { 508767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "selectNetworkManually: not possible in CDMA"); 509767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 510767a662ecde33c3979bf02b793d392aca0403162Wink Saville 511767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 512dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mPostDialHandler = new Registrant(h, what, obj); 513767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 514767a662ecde33c3979bf02b793d392aca0403162Wink Saville 515767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handlePinMmi(String dialString) { 516e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla CdmaMmiCode mmi = CdmaMmiCode.newFromDialString(dialString, this); 517e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 518e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla if (mmi == null) { 519e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla Log.e(LOG_TAG, "Mmi is NULL!"); 520e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return false; 521e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } else if (mmi.isPukCommand()) { 522e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mPendingMmis.add(mmi); 523e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 524e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mmi.processCode(); 525e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla return true; 526e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 527e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla Log.e(LOG_TAG, "Unrecognized mmi!"); 528767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 529767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 530767a662ecde33c3979bf02b793d392aca0403162Wink Saville 531e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla /** 532e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * Removes the given MMI from the pending list and notifies registrants that 533e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * it is complete. 534e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * 535e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * @param mmi MMI that is done 536e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla */ 537e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla void onMMIDone(CdmaMmiCode mmi) { 538e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla /* 539e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * Only notify complete if it's on the pending list. Otherwise, it's 540e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla * already been handled (eg, previously canceled). 541e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla */ 542e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla if (mPendingMmis.remove(mmi)) { 543e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 544e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 545e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla } 546e9c0a6d73711ace2ed53f90862ef06f3d0ed6afeNaveen Kalla 547767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setLine1Number(String alphaTag, String number, Message onComplete) { 548767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setLine1Number: not possible in CDMA"); 549767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 550767a662ecde33c3979bf02b793d392aca0403162Wink Saville 551767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallWaiting(boolean enable, Message onComplete) { 552767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setCallWaiting is NOT supported in CDMA!"); 553767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 554767a662ecde33c3979bf02b793d392aca0403162Wink Saville 5557a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink public void updateServiceLocation() { 5567a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink mSST.enableSingleLocationUpdate(); 557767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 558767a662ecde33c3979bf02b793d392aca0403162Wink Saville 559767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setDataRoamingEnabled(boolean enable) { 56063edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.setDataOnRoamingEnabled(enable); 561767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 562767a662ecde33c3979bf02b793d392aca0403162Wink Saville 563dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 564dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.registerForCdmaOtaProvision(h, what, obj); 565dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 566dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 567dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 568dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.unregisterForCdmaOtaProvision(h); 569dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 570dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 5719e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 5729e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.registerForSubscriptionInfoReady(h, what, obj); 5739e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5749e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 5759e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void unregisterForSubscriptionInfoReady(Handler h) { 5769e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.unregisterForSubscriptionInfoReady(h); 5779e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5789e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 579dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj) { 58095a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant = new Registrant (h, what, obj); 581dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 582dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 583dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unsetOnEcbModeExitResponse(Handler h) { 58495a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.clear(); 585dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 586dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 587dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj) { 58822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.registerForCallWaiting(h, what, obj); 589dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 590dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 591dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCallWaiting(Handler h) { 59222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.unregisterForCallWaiting(h); 593dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 594dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 595767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 596767a662ecde33c3979bf02b793d392aca0403162Wink Saville getNeighboringCids(Message response) { 59790cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink /* 59890cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * This is currently not implemented. At least as of June 59990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * 2009, there is no neighbor cell information available for 60090cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * CDMA because some party is resisting making this 60190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * information readily available. Consequently, calling this 60290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * function can have no useful effect. This situation may 60390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * (and hopefully will) change in the future. 60490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink */ 60590cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink if (response != null) { 60690cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException ce = new CommandException( 60790cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException.Error.REQUEST_NOT_SUPPORTED); 60890cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink AsyncResult.forMessage(response).exception = ce; 60990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink response.sendToTarget(); 61090cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink } 611767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 612767a662ecde33c3979bf02b793d392aca0403162Wink Saville 61302648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt public DataState getDataConnectionState(String apnType) { 614767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataState ret = DataState.DISCONNECTED; 615767a662ecde33c3979bf02b793d392aca0403162Wink Saville 61682583b8312403ed734c30b161750d40c26086ee2Elliott Hughes if (mSST == null) { 617e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // Radio Technology Change is ongoning, dispose() and removeReferences() have 618e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // already been called 61944038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville 620e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataState.DISCONNECTED; 621a4e82851e9c8a75dfb371403c500e3b3cf3e4565Robert Greenwalt } else if (mSST.getCurrentDataConnectionState() != ServiceState.STATE_IN_SERVICE) { 622767a662ecde33c3979bf02b793d392aca0403162Wink Saville // If we're out of service, open TCP sockets may still work 623767a662ecde33c3979bf02b793d392aca0403162Wink Saville // but no data will flow 624767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 62563edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt } else if (mDataConnectionTracker.isApnTypeEnabled(apnType) == false || 62663edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.isApnTypeActive(apnType) == false) { 62702648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt ret = DataState.DISCONNECTED; 628767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 62963edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt switch (mDataConnectionTracker.getState(apnType)) { 630767a662ecde33c3979bf02b793d392aca0403162Wink Saville case FAILED: 631767a662ecde33c3979bf02b793d392aca0403162Wink Saville case IDLE: 632767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 633767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 634767a662ecde33c3979bf02b793d392aca0403162Wink Saville 635767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTED: 636767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DISCONNECTING: 637767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( mCT.state != Phone.State.IDLE 6389d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville && !mSST.isConcurrentVoiceAndDataAllowed()) { 639767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.SUSPENDED; 640767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 641767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTED; 642767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 643767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 644767a662ecde33c3979bf02b793d392aca0403162Wink Saville 645767a662ecde33c3979bf02b793d392aca0403162Wink Saville case INITING: 646767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTING: 647767a662ecde33c3979bf02b793d392aca0403162Wink Saville case SCANNING: 648767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTING; 649767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 650767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 651767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 652767a662ecde33c3979bf02b793d392aca0403162Wink Saville 6531f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville log("getDataConnectionState apnType=" + apnType + " ret=" + ret); 654767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 655767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 656767a662ecde33c3979bf02b793d392aca0403162Wink Saville 657767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendUssdResponse(String ussdMessge) { 658767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "sendUssdResponse: not possible in CDMA"); 659767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 660767a662ecde33c3979bf02b793d392aca0403162Wink Saville 661767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendDtmf(char c) { 662767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 663767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 664767a662ecde33c3979bf02b793d392aca0403162Wink Saville "sendDtmf called with invalid character '" + c + "'"); 665767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 666767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (mCT.state == Phone.State.OFFHOOK) { 667767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.sendDtmf(c, null); 668767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 669767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 670767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 671767a662ecde33c3979bf02b793d392aca0403162Wink Saville 672767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void startDtmf(char c) { 673767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 674767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 675767a662ecde33c3979bf02b793d392aca0403162Wink Saville "startDtmf called with invalid character '" + c + "'"); 676767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 677767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.startDtmf(c, null); 678767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 679767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 680767a662ecde33c3979bf02b793d392aca0403162Wink Saville 681767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void stopDtmf() { 682767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.stopDtmf(null); 683767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 684767a662ecde33c3979bf02b793d392aca0403162Wink Saville 685dafa22a3ef9328c72319aeec605f6a6d20e46080jsh public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 686e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville boolean check = true; 687e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville for (int itr = 0;itr < dtmfString.length(); itr++) { 688e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) { 689e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Log.e(LOG_TAG, 690e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville "sendDtmf called with invalid character '" + dtmfString.charAt(itr)+ "'"); 691e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville check = false; 692e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 693e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 694e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 695e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if ((mCT.state == Phone.State.OFFHOOK)&&(check)) { 696dafa22a3ef9328c72319aeec605f6a6d20e46080jsh mCM.sendBurstDtmf(dtmfString, on, off, onComplete); 697e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 698e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 699e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 700767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getAvailableNetworks(Message response) { 701767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getAvailableNetworks: not possible in CDMA"); 702767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 703767a662ecde33c3979bf02b793d392aca0403162Wink Saville 704767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) { 705dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Log.e(LOG_TAG, "setOutgoingCallerIdDisplay: not possible in CDMA"); 706767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 707767a662ecde33c3979bf02b793d392aca0403162Wink Saville 708767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableLocationUpdates() { 709767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.enableLocationUpdates(); 710767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 711767a662ecde33c3979bf02b793d392aca0403162Wink Saville 7127a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink public void disableLocationUpdates() { 7137a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink mSST.disableLocationUpdates(); 7147a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink } 7157a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink 716767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getDataCallList(Message response) { 717767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getDataCallList(response); 718767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 719767a662ecde33c3979bf02b793d392aca0403162Wink Saville 720767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getDataRoamingEnabled() { 72163edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt return mDataConnectionTracker.getDataOnRoamingEnabled(); 722767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 723767a662ecde33c3979bf02b793d392aca0403162Wink Saville 724767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setVoiceMailNumber(String alphaTag, 725767a662ecde33c3979bf02b793d392aca0403162Wink Saville String voiceMailNumber, 726767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 727ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause Message resp; 728ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mVmNumber = voiceMailNumber; 729a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville resp = obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete); 730ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.setVoiceMailNumber(alphaTag, mVmNumber, resp); 731767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 732767a662ecde33c3979bf02b793d392aca0403162Wink Saville 733767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailNumber() { 734ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause String number = null; 735ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 7367188f946521d64ea21121939d2a4c279f33fe910Wink Saville // TODO: The default value of voicemail number should be read from a system property 737092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi 738092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi // Read platform settings for dynamic voicemail number 739092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi if (getContext().getResources().getBoolean(com.android.internal 740092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi .R.bool.config_telephony_use_own_number_for_voicemail)) { 741092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi number = sp.getString(VM_NUMBER_CDMA, getLine1Number()); 742092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi } else { 743092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi number = sp.getString(VM_NUMBER_CDMA, "*86"); 744092238916fd5d10090c0bcad33644778a1f366e7Samyeoul Choi } 745ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return number; 746dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 747dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 748dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /* Returns Number of Voicemails 749dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @hide 750dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 751ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause public int getVoiceMessageCount() { 752ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville int voicemailCount = mIccRecords.getVoiceMessageCount(); 753ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // If mRuimRecords.getVoiceMessageCount returns zero, then there is possibility 754ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // that phone was power cycled and would have lost the voicemail count. 755ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // So get the count from preferences. 756ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause if (voicemailCount == 0) { 757ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 758ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause voicemailCount = sp.getInt(VM_COUNT_CDMA, 0); 759ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 760ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return voicemailCount; 761767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 762767a662ecde33c3979bf02b793d392aca0403162Wink Saville 763767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailAlphaTag() { 764767a662ecde33c3979bf02b793d392aca0403162Wink Saville // TODO: Where can we get this value has to be clarified with QC. 765767a662ecde33c3979bf02b793d392aca0403162Wink Saville String ret = "";//TODO: Remove = "", if we know where to get this value. 766767a662ecde33c3979bf02b793d392aca0403162Wink Saville 767767a662ecde33c3979bf02b793d392aca0403162Wink Saville //ret = mSIMRecords.getVoiceMailAlphaTag(); 768767a662ecde33c3979bf02b793d392aca0403162Wink Saville 769767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ret == null || ret.length() == 0) { 770767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mContext.getText( 771767a662ecde33c3979bf02b793d392aca0403162Wink Saville com.android.internal.R.string.defaultVoiceMailAlphaTag).toString(); 772767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 773767a662ecde33c3979bf02b793d392aca0403162Wink Saville 774767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 775767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 776767a662ecde33c3979bf02b793d392aca0403162Wink Saville 777767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 778767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingOption: not possible in CDMA"); 779767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 780767a662ecde33c3979bf02b793d392aca0403162Wink Saville 781767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallForwardingOption(int commandInterfaceCFAction, 782767a662ecde33c3979bf02b793d392aca0403162Wink Saville int commandInterfaceCFReason, 783767a662ecde33c3979bf02b793d392aca0403162Wink Saville String dialingNumber, 784767a662ecde33c3979bf02b793d392aca0403162Wink Saville int timerSeconds, 785767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 786767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setCallForwardingOption: not possible in CDMA"); 787767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 788767a662ecde33c3979bf02b793d392aca0403162Wink Saville 789767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 790767a662ecde33c3979bf02b793d392aca0403162Wink Saville getOutgoingCallerIdDisplay(Message onComplete) { 791767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getOutgoingCallerIdDisplay: not possible in CDMA"); 792767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 793767a662ecde33c3979bf02b793d392aca0403162Wink Saville 794767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 795767a662ecde33c3979bf02b793d392aca0403162Wink Saville getCallForwardingIndicator() { 796767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingIndicator: not possible in CDMA"); 797767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 798767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 799767a662ecde33c3979bf02b793d392aca0403162Wink Saville 800767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void explicitCallTransfer() { 801767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "explicitCallTransfer: not possible in CDMA"); 802767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 803767a662ecde33c3979bf02b793d392aca0403162Wink Saville 804767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1AlphaTag() { 805767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getLine1AlphaTag: not possible in CDMA"); 806767a662ecde33c3979bf02b793d392aca0403162Wink Saville return null; 807767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 808767a662ecde33c3979bf02b793d392aca0403162Wink Saville 809b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby /** 8101c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify any interested party of a Phone state change {@link Phone.State} 811767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 812767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyPhoneStateChanged() { 813767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyPhoneState(this); 814767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 815767a662ecde33c3979bf02b793d392aca0403162Wink Saville 816767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 8171c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 8181c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 819767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 8201c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh /*package*/ void notifyPreciseCallStateChanged() { 821767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 8221c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh super.notifyPreciseCallStateChangedP(); 823767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 824767a662ecde33c3979bf02b793d392aca0403162Wink Saville 825767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyServiceStateChanged(ServiceState ss) { 826767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyServiceStateChangedP(ss); 827767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 828767a662ecde33c3979bf02b793d392aca0403162Wink Saville 829767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyLocationChanged() { 830767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyCellLocation(this); 831767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 832767a662ecde33c3979bf02b793d392aca0403162Wink Saville 833767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyNewRingingConnection(Connection c) { 834767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 835767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyNewRingingConnectionP(c); 836767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 837767a662ecde33c3979bf02b793d392aca0403162Wink Saville 838767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyDisconnect(Connection cn) { 839767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDisconnectRegistrants.notifyResult(cn); 840767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 841767a662ecde33c3979bf02b793d392aca0403162Wink Saville 842767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyUnknownConnection() { 843767a662ecde33c3979bf02b793d392aca0403162Wink Saville mUnknownConnectionRegistrants.notifyResult(this); 844767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 845767a662ecde33c3979bf02b793d392aca0403162Wink Saville 846e025391bf499e41650fe6508ac78f097559a31a4Wink Saville public boolean isInEmergencyCall() { 847e025391bf499e41650fe6508ac78f097559a31a4Wink Saville return mCT.isInEmergencyCall(); 848e025391bf499e41650fe6508ac78f097559a31a4Wink Saville } 849e025391bf499e41650fe6508ac78f097559a31a4Wink Saville 850e025391bf499e41650fe6508ac78f097559a31a4Wink Saville public boolean isInEcm() { 851e025391bf499e41650fe6508ac78f097559a31a4Wink Saville return mIsPhoneInEcmState; 852e025391bf499e41650fe6508ac78f097559a31a4Wink Saville } 853e025391bf499e41650fe6508ac78f097559a31a4Wink Saville 854dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville void sendEmergencyCallbackModeChange(){ 855dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //Send an Intent 856dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED); 85795a1d1a89e383dab893750638c2393dec54833ffWink Saville intent.putExtra(PHONE_IN_ECM_STATE, mIsPhoneInEcmState); 858dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ActivityManagerNative.broadcastStickyIntent(intent,null); 85995a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) Log.d(LOG_TAG, "sendEmergencyCallbackModeChange"); 860dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 861dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 862dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 863dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void exitEmergencyCallbackMode() { 86495a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 86595a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 86695a1d1a89e383dab893750638c2393dec54833ffWink Saville } 867dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Send a message which will invoke handleExitEmergencyCallbackMode 868a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.exitEmergencyCallbackMode(obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 869dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 870dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 871dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleEnterEmergencyCallbackMode(Message msg) { 87295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 87395a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleEnterEmergencyCallbackMode,mIsPhoneInEcmState= " 87495a1d1a89e383dab893750638c2393dec54833ffWink Saville + mIsPhoneInEcmState); 87595a1d1a89e383dab893750638c2393dec54833ffWink Saville } 87695a1d1a89e383dab893750638c2393dec54833ffWink Saville // if phone is not in Ecm mode, and it's changed to Ecm mode 87795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState == false) { 87895a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = true; 879dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // notify change 880dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 88122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "true"); 8822563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 883dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Post this runnable so we will automatically exit 884dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if no one invokes exitEmergencyCallbackMode() directly. 88522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville long delayInMillis = SystemProperties.getLong( 88622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 887a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 88895a1d1a89e383dab893750638c2393dec54833ffWink Saville // We don't want to go to sleep while in Ecm 88995a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.acquire(); 890dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 891dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 892dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 893dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleExitEmergencyCallbackMode(Message msg) { 894dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville AsyncResult ar = (AsyncResult)msg.obj; 89595a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 89695a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleExitEmergencyCallbackMode,ar.exception , mIsPhoneInEcmState " 89795a1d1a89e383dab893750638c2393dec54833ffWink Saville + ar.exception + mIsPhoneInEcmState); 89895a1d1a89e383dab893750638c2393dec54833ffWink Saville } 89995a1d1a89e383dab893750638c2393dec54833ffWink Saville // Remove pending exit Ecm runnable, if any 900a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville removeCallbacks(mExitEcmRunnable); 901dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 90295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mEcmExitRespRegistrant != null) { 90395a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.notifyRegistrant(ar); 904dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 905dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if exiting ecm success 906dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (ar.exception == null) { 90795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState) { 90895a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = false; 90922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 910dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 911dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // send an Intent 912dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 91333777d2096c6877ab925db562067ac7272076399Libin Tang // Re-initiate data connection 91463edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.setInternalDataEnabled(true); 915dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 916dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 917dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 91895a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 91995a1d1a89e383dab893750638c2393dec54833ffWink Saville * Handle to cancel or restart Ecm timer in emergency call back mode 92095a1d1a89e383dab893750638c2393dec54833ffWink Saville * if action is CANCEL_ECM_TIMER, cancel Ecm timer and notify apps the timer is canceled; 92195a1d1a89e383dab893750638c2393dec54833ffWink Saville * otherwise, restart Ecm timer and notify apps the timer is restarted. 92295a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 92395a1d1a89e383dab893750638c2393dec54833ffWink Saville void handleTimerInEmergencyCallbackMode(int action) { 92495a1d1a89e383dab893750638c2393dec54833ffWink Saville switch(action) { 92595a1d1a89e383dab893750638c2393dec54833ffWink Saville case CANCEL_ECM_TIMER: 926a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville removeCallbacks(mExitEcmRunnable); 9275644b080741bb4fae103617ecbea7a62b0262a56Kenny Root mEcmTimerResetRegistrants.notifyResult(Boolean.TRUE); 92895a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 92995a1d1a89e383dab893750638c2393dec54833ffWink Saville case RESTART_ECM_TIMER: 93095a1d1a89e383dab893750638c2393dec54833ffWink Saville long delayInMillis = SystemProperties.getLong( 93195a1d1a89e383dab893750638c2393dec54833ffWink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 932a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville postDelayed(mExitEcmRunnable, delayInMillis); 9335644b080741bb4fae103617ecbea7a62b0262a56Kenny Root mEcmTimerResetRegistrants.notifyResult(Boolean.FALSE); 93495a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 93595a1d1a89e383dab893750638c2393dec54833ffWink Saville default: 93695a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "handleTimerInEmergencyCallbackMode, unsupported action " + action); 93795a1d1a89e383dab893750638c2393dec54833ffWink Saville } 93895a1d1a89e383dab893750638c2393dec54833ffWink Saville } 93995a1d1a89e383dab893750638c2393dec54833ffWink Saville 94095a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 94195a1d1a89e383dab893750638c2393dec54833ffWink Saville * Registration point for Ecm timer reset 94295a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param h handler to notify 94395a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param what User-defined message code 94495a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param obj placed in Message.obj 94595a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 94695a1d1a89e383dab893750638c2393dec54833ffWink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 94795a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.addUnique(h, what, obj); 94895a1d1a89e383dab893750638c2393dec54833ffWink Saville } 94995a1d1a89e383dab893750638c2393dec54833ffWink Saville 95095a1d1a89e383dab893750638c2393dec54833ffWink Saville public void unregisterForEcmTimerReset(Handler h) { 95195a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.remove(h); 95295a1d1a89e383dab893750638c2393dec54833ffWink Saville } 95395a1d1a89e383dab893750638c2393dec54833ffWink Saville 954a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville @Override 955a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville public void handleMessage(Message msg) { 956a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult ar; 957a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Message onComplete; 958767a662ecde33c3979bf02b793d392aca0403162Wink Saville 959a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville switch(msg.what) { 960a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_AVAILABLE: { 961a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getBasebandVersion(obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE)); 962767a662ecde33c3979bf02b793d392aca0403162Wink Saville 963a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getDeviceIdentity(obtainMessage(EVENT_GET_DEVICE_IDENTITY_DONE)); 964a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 965a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 966767a662ecde33c3979bf02b793d392aca0403162Wink Saville 967a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_BASEBAND_VERSION_DONE:{ 968a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 969767a662ecde33c3979bf02b793d392aca0403162Wink Saville 970a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 971a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 972767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 973767a662ecde33c3979bf02b793d392aca0403162Wink Saville 974a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (DBG) Log.d(LOG_TAG, "Baseband version: " + ar.result); 975a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_BASEBAND_VERSION, (String)ar.result); 976a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 977a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 978767a662ecde33c3979bf02b793d392aca0403162Wink Saville 979a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_DEVICE_IDENTITY_DONE:{ 980a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 981767a662ecde33c3979bf02b793d392aca0403162Wink Saville 982a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 983a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 984767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 985a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville String[] respId = (String[])ar.result; 9862ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang mImei = respId[0]; 9872ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang mImeiSv = respId[1]; 988a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mEsn = respId[2]; 989a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mMeid = respId[3]; 990a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 991a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 992767a662ecde33c3979bf02b793d392aca0403162Wink Saville 993a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_EMERGENCY_CALLBACK_MODE_ENTER:{ 994a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleEnterEmergencyCallbackMode(msg); 995a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 996a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 997dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 99880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka case EVENT_ICC_RECORD_EVENTS: 99980198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka ar = (AsyncResult)msg.obj; 100080198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka processIccRecordEvents((Integer)ar.result); 100180198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 100280198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 1003a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE:{ 1004a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleExitEmergencyCallbackMode(msg); 1005a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1006a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1007dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1008a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RUIM_RECORDS_LOADED:{ 1009a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received"); 1010b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby updateCurrentCarrierInProvider(); 1011a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1012a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1013767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1014a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE:{ 1015a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_OFF_OR_NOT_AVAILABLE Received"); 1016a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1017a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1018767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1019a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_ON:{ 1020a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_ON Received"); 1021fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla handleCdmaSubscriptionSource(mCdmaSSM.getCdmaSubscriptionSource()); 1022fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla } 1023fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla break; 1024fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla 1025fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla case EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED:{ 1026fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla Log.d(LOG_TAG, "EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED"); 1027fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla handleCdmaSubscriptionSource(mCdmaSSM.getCdmaSubscriptionSource()); 1028a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1029a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1030767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1031a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SSN:{ 1032a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_SSN Received"); 1033a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1034a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1035767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1036a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_REGISTERED_TO_NETWORK:{ 1037a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_REGISTERED_TO_NETWORK Received"); 1038a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1039a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1040767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1041a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_NV_READY:{ 1042a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.d(LOG_TAG, "Event EVENT_NV_READY Received"); 1043c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo prepareEri(); 1044a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1045a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1046767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1047a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_VM_NUMBER_DONE:{ 1048a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1049a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (IccException.class.isInstance(ar.exception)) { 1050a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville storeVoiceMailNumber(mVmNumber); 1051a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar.exception = null; 1052767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1053a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete = (Message) ar.userObj; 1054a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (onComplete != null) { 1055a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1056a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete.sendToTarget(); 1057ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1058a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1059a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1060ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1061a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville default:{ 1062a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.handleMessage(msg); 1063767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1064767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1065767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1066767a662ecde33c3979bf02b793d392aca0403162Wink Saville 106780198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka private void processIccRecordEvents(int eventCode) { 106880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka switch (eventCode) { 106980198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka case RuimRecords.EVENT_MWI: 107080198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka notifyMessageWaitingIndicator(); 107180198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 107280198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 107380198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka default: 107480198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka Log.e(LOG_TAG,"Unknown icc records event code " + eventCode); 107580198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 107680198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 107780198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 107880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 1079dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1080fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla * Handles the call to get the subscription source 1081fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla * 108280198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka * @param newSubscriptionSource holds the new CDMA subscription source value 1083fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla */ 1084fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla private void handleCdmaSubscriptionSource(int newSubscriptionSource) { 1085fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla if (newSubscriptionSource != mCdmaSubscriptionSource) { 1086fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla mCdmaSubscriptionSource = newSubscriptionSource; 1087fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla if (newSubscriptionSource == CDMA_SUBSCRIPTION_NV) { 1088fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla // NV is ready when subscription source is NV 1089fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla sendMessage(obtainMessage(EVENT_NV_READY)); 1090fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla } 1091fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla } 1092fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla } 1093fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla 1094fc2cbe9b46ab17a401dc50f8e0dbb677ed012299Naveen Kalla /** 1095dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the PhoneSubInfo of the CDMAPhone 1096dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1097dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public PhoneSubInfo getPhoneSubInfo() { 1098767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSubInfo; 1099dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1100767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1101dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1102dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccSmsInterfaceManager of the CDMAPhone 1103dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1104dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccSmsInterfaceManager getIccSmsInterfaceManager() { 1105dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimSmsInterfaceManager; 1106dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1107767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1108dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1109dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone 1110dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1111dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager() { 1112dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimPhoneBookInterfaceManager; 1113dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1114767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1115e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void registerForEriFileLoaded(Handler h, int what, Object obj) { 1116e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Registrant r = new Registrant (h, what, obj); 1117e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.add(r); 1118e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1119e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1120e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void unregisterForEriFileLoaded(Handler h) { 1121e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.remove(h); 1122e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1123e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1124dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // override for allowing access from other classes of this package 1125dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1126dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1127dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1128dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public final void setSystemProperty(String property, String value) { 1129dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville super.setSystemProperty(property, value); 1130dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1131767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1132dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1133dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Activate or deactivate cell broadcast SMS. 1134dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1135dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param activate 0 = activate, 1 = deactivate 1136dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1137dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1138dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 1139ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[CDMAPhone] activateCellBroadcastSms() is obsolete; use SmsManager"); 1140ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1141dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1142767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1143dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1144dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Query the current configuration of cdma cell broadcast SMS. 1145dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1146dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1147dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1148dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void getCellBroadcastSmsConfig(Message response) { 1149ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[CDMAPhone] getCellBroadcastSmsConfig() is obsolete; use SmsManager"); 1150ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1151dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1152767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1153dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1154dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Configure cdma cell broadcast SMS. 1155dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1157dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1158dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) { 1159ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[CDMAPhone] setCellBroadcastSmsConfig() is obsolete; use SmsManager"); 1160ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1161dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1162dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 11634d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville /** 11644d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville * Returns true if OTA Service Provisioning needs to be performed. 11654d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville */ 11664d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville @Override 11674d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville public boolean needsOtaServiceProvisioning() { 1168fd2d01302781af91d77557a99874111a4fee8365Wink Saville return mSST.getOtasp() != ServiceStateTracker.OTASP_NOT_NEEDED; 11694d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville } 11704d8ae85b5de8a90a597e4b649c6ee7208e446e3bWink Saville 1171e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final String IS683A_FEATURE_CODE = "*228"; 1172e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_FEATURE_CODE_NUM_DIGITS = 4; 1173e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_NUM_DIGITS = 2; 1174e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_OFFSET = 4; 1175dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1176dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_A_BAND = 0; 1177dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_B_BAND = 1; 1178dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_A_BLOCK = 2; 1179dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_B_BLOCK = 3; 1180dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_C_BLOCK = 4; 1181dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_D_BLOCK = 5; 1182dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_E_BLOCK = 6; 1183dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_F_BLOCK = 7; 1184e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int INVALID_SYSTEM_SELECTION_CODE = -1; 1185dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1186b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private static boolean isIs683OtaSpDialStr(String dialStr) { 1187dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int sysSelCodeInt; 1188dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville boolean isOtaspDialString = false; 1189dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int dialStrLen = dialStr.length(); 1190dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1191dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStrLen == IS683A_FEATURE_CODE_NUM_DIGITS) { 1192dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStr.equals(IS683A_FEATURE_CODE)) { 1193dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville isOtaspDialString = true; 1194dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1195e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1196e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1197e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li switch (sysSelCodeInt) { 1198e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_A_BAND: 1199e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_B_BAND: 1200e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_A_BLOCK: 1201e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_B_BLOCK: 1202e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_C_BLOCK: 1203e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_D_BLOCK: 1204e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_E_BLOCK: 1205e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_F_BLOCK: 1206e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaspDialString = true; 1207e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1208e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li default: 1209e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1210e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1211e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1212e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaspDialString; 1213e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1214e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1215e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function extracts the system selection code from the dial string. 1216e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1217b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private static int extractSelCodeFromOtaSpNum(String dialStr) { 1218e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int dialStrLen = dialStr.length(); 1219e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = INVALID_SYSTEM_SELECTION_CODE; 1220e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1221e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((dialStr.regionMatches(0, IS683A_FEATURE_CODE, 1222e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 0, IS683A_FEATURE_CODE_NUM_DIGITS)) && 1223e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li (dialStrLen >= (IS683A_FEATURE_CODE_NUM_DIGITS + 1224e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_SYS_SEL_CODE_NUM_DIGITS))) { 1225e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Since we checked the condition above, the system selection code 1226e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // extracted from dialStr will not cause any exception 1227e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = Integer.parseInt ( 1228e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li dialStr.substring (IS683A_FEATURE_CODE_NUM_DIGITS, 1229e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_FEATURE_CODE_NUM_DIGITS + IS683A_SYS_SEL_CODE_NUM_DIGITS)); 1230e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1231e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "extractSelCodeFromOtaSpNum " + sysSelCodeInt); 1232e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return sysSelCodeInt; 1233e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1234dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1235e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1236e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function checks if the system selection code extracted from 1237e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * the dial string "sysSelCodeInt' is the system selection code specified 1238e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in the carrier ota sp number schema "sch". 1239e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1240b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby private static boolean 1241e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li checkOtaSpNumBasedOnSysSelCode (int sysSelCodeInt, String sch[]) { 1242e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1243e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li try { 1244e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Get how many number of system selection code ranges 1245e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selRc = Integer.parseInt((String)sch[1]); 1246e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li for (int i = 0; i < selRc; i++) { 1247e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[i+2]) && !TextUtils.isEmpty(sch[i+3])) { 1248e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMin = Integer.parseInt((String)sch[i+2]); 1249e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMax = Integer.parseInt((String)sch[i+3]); 1250e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Check if the selection code extracted from the dial string falls 1251e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // within any of the range pairs specified in the schema. 1252e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((sysSelCodeInt >= selMin) && (sysSelCodeInt <= selMax)) { 1253e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1254dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville break; 1255e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1256dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1257dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1258e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } catch (NumberFormatException ex) { 1259e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If the carrier ota sp number schema is not correct, we still allow dial 1260e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // and only log the error: 1261e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.e(LOG_TAG, "checkOtaSpNumBasedOnSysSelCode, error", ex); 1262dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1263e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1264e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1265e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1266e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Define the pattern/format for carrier specified OTASP number schema. 1267e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // It separates by comma and/or whitespace. 1268e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static Pattern pOtaSpNumSchema = Pattern.compile("[,\\s]+"); 1269e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1270e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1271e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The following function checks if a dial string is a carrier specified 1272e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * OTASP number or not by checking against the OTASP number schema stored 1273e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in PROPERTY_OTASP_NUM_SCHEMA. 1274e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1275e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * Currently, there are 2 schemas for carriers to specify the OTASP number: 1276e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1) Use system selection code: 1277e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1278e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * SELC,the # of code pairs,min1,max1,min2,max2,... 1279e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "SELC,3,10,20,30,40,60,70" indicates that there are 3 pairs of 1280e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * selection codes, and they are {10,20}, {30,40} and {60,70} respectively. 1281e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1282e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 2) Use feature code: 1283e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1284e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * "FC,length of feature code,feature code". 1285e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "FC,2,*2" indicates that the length of the feature code is 2, 1286e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * and the code itself is "*2". 1287e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1288e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private boolean isCarrierOtaSpNum(String dialStr) { 1289e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1290e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1291e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt == INVALID_SYSTEM_SELECTION_CODE) { 1292e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1293e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1294e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // mCarrierOtaSpNumSchema is retrieved from PROPERTY_OTASP_NUM_SCHEMA: 1295e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(mCarrierOtaSpNumSchema)) { 1296e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Matcher m = pOtaSpNumSchema.matcher(mCarrierOtaSpNumSchema); 1297e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1298e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,schema" + mCarrierOtaSpNumSchema); 1299e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1300e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1301e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (m.find()) { 1302e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String sch[] = pOtaSpNumSchema.split(mCarrierOtaSpNumSchema); 1303e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If carrier uses system selection code mechanism 1304e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("SELC")) { 1305e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt!=INVALID_SYSTEM_SELECTION_CODE) { 1306e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum=checkOtaSpNumBasedOnSysSelCode(sysSelCodeInt,sch); 1307e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1308e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1309e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,sysSelCodeInt is invalid"); 1310e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1311e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1312e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("FC")) { 1313e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int fcLen = Integer.parseInt((String)sch[1]); 1314e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String fc = (String)sch[2]; 1315e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (dialStr.regionMatches(0,fc,0,fcLen)) { 1316e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1317e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1318e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,not otasp number"); 1319e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1320e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1321e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1322e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema not supported" + sch[0]); 1323e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1324e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1325e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1326e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1327e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern not right" + 1328e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema); 1329e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1330e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1331e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1332e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern empty"); 1333e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1334e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1335dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1336767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1337d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang /** 1338d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * isOTASPNumber: checks a given number against the IS-683A OTASP dial string and carrier 1339d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * OTASP dial string. 1340d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * 1341d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @param dialStr the number to look up. 1342d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @return true if the number is in IS-683A OTASP dial string or carrier OTASP dial string 1343d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang */ 1344dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 1345d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang public boolean isOtaSpNumber(String dialStr){ 1346d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang boolean isOtaSpNum = false; 13479e534153264138cfee383c626db92b934fafc1afTammo Spalink String dialableStr = PhoneNumberUtils.extractNetworkPortionAlt(dialStr); 1348d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (dialableStr != null) { 1349d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isIs683OtaSpDialStr(dialableStr); 1350d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (isOtaSpNum == false) { 1351d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isCarrierOtaSpNum(dialableStr); 1352d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1353d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1354d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (DBG) Log.d(LOG_TAG, "isOtaSpNumber " + isOtaSpNum); 1355d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang return isOtaSpNum; 1356d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1357e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1358e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1359e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconIndex() { 1360cc5c1ad53ce4541f17842daba29e7ccba221c079Robert Greenwalt return getServiceState().getCdmaEriIconIndex(); 1361e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1362e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1363e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1364e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI icon mode, 1365e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 0 - ON 1366e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 1 - FLASHING 1367e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1368e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1369e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconMode() { 1370cc5c1ad53ce4541f17842daba29e7ccba221c079Robert Greenwalt return getServiceState().getCdmaEriIconMode(); 1371e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1372e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1373e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1374e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI text, 1375e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1376e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1377e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public String getCdmaEriText() { 1378e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int roamInd = getServiceState().getCdmaRoamingIndicator(); 1379e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); 1380f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mEriManager.getCdmaEriText(roamInd, defRoamInd); 1381e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1382ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1383ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /** 1384ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * Store the voicemail number in preferences 1385ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause */ 1386ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private void storeVoiceMailNumber(String number) { 1387ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Update the preference value of voicemail number 1388ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 1389ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences.Editor editor = sp.edit(); 1390ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause editor.putString(VM_NUMBER_CDMA, number); 1391fa8e271636b9e9b86f247cdb4c91d9ebe9675c27Brad Fitzpatrick editor.apply(); 1392ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1393ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1394142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1395142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * Sets PROPERTY_ICC_OPERATOR_ISO_COUNTRY property 1396142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1397142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1398142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville private void setIsoCountryProperty(String operatorNumeric) { 1399142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (TextUtils.isEmpty(operatorNumeric)) { 1400142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, ""); 1401142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } else { 1402142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String iso = ""; 1403142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1404142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville iso = MccTable.countryCodeForMcc(Integer.parseInt( 1405142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville operatorNumeric.substring(0,3))); 1406142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (NumberFormatException ex) { 1407142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1408142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (StringIndexOutOfBoundsException ex) { 1409142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1410142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1411142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1412142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso); 1413142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1414142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1415142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1416142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1417144fdfec240a56890657d2248a22bdda9f22470cWink Saville * Sets the "current" field in the telephony provider according to the 1418144fdfec240a56890657d2248a22bdda9f22470cWink Saville * build-time operator numeric property 1419142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1420142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * @return true for success; false otherwise. 1421142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1422144fdfec240a56890657d2248a22bdda9f22470cWink Saville boolean updateCurrentCarrierInProvider(String operatorNumeric) { 1423142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (!TextUtils.isEmpty(operatorNumeric)) { 1424142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1425142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"); 1426142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville ContentValues map = new ContentValues(); 1427142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville map.put(Telephony.Carriers.NUMERIC, operatorNumeric); 1428b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby log("updateCurrentCarrierInProvider from system: numeric=" + operatorNumeric); 1429142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville getContext().getContentResolver().insert(uri, map); 1430144fdfec240a56890657d2248a22bdda9f22470cWink Saville 1431144fdfec240a56890657d2248a22bdda9f22470cWink Saville // Updates MCC MNC device configuration information 143280198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka MccTable.updateMccMncConfiguration(mContext, operatorNumeric); 1433144fdfec240a56890657d2248a22bdda9f22470cWink Saville 1434142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return true; 1435142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (SQLException e) { 1436142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.e(LOG_TAG, "Can't store current operator", e); 1437142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1438142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1439142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return false; 1440142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 14411f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville 1442b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby /** 1443b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * Sets the "current" field in the telephony provider according to the SIM's operator. 1444b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * Implemented in {@link CDMALTEPhone} for CDMA/LTE devices. 1445b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * 1446b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby * @return true for success; false otherwise. 1447b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby */ 1448b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby boolean updateCurrentCarrierInProvider() { 1449b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby return true; 1450b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby } 1451b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby 1452c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo public void prepareEri() { 1453c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo mEriManager.loadEriFile(); 1454c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo if(mEriManager.isEriFileLoaded()) { 1455c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo // when the ERI file is loaded 1456c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo log("ERI read, notify registrants"); 1457c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo mEriFileLoadedRegistrants.notifyRegistrants(); 1458c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo } 1459c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo } 1460c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo 1461c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo public boolean isEriFileLoaded() { 1462c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo return mEriManager.isEriFileLoaded(); 1463c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo } 1464c8e2916d0bdbbda5fb6faf61d6f24100641d19f5Kazuhiro Ondo 1465ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville private void registerForRuimRecordEvents() { 1466ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.registerForRecordsEvents(this, EVENT_ICC_RECORD_EVENTS, null); 1467ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.registerForRecordsLoaded(this, EVENT_RUIM_RECORDS_LOADED, null); 146880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 146980198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 1470ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville private void unregisterForRuimRecordEvents() { 1471ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.unregisterForRecordsEvents(this); 1472ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.unregisterForRecordsLoaded(this); 147380198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 147480198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 14751f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville protected void log(String s) { 14761f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville if (DBG) 14771f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville Log.d(LOG_TAG, "[CDMAPhone] " + s); 14781f3278e111c8abadedf71a9bcdbbaffe154be738Wink Saville } 147930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville 148030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville @Override 148130ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 148230ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println("CDMAPhone extends:"); 148330ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville super.dump(fd, pw, args); 148430ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mVmNumber=" + mVmNumber); 148530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mCT=" + mCT); 148630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mSST=" + mSST); 148730ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mCdmaSSM=" + mCdmaSSM); 148830ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mPendingMmis=" + mPendingMmis); 148930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mRuimPhoneBookInterfaceManager=" + mRuimPhoneBookInterfaceManager); 149030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mRuimSmsInterfaceManager=" + mRuimSmsInterfaceManager); 149130ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mCdmaSubscriptionSource=" + mCdmaSubscriptionSource); 149230ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mSubInfo=" + mSubInfo); 149330ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mEriManager=" + mEriManager); 149430ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mWakeLock=" + mWakeLock); 149530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mIsPhoneInEcmState=" + mIsPhoneInEcmState); 149630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville if (VDBG) pw.println(" mImei=" + mImei); 149730ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville if (VDBG) pw.println(" mImeiSv=" + mImeiSv); 149830ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville if (VDBG) pw.println(" mEsn=" + mEsn); 149930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville if (VDBG) pw.println(" mMeid=" + mMeid); 150030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mCarrierOtaSpNumSchema=" + mCarrierOtaSpNumSchema); 150130ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" getCdmaEriIconIndex()=" + getCdmaEriIconIndex()); 150230ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" getCdmaEriIconMode()=" + getCdmaEriIconMode()); 150330ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" getCdmaEriText()=" + getCdmaEriText()); 150430ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" isMinInfoReady()=" + isMinInfoReady()); 150530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" isCspPlmnEnabled()=" + isCspPlmnEnabled()); 150630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville } 1507767a662ecde33c3979bf02b793d392aca0403162Wink Saville} 1508