CDMAPhone.java revision 95a1d1a89e383dab893750638c2393dec54833ff
1767a662ecde33c3979bf02b793d392aca0403162Wink Saville/* 2767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Copyright (C) 2006 The Android Open Source Project 3767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 4767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5767a662ecde33c3979bf02b793d392aca0403162Wink Saville * you may not use this file except in compliance with the License. 6767a662ecde33c3979bf02b793d392aca0403162Wink Saville * You may obtain a copy of the License at 7767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 8767a662ecde33c3979bf02b793d392aca0403162Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 9767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 10767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Unless required by applicable law or agreed to in writing, software 11767a662ecde33c3979bf02b793d392aca0403162Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12767a662ecde33c3979bf02b793d392aca0403162Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13767a662ecde33c3979bf02b793d392aca0403162Wink Saville * See the License for the specific language governing permissions and 14767a662ecde33c3979bf02b793d392aca0403162Wink Saville * limitations under the License. 15767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 16767a662ecde33c3979bf02b793d392aca0403162Wink Saville 17767a662ecde33c3979bf02b793d392aca0403162Wink Savillepackage com.android.internal.telephony.cdma; 18767a662ecde33c3979bf02b793d392aca0403162Wink Saville 19e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.app.ActivityManagerNative; 20767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.content.Context; 21142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.content.ContentValues; 22e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.content.Intent; 23142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.content.res.Configuration; 24ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.content.SharedPreferences; 25142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.database.SQLException; 26142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.net.Uri; 27767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.AsyncResult; 28767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Handler; 29767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Looper; 30767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Message; 3195a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager; 3295a1d1a89e383dab893750638c2393dec54833ffWink Savilleimport android.os.PowerManager.WakeLock; 33767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.Registrant; 34767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.RegistrantList; 35142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.os.RemoteException; 36767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.os.SystemProperties; 37ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport android.preference.PreferenceManager; 38767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.provider.Settings; 39142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport android.provider.Telephony; 40767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.CellLocation; 41767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.PhoneNumberUtils; 42767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.telephony.ServiceState; 43e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 44767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.text.TextUtils; 45767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.util.Log; 46767a662ecde33c3979bf02b793d392aca0403162Wink Saville 471c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganeshimport com.android.internal.telephony.Call; 48767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CallStateException; 4990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalinkimport com.android.internal.telephony.CommandException; 50767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CommandsInterface; 51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Connection; 52767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.DataConnection; 53142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville// TODO(Moto): need to move MccTable from telephony.gsm to telephony 54142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville// since there is no difference between CDMA and GSM for MccTable and 55142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville// CDMA uses gsm's MccTable is not good. 56142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport com.android.internal.telephony.gsm.MccTable; 57767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccCard; 58ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krauseimport com.android.internal.telephony.IccException; 59767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccFileHandler; 60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 61767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 62767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.MmiCode; 63767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.Phone; 64767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneBase; 65767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneNotifier; 66767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneProxy; 67767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneSubInfo; 68767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.RILConstants; 69e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport com.android.internal.telephony.TelephonyIntents; 709bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport com.android.internal.telephony.TelephonyProperties; 71767a662ecde33c3979bf02b793d392aca0403162Wink Saville 72142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA; 73142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC; 74142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY; 75142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 76767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport java.util.List; 7795a1d1a89e383dab893750638c2393dec54833ffWink Saville 78e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 79e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Matcher; 80e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Liimport java.util.regex.Pattern; 81e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 82767a662ecde33c3979bf02b793d392aca0403162Wink Saville/** 83767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@hide} 84767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 85767a662ecde33c3979bf02b793d392aca0403162Wink Savillepublic class CDMAPhone extends PhoneBase { 86767a662ecde33c3979bf02b793d392aca0403162Wink Saville static final String LOG_TAG = "CDMA"; 87e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final boolean DBG = true; 88767a662ecde33c3979bf02b793d392aca0403162Wink Saville 8922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // Default Emergency Callback Mode exit timer 90019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang private static final int DEFAULT_ECM_EXIT_TIMER_VALUE = 300000; 9195a1d1a89e383dab893750638c2393dec54833ffWink Saville 92ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause static final String VM_COUNT_CDMA = "vm_count_key_cdma"; 93ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private static final String VM_NUMBER_CDMA = "vm_number_key_cdma"; 94ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private String mVmNumber = null; 9522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 9695a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int RESTART_ECM_TIMER = 0; // restart Ecm timer 9795a1d1a89e383dab893750638c2393dec54833ffWink Saville static final int CANCEL_ECM_TIMER = 1; // cancel Ecm timer 9895a1d1a89e383dab893750638c2393dec54833ffWink Saville 99767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Instance Variables 100767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaCallTracker mCT; 101767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaSMSDispatcher mSMS; 102767a662ecde33c3979bf02b793d392aca0403162Wink Saville CdmaServiceStateTracker mSST; 103767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimFileHandler mRuimFileHandler; 104767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimRecords mRuimRecords; 105767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimCard mRuimCard; 106767a662ecde33c3979bf02b793d392aca0403162Wink Saville MyHandler h; 107767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimPhoneBookInterfaceManager mRuimPhoneBookInterfaceManager; 108767a662ecde33c3979bf02b793d392aca0403162Wink Saville RuimSmsInterfaceManager mRuimSmsInterfaceManager; 109767a662ecde33c3979bf02b793d392aca0403162Wink Saville PhoneSubInfo mSubInfo; 110e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville EriManager mEriManager; 11195a1d1a89e383dab893750638c2393dec54833ffWink Saville WakeLock mWakeLock; 112767a662ecde33c3979bf02b793d392aca0403162Wink Saville 113e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // mNvLoadedRegistrants are informed after the EVENT_NV_READY 114e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private RegistrantList mNvLoadedRegistrants = new RegistrantList(); 115e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 116e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // mEriFileLoadedRegistrants are informed after the ERI text has been loaded 117e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville private RegistrantList mEriFileLoadedRegistrants = new RegistrantList(); 118dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 11995a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmTimerResetRegistrants are informed after Ecm timer is canceled or re-started 12095a1d1a89e383dab893750638c2393dec54833ffWink Saville private RegistrantList mEcmTimerResetRegistrants = new RegistrantList(); 12195a1d1a89e383dab893750638c2393dec54833ffWink Saville 12295a1d1a89e383dab893750638c2393dec54833ffWink Saville // mEcmExitRespRegistrant is informed after the phone has been exited 123dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //the emergency callback mode 124dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //keep track of if phone is in emergency callback mode 12595a1d1a89e383dab893750638c2393dec54833ffWink Saville private boolean mIsPhoneInEcmState; 12695a1d1a89e383dab893750638c2393dec54833ffWink Saville private Registrant mEcmExitRespRegistrant; 127767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mEsn; 128767a662ecde33c3979bf02b793d392aca0403162Wink Saville private String mMeid; 129e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // string to define how the carrier specifies its own ota sp number 130e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private String mCarrierOtaSpNumSchema; 1312563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 13295a1d1a89e383dab893750638c2393dec54833ffWink Saville // A runnable which is used to automatically exit from Ecm after a period of time. 133dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private Runnable mExitEcmRunnable = new Runnable() { 134dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void run() { 135dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville exitEmergencyCallbackMode(); 136dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 137dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville }; 138767a662ecde33c3979bf02b793d392aca0403162Wink Saville 139767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant mPostDialHandler; 140767a662ecde33c3979bf02b793d392aca0403162Wink Saville 141767a662ecde33c3979bf02b793d392aca0403162Wink Saville 142767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Constructors 143767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier) { 144767a662ecde33c3979bf02b793d392aca0403162Wink Saville this(context,ci,notifier, false); 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 146767a662ecde33c3979bf02b793d392aca0403162Wink Saville 147767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CDMAPhone(Context context, CommandsInterface ci, PhoneNotifier notifier, 148767a662ecde33c3979bf02b793d392aca0403162Wink Saville boolean unitTestMode) { 149767a662ecde33c3979bf02b793d392aca0403162Wink Saville super(notifier, context, unitTestMode); 150767a662ecde33c3979bf02b793d392aca0403162Wink Saville 151767a662ecde33c3979bf02b793d392aca0403162Wink Saville h = new MyHandler(); 152767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM = ci; 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville 154767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.setPhoneType(RILConstants.CDMA_PHONE); 155767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT = new CdmaCallTracker(this); 156767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST = new CdmaServiceStateTracker (this); 157767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSMS = new CdmaSMSDispatcher(this); 158767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIccFileHandler = new RuimFileHandler(this); 159767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords = new RuimRecords(this); 160767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection = new CdmaDataConnectionTracker (this); 161767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimCard = new RuimCard(this); 162767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager = new RuimPhoneBookInterfaceManager(this); 163767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimSmsInterfaceManager = new RuimSmsInterfaceManager(this); 164767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo = new PhoneSubInfo(this); 165e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager = new EriManager(this, context, EriManager.ERI_FROM_XML); 166767a662ecde33c3979bf02b793d392aca0403162Wink Saville 167767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.registerForAvailable(h, EVENT_RADIO_AVAILABLE, null); 168767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords.registerForRecordsLoaded(h, EVENT_RUIM_RECORDS_LOADED, null); 169767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.registerForOffOrNotAvailable(h, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 170767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.registerForOn(h, EVENT_RADIO_ON, null); 171767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.setOnSuppServiceNotification(h, EVENT_SSN, null); 172767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.setOnCallRing(h, EVENT_CALL_RING, null); 173767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.registerForNetworkAttach(h, EVENT_REGISTERED_TO_NETWORK, null); 174767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.registerForNVReady(h, EVENT_NV_READY, null); 175dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.setEmergencyCallbackMode(h, EVENT_EMERGENCY_CALLBACK_MODE_ENTER, null); 176e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 17795a1d1a89e383dab893750638c2393dec54833ffWink Saville PowerManager pm 17895a1d1a89e383dab893750638c2393dec54833ffWink Saville = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 17995a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,LOG_TAG); 180767a662ecde33c3979bf02b793d392aca0403162Wink Saville 181767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Change the system setting 1829bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE, 1839bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh new Integer(RILConstants.CDMA_PHONE).toString()); 184dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 18522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville // This is needed to handle phone process crashes 18622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 18795a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = inEcm.equals("true"); 188ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 189e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // get the string that specifies the carrier OTA Sp number 190e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema = SystemProperties.get( 191e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li TelephonyProperties.PROPERTY_OTASP_NUM_SCHEMA,""); 192e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 193142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator alpha property by retrieving from build-time system property 194142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String operatorAlpha = SystemProperties.get("ro.cdma.home.operator.alpha"); 195142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, operatorAlpha); 196142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 197142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets operator numeric property by retrieving from build-time system property 198142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String operatorNumeric = SystemProperties.get("ro.cdma.home.operator.numeric"); 199142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_NUMERIC, operatorNumeric); 200142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 201142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets iso country property by retrieving from build-time system property 202142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setIsoCountryProperty(operatorNumeric); 203142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 204142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Sets current entry in the telephony carrier table 205142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville updateCurrentCarrierInProvider(operatorNumeric); 206142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 207142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // Updates MCC MNC device configuration information 208142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville updateMccMncConfiguration(operatorNumeric); 209142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 210ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Notify voicemails. 211ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause notifier.notifyMessageWaitingChanged(this); 212767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 213767a662ecde33c3979bf02b793d392aca0403162Wink Saville 214767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void dispose() { 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 216767a662ecde33c3979bf02b793d392aca0403162Wink Saville 217767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Unregister from all former registered events 218767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords.unregisterForRecordsLoaded(h); //EVENT_RUIM_RECORDS_LOADED 219767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unregisterForAvailable(h); //EVENT_RADIO_AVAILABLE 220767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unregisterForOffOrNotAvailable(h); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE 221767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unregisterForOn(h); //EVENT_RADIO_ON 222767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unregisterForNVReady(h); //EVENT_NV_READY 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.unregisterForNetworkAttach(h); //EVENT_REGISTERED_TO_NETWORK 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unSetOnSuppServiceNotification(h); 225767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unSetOnCallRing(h); 226dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 227767a662ecde33c3979bf02b793d392aca0403162Wink Saville 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Force all referenced classes to unregister their former registered events 229767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.dispose(); 230767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection.dispose(); 231767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.dispose(); 232767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSMS.dispose(); 233767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIccFileHandler.dispose(); // instance of RuimFileHandler 234767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords.dispose(); 235767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimCard.dispose(); 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimPhoneBookInterfaceManager.dispose(); 237767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimSmsInterfaceManager.dispose(); 238767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo.dispose(); 239e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager.dispose(); 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 241767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void removeReferences() { 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimPhoneBookInterfaceManager = null; 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimSmsInterfaceManager = null; 246767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSMS = null; 247767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSubInfo = null; 248767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimRecords = null; 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mIccFileHandler = null; 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mRuimCard = null; 251767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mDataConnection = null; 252767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCT = null; 253767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSST = null; 254e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville this.mEriManager = null; 255767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 256767a662ecde33c3979bf02b793d392aca0403162Wink Saville 257767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void finalize() { 258e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if(DBG) Log.d(LOG_TAG, "CDMAPhone finalized"); 25995a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 26095a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "UNEXPECTED; mWakeLock is held when finalizing."); 26195a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 26295a1d1a89e383dab893750638c2393dec54833ffWink Saville } 263767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 264767a662ecde33c3979bf02b793d392aca0403162Wink Saville 265767a662ecde33c3979bf02b793d392aca0403162Wink Saville 266767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Overridden from Phone 267767a662ecde33c3979bf02b793d392aca0403162Wink Saville public ServiceState getServiceState() { 268767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.ss; 269767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 270767a662ecde33c3979bf02b793d392aca0403162Wink Saville 271767a662ecde33c3979bf02b793d392aca0403162Wink Saville public Phone.State 272767a662ecde33c3979bf02b793d392aca0403162Wink Saville getState() { 273767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.state; 274767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 275767a662ecde33c3979bf02b793d392aca0403162Wink Saville 276767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String 277767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPhoneName() { 278767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "CDMA"; 279767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 280767a662ecde33c3979bf02b793d392aca0403162Wink Saville 281767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canTransfer() { 282767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canTransfer: not possible in CDMA"); 283767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 284767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 285767a662ecde33c3979bf02b793d392aca0403162Wink Saville 286767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall 287767a662ecde33c3979bf02b793d392aca0403162Wink Saville getRingingCall() { 288767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.ringingCall; 289767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 290767a662ecde33c3979bf02b793d392aca0403162Wink Saville 291767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setMute(boolean muted) { 292767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.setMute(muted); 293767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 294767a662ecde33c3979bf02b793d392aca0403162Wink Saville 295767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getMute() { 296767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.getMute(); 297767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 298767a662ecde33c3979bf02b793d392aca0403162Wink Saville 299767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void conference() throws CallStateException { 300767a662ecde33c3979bf02b793d392aca0403162Wink Saville // three way calls in CDMA will be handled by feature codes 301767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "conference: not possible in CDMA"); 302767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 303767a662ecde33c3979bf02b793d392aca0403162Wink Saville 304767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 305767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.setPreferredVoicePrivacy(enable, onComplete); 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 307767a662ecde33c3979bf02b793d392aca0403162Wink Saville 308767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 309767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCM.getPreferredVoicePrivacy(onComplete); 310767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 311767a662ecde33c3979bf02b793d392aca0403162Wink Saville 312767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void clearDisconnected() { 313767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.clearDisconnected(); 314767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 315767a662ecde33c3979bf02b793d392aca0403162Wink Saville 316767a662ecde33c3979bf02b793d392aca0403162Wink Saville public DataActivityState getDataActivityState() { 317767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataActivityState ret = DataActivityState.NONE; 318767a662ecde33c3979bf02b793d392aca0403162Wink Saville 319f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville if (mSST.getCurrentCdmaDataConnectionState() == ServiceState.STATE_IN_SERVICE) { 320767a662ecde33c3979bf02b793d392aca0403162Wink Saville 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch (mDataConnection.getActivity()) { 322767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAIN: 323767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAIN; 324767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 325767a662ecde33c3979bf02b793d392aca0403162Wink Saville 326767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAOUT: 327767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAOUT; 328767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 329767a662ecde33c3979bf02b793d392aca0403162Wink Saville 330767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAINANDOUT: 331767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAINANDOUT; 332767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 333e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 334e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville case DORMANT: 335e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataActivityState.DORMANT; 336e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 337767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 340767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 341767a662ecde33c3979bf02b793d392aca0403162Wink Saville 342767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifySignalStrength() { 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifySignalStrength(this); 345767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 346767a662ecde33c3979bf02b793d392aca0403162Wink Saville 347767a662ecde33c3979bf02b793d392aca0403162Wink Saville public Connection 348767a662ecde33c3979bf02b793d392aca0403162Wink Saville dial (String dialString) throws CallStateException { 349767a662ecde33c3979bf02b793d392aca0403162Wink Saville // Need to make sure dialString gets parsed properly 350767a662ecde33c3979bf02b793d392aca0403162Wink Saville String newDialString = PhoneNumberUtils.stripSeparators(dialString); 351767a662ecde33c3979bf02b793d392aca0403162Wink Saville 352d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville if (!mCT.foregroundCall.isIdle()) { 353d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville FeatureCode fc = FeatureCode.newFromDialString(newDialString, this); 354d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville if (fc != null) { 355d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville //mMmiRegistrants.notifyRegistrants(new AsyncResult(null, fc, null)); 356d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville fc.processCode(); 35722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville return null; 358767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 359767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 36022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville return mCT.dial(newDialString); 361767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 362767a662ecde33c3979bf02b793d392aca0403162Wink Saville 363e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public SignalStrength getSignalStrength() { 364e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return mSST.mSignalStrength; 365767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 366767a662ecde33c3979bf02b793d392aca0403162Wink Saville 367767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville getMessageWaitingIndicator() { 369ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return (getVoiceMessageCount() > 0); 370767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 371767a662ecde33c3979bf02b793d392aca0403162Wink Saville 372767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<? extends MmiCode> 373767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPendingMmiCodes() { 374767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method getPendingMmiCodes is NOT supported in CDMA!"); 375767a662ecde33c3979bf02b793d392aca0403162Wink Saville return null; 376767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 377767a662ecde33c3979bf02b793d392aca0403162Wink Saville 378767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForSuppServiceNotification( 379767a662ecde33c3979bf02b793d392aca0403162Wink Saville Handler h, int what, Object obj) { 380767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method registerForSuppServiceNotification is NOT supported in CDMA!"); 381767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 382767a662ecde33c3979bf02b793d392aca0403162Wink Saville 383767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getBackgroundCall() { 384767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.backgroundCall; 385767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 386767a662ecde33c3979bf02b793d392aca0403162Wink Saville 387767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handleInCallMmiCommands(String dialString) { 388767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method handleInCallMmiCommands is NOT supported in CDMA!"); 389767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 390767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 391767a662ecde33c3979bf02b793d392aca0403162Wink Saville 392767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 393767a662ecde33c3979bf02b793d392aca0403162Wink Saville setNetworkSelectionModeAutomatic(Message response) { 394767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setNetworkSelectionModeAutomatic is NOT supported in CDMA!"); 395767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 396767a662ecde33c3979bf02b793d392aca0403162Wink Saville 397767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForSuppServiceNotification(Handler h) { 398767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method unregisterForSuppServiceNotification is NOT supported in CDMA!"); 399767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 400767a662ecde33c3979bf02b793d392aca0403162Wink Saville 401767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 402767a662ecde33c3979bf02b793d392aca0403162Wink Saville acceptCall() throws CallStateException { 403767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.acceptCall(); 404767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 405767a662ecde33c3979bf02b793d392aca0403162Wink Saville 406767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 407767a662ecde33c3979bf02b793d392aca0403162Wink Saville rejectCall() throws CallStateException { 408767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.rejectCall(); 409767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 410767a662ecde33c3979bf02b793d392aca0403162Wink Saville 411767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 412767a662ecde33c3979bf02b793d392aca0403162Wink Saville switchHoldingAndActive() throws CallStateException { 413767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.switchWaitingOrHoldingAndActive(); 414767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 415767a662ecde33c3979bf02b793d392aca0403162Wink Saville 416767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1Number() { 417f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getMdnNumber(); 418767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 419767a662ecde33c3979bf02b793d392aca0403162Wink Saville 42022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville public String getCdmaPrlVersion(){ 421daccacb865947c00f277f1823333e2fbf91e652aWink Saville return mSST.getPrlVersion(); 42222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville } 42322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville 424019581bf6055eb69ee7e4cb844dafe2b6c23597eCheng Yang public String getCdmaMin() { 425f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mSST.getCdmaMin(); 426e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 427e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 4289e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public boolean isMinInfoReady() { 4299e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo return mSST.isMinInfoReady(); 4309e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 4319e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 432767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallWaiting(Message onComplete) { 433767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.queryCallWaiting(CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 434767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 435767a662ecde33c3979bf02b793d392aca0403162Wink Saville 436767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 437767a662ecde33c3979bf02b793d392aca0403162Wink Saville setRadioPower(boolean power) { 438767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.setRadioPower(power); 439767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 440767a662ecde33c3979bf02b793d392aca0403162Wink Saville 441767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEsn() { 442767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mEsn; 443767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 444767a662ecde33c3979bf02b793d392aca0403162Wink Saville 445767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMeid() { 446767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mMeid; 447767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 448767a662ecde33c3979bf02b793d392aca0403162Wink Saville 449767a662ecde33c3979bf02b793d392aca0403162Wink Saville //returns MEID in CDMA 450767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceId() { 451767a662ecde33c3979bf02b793d392aca0403162Wink Saville return getMeid(); 452767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 453767a662ecde33c3979bf02b793d392aca0403162Wink Saville 454767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getDeviceSvn() { 455767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "getDeviceSvn(): return 0"); 456767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 457767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 458767a662ecde33c3979bf02b793d392aca0403162Wink Saville 459767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getSubscriberId() { 460142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return mSST.getImsi(); 461767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 462767a662ecde33c3979bf02b793d392aca0403162Wink Saville 463767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canConference() { 464767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "canConference: not possible in CDMA"); 465767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 466767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 467767a662ecde33c3979bf02b793d392aca0403162Wink Saville 468767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CellLocation getCellLocation() { 469767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSST.cellLoc; 470767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 471767a662ecde33c3979bf02b793d392aca0403162Wink Saville 472767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean disableDataConnectivity() { 473767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mDataConnection.setDataEnabled(false); 474767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 475767a662ecde33c3979bf02b793d392aca0403162Wink Saville 476767a662ecde33c3979bf02b793d392aca0403162Wink Saville public CdmaCall getForegroundCall() { 477767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.foregroundCall; 478767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 479767a662ecde33c3979bf02b793d392aca0403162Wink Saville 480767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 481767a662ecde33c3979bf02b793d392aca0403162Wink Saville selectNetworkManually(com.android.internal.telephony.gsm.NetworkInfo network, 482767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response) { 483767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "selectNetworkManually: not possible in CDMA"); 484767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 485767a662ecde33c3979bf02b793d392aca0403162Wink Saville 486767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 487dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mPostDialHandler = new Registrant(h, what, obj); 488767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 489767a662ecde33c3979bf02b793d392aca0403162Wink Saville 490767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean handlePinMmi(String dialString) { 491767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method handlePinMmi is NOT supported in CDMA!"); 492767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 493767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 494767a662ecde33c3979bf02b793d392aca0403162Wink Saville 495767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean isDataConnectivityPossible() { 496767a662ecde33c3979bf02b793d392aca0403162Wink Saville boolean noData = mDataConnection.getDataEnabled() && 497767a662ecde33c3979bf02b793d392aca0403162Wink Saville getDataConnectionState() == DataState.DISCONNECTED; 498767a662ecde33c3979bf02b793d392aca0403162Wink Saville return !noData && getIccCard().getState() == IccCard.State.READY && 499767a662ecde33c3979bf02b793d392aca0403162Wink Saville getServiceState().getState() == ServiceState.STATE_IN_SERVICE && 500767a662ecde33c3979bf02b793d392aca0403162Wink Saville (mDataConnection.getDataOnRoamingEnabled() || !getServiceState().getRoaming()); 501767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 502767a662ecde33c3979bf02b793d392aca0403162Wink Saville 503767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setLine1Number(String alphaTag, String number, Message onComplete) { 504767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setLine1Number: not possible in CDMA"); 505767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 506767a662ecde33c3979bf02b793d392aca0403162Wink Saville 507767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccCard getIccCard() { 508767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mRuimCard; 509767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 510767a662ecde33c3979bf02b793d392aca0403162Wink Saville 511767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getIccSerialNumber() { 512767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mRuimRecords.iccid; 513767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 514767a662ecde33c3979bf02b793d392aca0403162Wink Saville 515767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallWaiting(boolean enable, Message onComplete) { 516767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "method setCallWaiting is NOT supported in CDMA!"); 517767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 518767a662ecde33c3979bf02b793d392aca0403162Wink Saville 519767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void updateServiceLocation(Message response) { 520767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.getLacAndCid(response); 521767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 522767a662ecde33c3979bf02b793d392aca0403162Wink Saville 523767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setDataRoamingEnabled(boolean enable) { 524767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection.setDataOnRoamingEnabled(enable); 525767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 526767a662ecde33c3979bf02b793d392aca0403162Wink Saville 527dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 528dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.registerForCdmaOtaProvision(h, what, obj); 529dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 530dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 531dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 532dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.unregisterForCdmaOtaProvision(h); 533dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 534dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 5359e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 5369e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.registerForSubscriptionInfoReady(h, what, obj); 5379e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5389e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 5399e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo public void unregisterForSubscriptionInfoReady(Handler h) { 5409e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo mSST.unregisterForSubscriptionInfoReady(h); 5419e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo } 5429e652dcc213b96087ccadc730b1e6b1891cd02aeJinghui Guo 543dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj) { 54495a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant = new Registrant (h, what, obj); 545dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 546dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 547dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unsetOnEcbModeExitResponse(Handler h) { 54895a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.clear(); 549dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 550dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 551dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj) { 55222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.registerForCallWaiting(h, what, obj); 553dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 554dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 555dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void unregisterForCallWaiting(Handler h) { 55622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville mCT.unregisterForCallWaiting(h); 557dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 558dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 559767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 560767a662ecde33c3979bf02b793d392aca0403162Wink Saville getNeighboringCids(Message response) { 56190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink /* 56290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * This is currently not implemented. At least as of June 56390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * 2009, there is no neighbor cell information available for 56490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * CDMA because some party is resisting making this 56590cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * information readily available. Consequently, calling this 56690cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * function can have no useful effect. This situation may 56790cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink * (and hopefully will) change in the future. 56890cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink */ 56990cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink if (response != null) { 57090cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException ce = new CommandException( 57190cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink CommandException.Error.REQUEST_NOT_SUPPORTED); 57290cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink AsyncResult.forMessage(response).exception = ce; 57390cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink response.sendToTarget(); 57490cb947c22f05f8ac68ceff1d74af15bf38268c6Tammo Spalink } 575767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 576767a662ecde33c3979bf02b793d392aca0403162Wink Saville 577767a662ecde33c3979bf02b793d392aca0403162Wink Saville public DataState getDataConnectionState() { 578767a662ecde33c3979bf02b793d392aca0403162Wink Saville DataState ret = DataState.DISCONNECTED; 579767a662ecde33c3979bf02b793d392aca0403162Wink Saville 580767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ((SystemProperties.get("adb.connected", "").length() > 0) 581767a662ecde33c3979bf02b793d392aca0403162Wink Saville && (SystemProperties.get("android.net.use-adb-networking", "") 582767a662ecde33c3979bf02b793d392aca0403162Wink Saville .length() > 0)) { 583767a662ecde33c3979bf02b793d392aca0403162Wink Saville // We're connected to an ADB host and we have USB networking 584767a662ecde33c3979bf02b793d392aca0403162Wink Saville // turned on. No matter what the radio state is, 585767a662ecde33c3979bf02b793d392aca0403162Wink Saville // we report data connected 586767a662ecde33c3979bf02b793d392aca0403162Wink Saville 587767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTED; 58844038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville } else if (mSST == null) { 589e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // Radio Technology Change is ongoning, dispose() and removeReferences() have 590e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // already been called 59144038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville 592e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville ret = DataState.DISCONNECTED; 593f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville } else if (mSST.getCurrentCdmaDataConnectionState() != ServiceState.STATE_IN_SERVICE) { 594767a662ecde33c3979bf02b793d392aca0403162Wink Saville // If we're out of service, open TCP sockets may still work 595767a662ecde33c3979bf02b793d392aca0403162Wink Saville // but no data will flow 596767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 597767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 598767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch (mDataConnection.getState()) { 599767a662ecde33c3979bf02b793d392aca0403162Wink Saville case FAILED: 600767a662ecde33c3979bf02b793d392aca0403162Wink Saville case IDLE: 601767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 602767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 603767a662ecde33c3979bf02b793d392aca0403162Wink Saville 604767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTED: 605767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DISCONNECTING: 606767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( mCT.state != Phone.State.IDLE 607767a662ecde33c3979bf02b793d392aca0403162Wink Saville && !mSST.isConcurrentVoiceAndData()) { 608767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.SUSPENDED; 609767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 610767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTED; 611767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 612767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 613767a662ecde33c3979bf02b793d392aca0403162Wink Saville 614767a662ecde33c3979bf02b793d392aca0403162Wink Saville case INITING: 615767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTING: 616767a662ecde33c3979bf02b793d392aca0403162Wink Saville case SCANNING: 617767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTING; 618767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 619767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 620767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 621767a662ecde33c3979bf02b793d392aca0403162Wink Saville 622767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 623767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 624767a662ecde33c3979bf02b793d392aca0403162Wink Saville 625767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendUssdResponse(String ussdMessge) { 626767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "sendUssdResponse: not possible in CDMA"); 627767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 628767a662ecde33c3979bf02b793d392aca0403162Wink Saville 629767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void sendDtmf(char c) { 630767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 631767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 632767a662ecde33c3979bf02b793d392aca0403162Wink Saville "sendDtmf called with invalid character '" + c + "'"); 633767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 634767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (mCT.state == Phone.State.OFFHOOK) { 635767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.sendDtmf(c, null); 636767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 637767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 638767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 639767a662ecde33c3979bf02b793d392aca0403162Wink Saville 640767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void startDtmf(char c) { 641767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (!PhoneNumberUtils.is12Key(c)) { 642767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 643767a662ecde33c3979bf02b793d392aca0403162Wink Saville "startDtmf called with invalid character '" + c + "'"); 644767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 645767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.startDtmf(c, null); 646767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 647767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 648767a662ecde33c3979bf02b793d392aca0403162Wink Saville 649767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void stopDtmf() { 650767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.stopDtmf(null); 651767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 652767a662ecde33c3979bf02b793d392aca0403162Wink Saville 653dafa22a3ef9328c72319aeec605f6a6d20e46080jsh public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 654e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville boolean check = true; 655e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville for (int itr = 0;itr < dtmfString.length(); itr++) { 656e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if (!PhoneNumberUtils.is12Key(dtmfString.charAt(itr))) { 657e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Log.e(LOG_TAG, 658e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville "sendDtmf called with invalid character '" + dtmfString.charAt(itr)+ "'"); 659e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville check = false; 660e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville break; 661e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 662e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 663e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if ((mCT.state == Phone.State.OFFHOOK)&&(check)) { 664dafa22a3ef9328c72319aeec605f6a6d20e46080jsh mCM.sendBurstDtmf(dtmfString, on, off, onComplete); 665e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 666e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 667e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 668767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getAvailableNetworks(Message response) { 669767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getAvailableNetworks: not possible in CDMA"); 670767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 671767a662ecde33c3979bf02b793d392aca0403162Wink Saville 672767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, Message onComplete) { 673dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Log.e(LOG_TAG, "setOutgoingCallerIdDisplay: not possible in CDMA"); 674767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 675767a662ecde33c3979bf02b793d392aca0403162Wink Saville 676767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void enableLocationUpdates() { 677767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.enableLocationUpdates(); 678767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 679767a662ecde33c3979bf02b793d392aca0403162Wink Saville 680767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 681767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @deprecated 682767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 683767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getPdpContextList(Message response) { 684767a662ecde33c3979bf02b793d392aca0403162Wink Saville getDataCallList(response); 685767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 686767a662ecde33c3979bf02b793d392aca0403162Wink Saville 687767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getDataCallList(Message response) { 688767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getDataCallList(response); 689767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 690767a662ecde33c3979bf02b793d392aca0403162Wink Saville 691767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getDataRoamingEnabled() { 692767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mDataConnection.getDataOnRoamingEnabled(); 693767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 694767a662ecde33c3979bf02b793d392aca0403162Wink Saville 695767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<DataConnection> getCurrentDataConnectionList () { 696767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mDataConnection.getAllDataConnections(); 697767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 698767a662ecde33c3979bf02b793d392aca0403162Wink Saville 699767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setVoiceMailNumber(String alphaTag, 700767a662ecde33c3979bf02b793d392aca0403162Wink Saville String voiceMailNumber, 701767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 702ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause Message resp; 703ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mVmNumber = voiceMailNumber; 704ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause resp = h.obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete); 705ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mRuimRecords.setVoiceMailNumber(alphaTag, mVmNumber, resp); 706767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 707767a662ecde33c3979bf02b793d392aca0403162Wink Saville 708767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailNumber() { 709ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause String number = null; 710ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 711ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // TODO(Moto): The default value of voicemail number should be read from a system property 712ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause number = sp.getString(VM_NUMBER_CDMA, "*86"); 713ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return number; 714dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 715dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 716dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /* Returns Number of Voicemails 717dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @hide 718dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 719ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause public int getVoiceMessageCount() { 720ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause int voicemailCount = mRuimRecords.getVoiceMessageCount(); 721ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // If mRuimRecords.getVoiceMessageCount returns zero, then there is possibility 722ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // that phone was power cycled and would have lost the voicemail count. 723ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // So get the count from preferences. 724ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause if (voicemailCount == 0) { 725ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 726ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause voicemailCount = sp.getInt(VM_COUNT_CDMA, 0); 727ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 728ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause return voicemailCount; 729767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 730767a662ecde33c3979bf02b793d392aca0403162Wink Saville 731767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getVoiceMailAlphaTag() { 732767a662ecde33c3979bf02b793d392aca0403162Wink Saville // TODO: Where can we get this value has to be clarified with QC. 733767a662ecde33c3979bf02b793d392aca0403162Wink Saville String ret = "";//TODO: Remove = "", if we know where to get this value. 734767a662ecde33c3979bf02b793d392aca0403162Wink Saville 735767a662ecde33c3979bf02b793d392aca0403162Wink Saville //ret = mSIMRecords.getVoiceMailAlphaTag(); 736767a662ecde33c3979bf02b793d392aca0403162Wink Saville 737767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ret == null || ret.length() == 0) { 738767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mContext.getText( 739767a662ecde33c3979bf02b793d392aca0403162Wink Saville com.android.internal.R.string.defaultVoiceMailAlphaTag).toString(); 740767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 741767a662ecde33c3979bf02b793d392aca0403162Wink Saville 742767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 743767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 744767a662ecde33c3979bf02b793d392aca0403162Wink Saville 745767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean enableDataConnectivity() { 746dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 747dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // block data activities when phone is in emergency callback mode 74895a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState) { 749dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Intent intent = new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS); 750dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ActivityManagerNative.broadcastStickyIntent(intent, null); 751dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return false; 752dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } else { 753dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mDataConnection.setDataEnabled(true); 754dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 755767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 756767a662ecde33c3979bf02b793d392aca0403162Wink Saville 757767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void disableLocationUpdates() { 758767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.disableLocationUpdates(); 759767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 760767a662ecde33c3979bf02b793d392aca0403162Wink Saville 761767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getIccRecordsLoaded() { 762767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mRuimRecords.getRecordsLoaded(); 763767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 764767a662ecde33c3979bf02b793d392aca0403162Wink Saville 765767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 766767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingOption: not possible in CDMA"); 767767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 768767a662ecde33c3979bf02b793d392aca0403162Wink Saville 769767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCallForwardingOption(int commandInterfaceCFAction, 770767a662ecde33c3979bf02b793d392aca0403162Wink Saville int commandInterfaceCFReason, 771767a662ecde33c3979bf02b793d392aca0403162Wink Saville String dialingNumber, 772767a662ecde33c3979bf02b793d392aca0403162Wink Saville int timerSeconds, 773767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 774767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "setCallForwardingOption: not possible in CDMA"); 775767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 776767a662ecde33c3979bf02b793d392aca0403162Wink Saville 777767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 778767a662ecde33c3979bf02b793d392aca0403162Wink Saville getOutgoingCallerIdDisplay(Message onComplete) { 779767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getOutgoingCallerIdDisplay: not possible in CDMA"); 780767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 781767a662ecde33c3979bf02b793d392aca0403162Wink Saville 782767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean 783767a662ecde33c3979bf02b793d392aca0403162Wink Saville getCallForwardingIndicator() { 784767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getCallForwardingIndicator: not possible in CDMA"); 785767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 786767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 787767a662ecde33c3979bf02b793d392aca0403162Wink Saville 788767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void explicitCallTransfer() { 789767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "explicitCallTransfer: not possible in CDMA"); 790767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 791767a662ecde33c3979bf02b793d392aca0403162Wink Saville 792767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getLine1AlphaTag() { 793767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "getLine1AlphaTag: not possible in CDMA"); 794767a662ecde33c3979bf02b793d392aca0403162Wink Saville return null; 795767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 796767a662ecde33c3979bf02b793d392aca0403162Wink Saville 797dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 7981c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify any interested party of a Phone state change {@link Phone.State} 799767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 800767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyPhoneStateChanged() { 801767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyPhoneState(this); 802767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 803767a662ecde33c3979bf02b793d392aca0403162Wink Saville 804767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 8051c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 8061c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 807767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 8081c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh /*package*/ void notifyPreciseCallStateChanged() { 809767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 8101c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh super.notifyPreciseCallStateChangedP(); 811767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 812767a662ecde33c3979bf02b793d392aca0403162Wink Saville 813767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyServiceStateChanged(ServiceState ss) { 814767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyServiceStateChangedP(ss); 815767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 816767a662ecde33c3979bf02b793d392aca0403162Wink Saville 817767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyLocationChanged() { 818767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNotifier.notifyCellLocation(this); 819767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 820767a662ecde33c3979bf02b793d392aca0403162Wink Saville 821767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyNewRingingConnection(Connection c) { 822767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* we'd love it if this was package-scoped*/ 823767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.notifyNewRingingConnectionP(c); 824767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 825767a662ecde33c3979bf02b793d392aca0403162Wink Saville 826767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 827767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Notifiy registrants of a RING event. 828767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 829767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyIncomingRing() { 830767a662ecde33c3979bf02b793d392aca0403162Wink Saville AsyncResult ar = new AsyncResult(null, this, null); 831767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIncomingRingRegistrants.notifyRegistrants(ar); 832767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 833767a662ecde33c3979bf02b793d392aca0403162Wink Saville 834767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void notifyDisconnect(Connection cn) { 835767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDisconnectRegistrants.notifyResult(cn); 836767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 837767a662ecde33c3979bf02b793d392aca0403162Wink Saville 838767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyUnknownConnection() { 839767a662ecde33c3979bf02b793d392aca0403162Wink Saville mUnknownConnectionRegistrants.notifyResult(this); 840767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 841767a662ecde33c3979bf02b793d392aca0403162Wink Saville 842dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville void sendEmergencyCallbackModeChange(){ 843dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville //Send an Intent 844dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville Intent intent = new Intent(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED); 84595a1d1a89e383dab893750638c2393dec54833ffWink Saville intent.putExtra(PHONE_IN_ECM_STATE, mIsPhoneInEcmState); 846dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville ActivityManagerNative.broadcastStickyIntent(intent,null); 84795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) Log.d(LOG_TAG, "sendEmergencyCallbackModeChange"); 848dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 849dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 850767a662ecde33c3979bf02b793d392aca0403162Wink Saville /*package*/ void 851767a662ecde33c3979bf02b793d392aca0403162Wink Saville updateMessageWaitingIndicator(boolean mwi) { 852767a662ecde33c3979bf02b793d392aca0403162Wink Saville // this also calls notifyMessageWaitingIndicator() 853767a662ecde33c3979bf02b793d392aca0403162Wink Saville mRuimRecords.setVoiceMessageWaiting(1, mwi ? -1 : 0); 854767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 855767a662ecde33c3979bf02b793d392aca0403162Wink Saville 856ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /* This function is overloaded to send number of voicemails instead of sending true/false */ 857ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /*package*/ void 858ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause updateMessageWaitingIndicator(int mwi) { 859ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause mRuimRecords.setVoiceMessageWaiting(1, mwi); 860d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville } 861767a662ecde33c3979bf02b793d392aca0403162Wink Saville 862767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 863767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Removes the given FC from the pending list and notifies 864767a662ecde33c3979bf02b793d392aca0403162Wink Saville * registrants that it is complete. 865767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @param fc FC that is done 866767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 867d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville /*package*/ void onFeatureCodeDone(FeatureCode fc) { 868767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* Only notify complete if it's on the pending list. 869767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Otherwise, it's already been handled (eg, previously canceled). 870767a662ecde33c3979bf02b793d392aca0403162Wink Saville * The exception is cancellation of an incoming USSD-REQUEST, which is 871767a662ecde33c3979bf02b793d392aca0403162Wink Saville * not on the list. 872767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 873d6c5d527d3fa73dafc6e7cd36e4d6922b6d31845Wink Saville mMmiCompleteRegistrants.notifyRegistrants(new AsyncResult(null, fc, null)); 874767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 875767a662ecde33c3979bf02b793d392aca0403162Wink Saville 876dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 877dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 878dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void exitEmergencyCallbackMode() { 87995a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mWakeLock.isHeld()) { 88095a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.release(); 88195a1d1a89e383dab893750638c2393dec54833ffWink Saville } 882dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Send a message which will invoke handleExitEmergencyCallbackMode 883dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mCM.exitEmergencyCallbackMode(h.obtainMessage(EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE)); 884dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 885dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 886dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleEnterEmergencyCallbackMode(Message msg) { 88795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 88895a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleEnterEmergencyCallbackMode,mIsPhoneInEcmState= " 88995a1d1a89e383dab893750638c2393dec54833ffWink Saville + mIsPhoneInEcmState); 89095a1d1a89e383dab893750638c2393dec54833ffWink Saville } 89195a1d1a89e383dab893750638c2393dec54833ffWink Saville // if phone is not in Ecm mode, and it's changed to Ecm mode 89295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState == false) { 89395a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = true; 894dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // notify change 895dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 89622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "true"); 8972563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville 898dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // Post this runnable so we will automatically exit 899dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if no one invokes exitEmergencyCallbackMode() directly. 90022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville long delayInMillis = SystemProperties.getLong( 90122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 902dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville h.postDelayed(mExitEcmRunnable, delayInMillis); 90395a1d1a89e383dab893750638c2393dec54833ffWink Saville // We don't want to go to sleep while in Ecm 90495a1d1a89e383dab893750638c2393dec54833ffWink Saville mWakeLock.acquire(); 905dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 906dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 907dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 908dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private void handleExitEmergencyCallbackMode(Message msg) { 909dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville AsyncResult ar = (AsyncResult)msg.obj; 91095a1d1a89e383dab893750638c2393dec54833ffWink Saville if (DBG) { 91195a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.d(LOG_TAG, "handleExitEmergencyCallbackMode,ar.exception , mIsPhoneInEcmState " 91295a1d1a89e383dab893750638c2393dec54833ffWink Saville + ar.exception + mIsPhoneInEcmState); 91395a1d1a89e383dab893750638c2393dec54833ffWink Saville } 91495a1d1a89e383dab893750638c2393dec54833ffWink Saville // Remove pending exit Ecm runnable, if any 915dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville h.removeCallbacks(mExitEcmRunnable); 916dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 91795a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mEcmExitRespRegistrant != null) { 91895a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmExitRespRegistrant.notifyRegistrant(ar); 919dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 920dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // if exiting ecm success 921dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (ar.exception == null) { 92295a1d1a89e383dab893750638c2393dec54833ffWink Saville if (mIsPhoneInEcmState) { 92395a1d1a89e383dab893750638c2393dec54833ffWink Saville mIsPhoneInEcmState = false; 92422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false"); 925dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 926dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // send an Intent 927dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville sendEmergencyCallbackModeChange(); 92833777d2096c6877ab925db562067ac7272076399Libin Tang // Re-initiate data connection 92933777d2096c6877ab925db562067ac7272076399Libin Tang mDataConnection.setDataEnabled(true); 930dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 931dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 932dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 93395a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 93495a1d1a89e383dab893750638c2393dec54833ffWink Saville * Handle to cancel or restart Ecm timer in emergency call back mode 93595a1d1a89e383dab893750638c2393dec54833ffWink Saville * if action is CANCEL_ECM_TIMER, cancel Ecm timer and notify apps the timer is canceled; 93695a1d1a89e383dab893750638c2393dec54833ffWink Saville * otherwise, restart Ecm timer and notify apps the timer is restarted. 93795a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 93895a1d1a89e383dab893750638c2393dec54833ffWink Saville void handleTimerInEmergencyCallbackMode(int action) { 93995a1d1a89e383dab893750638c2393dec54833ffWink Saville switch(action) { 94095a1d1a89e383dab893750638c2393dec54833ffWink Saville case CANCEL_ECM_TIMER: 94195a1d1a89e383dab893750638c2393dec54833ffWink Saville h.removeCallbacks(mExitEcmRunnable); 94295a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.notifyResult(new Boolean(true)); 94395a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 94495a1d1a89e383dab893750638c2393dec54833ffWink Saville case RESTART_ECM_TIMER: 94595a1d1a89e383dab893750638c2393dec54833ffWink Saville long delayInMillis = SystemProperties.getLong( 94695a1d1a89e383dab893750638c2393dec54833ffWink Saville TelephonyProperties.PROPERTY_ECM_EXIT_TIMER, DEFAULT_ECM_EXIT_TIMER_VALUE); 94795a1d1a89e383dab893750638c2393dec54833ffWink Saville h.postDelayed(mExitEcmRunnable, delayInMillis); 94895a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.notifyResult(new Boolean(false)); 94995a1d1a89e383dab893750638c2393dec54833ffWink Saville break; 95095a1d1a89e383dab893750638c2393dec54833ffWink Saville default: 95195a1d1a89e383dab893750638c2393dec54833ffWink Saville Log.e(LOG_TAG, "handleTimerInEmergencyCallbackMode, unsupported action " + action); 95295a1d1a89e383dab893750638c2393dec54833ffWink Saville } 95395a1d1a89e383dab893750638c2393dec54833ffWink Saville } 95495a1d1a89e383dab893750638c2393dec54833ffWink Saville 95595a1d1a89e383dab893750638c2393dec54833ffWink Saville /** 95695a1d1a89e383dab893750638c2393dec54833ffWink Saville * Registration point for Ecm timer reset 95795a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param h handler to notify 95895a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param what User-defined message code 95995a1d1a89e383dab893750638c2393dec54833ffWink Saville * @param obj placed in Message.obj 96095a1d1a89e383dab893750638c2393dec54833ffWink Saville */ 96195a1d1a89e383dab893750638c2393dec54833ffWink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 96295a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.addUnique(h, what, obj); 96395a1d1a89e383dab893750638c2393dec54833ffWink Saville } 96495a1d1a89e383dab893750638c2393dec54833ffWink Saville 96595a1d1a89e383dab893750638c2393dec54833ffWink Saville public void unregisterForEcmTimerReset(Handler h) { 96695a1d1a89e383dab893750638c2393dec54833ffWink Saville mEcmTimerResetRegistrants.remove(h); 96795a1d1a89e383dab893750638c2393dec54833ffWink Saville } 96895a1d1a89e383dab893750638c2393dec54833ffWink Saville 969767a662ecde33c3979bf02b793d392aca0403162Wink Saville //***** Inner Classes 970767a662ecde33c3979bf02b793d392aca0403162Wink Saville class MyHandler extends Handler { 971767a662ecde33c3979bf02b793d392aca0403162Wink Saville MyHandler() { 972767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 973767a662ecde33c3979bf02b793d392aca0403162Wink Saville 974767a662ecde33c3979bf02b793d392aca0403162Wink Saville MyHandler(Looper l) { 975767a662ecde33c3979bf02b793d392aca0403162Wink Saville super(l); 976767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 977767a662ecde33c3979bf02b793d392aca0403162Wink Saville 978dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 979767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void handleMessage(Message msg) { 980767a662ecde33c3979bf02b793d392aca0403162Wink Saville AsyncResult ar; 981767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete; 982767a662ecde33c3979bf02b793d392aca0403162Wink Saville 983767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch(msg.what) { 984767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_RADIO_AVAILABLE: { 985767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getBasebandVersion(obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE)); 986767a662ecde33c3979bf02b793d392aca0403162Wink Saville 987767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getDeviceIdentity(obtainMessage(EVENT_GET_DEVICE_IDENTITY_DONE)); 988767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 989767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 990767a662ecde33c3979bf02b793d392aca0403162Wink Saville 991767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_GET_BASEBAND_VERSION_DONE:{ 992767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult)msg.obj; 993767a662ecde33c3979bf02b793d392aca0403162Wink Saville 994767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ar.exception != null) { 995767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 996767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 997767a662ecde33c3979bf02b793d392aca0403162Wink Saville 998e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "Baseband version: " + ar.result); 99922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_BASEBAND_VERSION, (String)ar.result); 1000767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1001767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1002767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1003767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_GET_DEVICE_IDENTITY_DONE:{ 1004767a662ecde33c3979bf02b793d392aca0403162Wink Saville ar = (AsyncResult)msg.obj; 1005767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1006767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (ar.exception != null) { 1007767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1008767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1009767a662ecde33c3979bf02b793d392aca0403162Wink Saville String[] respId = (String[])ar.result; 1010767a662ecde33c3979bf02b793d392aca0403162Wink Saville mEsn = respId[2]; 1011767a662ecde33c3979bf02b793d392aca0403162Wink Saville mMeid = respId[3]; 1012767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1013767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1014767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1015dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville case EVENT_EMERGENCY_CALLBACK_MODE_ENTER:{ 1016dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville handleEnterEmergencyCallbackMode(msg); 1017dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1018dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville break; 1019dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1020dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville case EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE:{ 1021dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville handleExitEmergencyCallbackMode(msg); 1022e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1023dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville break; 1024dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1025767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_RUIM_RECORDS_LOADED:{ 1026767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "Event EVENT_RUIM_RECORDS_LOADED Received"); 1027767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1028767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1029767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1030767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE:{ 1031767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_OFF_OR_NOT_AVAILABLE Received"); 1032767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1033767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1034767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1035767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_RADIO_ON:{ 1036767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "Event EVENT_RADIO_ON Received"); 1037767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1038767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1039767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1040767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_SSN:{ 1041767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "Event EVENT_SSN Received"); 1042767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1043767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1044767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1045767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_CALL_RING:{ 1046767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "Event EVENT_CALL_RING Received"); 1047767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1048767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1049767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1050767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_REGISTERED_TO_NETWORK:{ 1051767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "Event EVENT_REGISTERED_TO_NETWORK Received"); 1052767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1053767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1054767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1055767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_NV_READY:{ 1056767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.d(LOG_TAG, "Event EVENT_NV_READY Received"); 1057767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Inform the Service State Tracker 1058e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriManager.loadEriFile(); 1059767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNvLoadedRegistrants.notifyRegistrants(); 1060e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville if(mEriManager.isEriFileLoaded()) { 1061e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville // when the ERI file is loaded 1062e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Log.d(LOG_TAG, "ERI read, notify registrants"); 1063e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.notifyRegistrants(); 1064e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 106522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE,"false"); 1066767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1067767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 1068767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1069ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause case EVENT_SET_VM_NUMBER_DONE:{ 1070ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause ar = (AsyncResult)msg.obj; 1071ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause if (IccException.class.isInstance(ar.exception)) { 1072ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause storeVoiceMailNumber(mVmNumber); 1073ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause ar.exception = null; 1074ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1075ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause onComplete = (Message) ar.userObj; 1076ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause if (onComplete != null) { 1077ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1078ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause onComplete.sendToTarget(); 1079ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1080ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1081a1fd1efb52294360d09a4a4f5b6daabafd3c6603repo sync break; 1082ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1083767a662ecde33c3979bf02b793d392aca0403162Wink Saville default:{ 1084767a662ecde33c3979bf02b793d392aca0403162Wink Saville throw new RuntimeException("unexpected event not handled"); 1085767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1086767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1087767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1088767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1089767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1090dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1091dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the PhoneSubInfo of the CDMAPhone 1092dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1093dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public PhoneSubInfo getPhoneSubInfo() { 1094767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSubInfo; 1095dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1096767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1097dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1098dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccSmsInterfaceManager of the CDMAPhone 1099dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1100dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccSmsInterfaceManager getIccSmsInterfaceManager() { 1101dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimSmsInterfaceManager; 1102dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1103767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1104dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1105dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Retrieves the IccPhoneBookInterfaceManager of the CDMAPhone 1106dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1107dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager() { 1108dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return mRuimPhoneBookInterfaceManager; 1109dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1110767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1111767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void registerForNvLoaded(Handler h, int what, Object obj) { 1112767a662ecde33c3979bf02b793d392aca0403162Wink Saville Registrant r = new Registrant (h, what, obj); 1113767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNvLoadedRegistrants.add(r); 1114767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1115767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1116767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void unregisterForNvLoaded(Handler h) { 1117767a662ecde33c3979bf02b793d392aca0403162Wink Saville mNvLoadedRegistrants.remove(h); 1118767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1119767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1120e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void registerForEriFileLoaded(Handler h, int what, Object obj) { 1121e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Registrant r = new Registrant (h, what, obj); 1122e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.add(r); 1123e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1124e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1125e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void unregisterForEriFileLoaded(Handler h) { 1126e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mEriFileLoadedRegistrants.remove(h); 1127e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1128e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1129dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville // override for allowing access from other classes of this package 1130dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1131dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1132dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1133dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public final void setSystemProperty(String property, String value) { 1134dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville super.setSystemProperty(property, value); 1135dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1136767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1137dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1138dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1139dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1140dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public Handler getHandler() { 1141dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return h; 1142dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1143767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1144dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1145dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * {@inheritDoc} 1146dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1147dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public IccFileHandler getIccFileHandler() { 1148dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville return this.mIccFileHandler; 1149dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1150767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1151dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1152dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Set the TTY mode of the CDMAPhone 1153dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1154dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setTTYMode(int ttyMode, Message onComplete) { 1155dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville this.mCM.setTTYMode(ttyMode, onComplete); 1156dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1157767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1158dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1159dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Queries the TTY mode of the CDMAPhone 1160dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1161dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void queryTTYMode(Message onComplete) { 1162dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville this.mCM.queryTTYMode(onComplete); 1163dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1164e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1165dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1166dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Activate or deactivate cell broadcast SMS. 1167dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1168dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param activate 0 = activate, 1 = deactivate 1169dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1170dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1171dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 1172dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mSMS.activateCellBroadcastSms(activate, response); 1173dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1174767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1175dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1176dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Query the current configuration of cdma cell broadcast SMS. 1177dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1178dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1179dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1180dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void getCellBroadcastSmsConfig(Message response) { 1181dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mSMS.getCellBroadcastSmsConfig(response); 1182dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1183767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1184dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville /** 1185dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * Configure cdma cell broadcast SMS. 1186dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * 1187dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville * @param response Callback message is empty on completion 1188dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville */ 1189dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) { 1190dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville mSMS.setCellBroadcastConfig(configValuesArray, response); 1191dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1192dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1193e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final String IS683A_FEATURE_CODE = "*228"; 1194e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_FEATURE_CODE_NUM_DIGITS = 4; 1195e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_NUM_DIGITS = 2; 1196e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int IS683A_SYS_SEL_CODE_OFFSET = 4; 1197dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1198dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_A_BAND = 0; 1199dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_800MHZ_B_BAND = 1; 1200dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_A_BLOCK = 2; 1201dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_B_BLOCK = 3; 1202dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_C_BLOCK = 4; 1203dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_D_BLOCK = 5; 1204dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_E_BLOCK = 6; 1205dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private static final int IS683_CONST_1900MHZ_F_BLOCK = 7; 1206e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static final int INVALID_SYSTEM_SELECTION_CODE = -1; 1207dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1208dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville private boolean isIs683OtaSpDialStr(String dialStr) { 1209dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int sysSelCodeInt; 1210dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville boolean isOtaspDialString = false; 1211dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville int dialStrLen = dialStr.length(); 1212dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1213dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStrLen == IS683A_FEATURE_CODE_NUM_DIGITS) { 1214dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville if (dialStr.equals(IS683A_FEATURE_CODE)) { 1215dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville isOtaspDialString = true; 1216dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1217e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1218e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1219e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li switch (sysSelCodeInt) { 1220e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_A_BAND: 1221e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_800MHZ_B_BAND: 1222e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_A_BLOCK: 1223e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_B_BLOCK: 1224e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_C_BLOCK: 1225e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_D_BLOCK: 1226e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_E_BLOCK: 1227e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li case IS683_CONST_1900MHZ_F_BLOCK: 1228e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaspDialString = true; 1229e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1230e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li default: 1231e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li break; 1232e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1233e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1234e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaspDialString; 1235e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1236e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1237e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function extracts the system selection code from the dial string. 1238e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1239e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private int extractSelCodeFromOtaSpNum(String dialStr) { 1240e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int dialStrLen = dialStr.length(); 1241e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = INVALID_SYSTEM_SELECTION_CODE; 1242e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1243e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((dialStr.regionMatches(0, IS683A_FEATURE_CODE, 1244e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 0, IS683A_FEATURE_CODE_NUM_DIGITS)) && 1245e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li (dialStrLen >= (IS683A_FEATURE_CODE_NUM_DIGITS + 1246e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_SYS_SEL_CODE_NUM_DIGITS))) { 1247e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Since we checked the condition above, the system selection code 1248e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // extracted from dialStr will not cause any exception 1249e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li sysSelCodeInt = Integer.parseInt ( 1250e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li dialStr.substring (IS683A_FEATURE_CODE_NUM_DIGITS, 1251e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li IS683A_FEATURE_CODE_NUM_DIGITS + IS683A_SYS_SEL_CODE_NUM_DIGITS)); 1252e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1253e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "extractSelCodeFromOtaSpNum " + sysSelCodeInt); 1254e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return sysSelCodeInt; 1255e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1256dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville 1257e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1258e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * This function checks if the system selection code extracted from 1259e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * the dial string "sysSelCodeInt' is the system selection code specified 1260e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in the carrier ota sp number schema "sch". 1261e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1262e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private boolean 1263e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li checkOtaSpNumBasedOnSysSelCode (int sysSelCodeInt, String sch[]) { 1264e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1265e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li try { 1266e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Get how many number of system selection code ranges 1267e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selRc = Integer.parseInt((String)sch[1]); 1268e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li for (int i = 0; i < selRc; i++) { 1269e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[i+2]) && !TextUtils.isEmpty(sch[i+3])) { 1270e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMin = Integer.parseInt((String)sch[i+2]); 1271e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int selMax = Integer.parseInt((String)sch[i+3]); 1272e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Check if the selection code extracted from the dial string falls 1273e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // within any of the range pairs specified in the schema. 1274e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if ((sysSelCodeInt >= selMin) && (sysSelCodeInt <= selMax)) { 1275e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1276dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville break; 1277e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1278dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1279dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1280e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } catch (NumberFormatException ex) { 1281e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If the carrier ota sp number schema is not correct, we still allow dial 1282e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // and only log the error: 1283e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.e(LOG_TAG, "checkOtaSpNumBasedOnSysSelCode, error", ex); 1284dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1285e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1286e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1287e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1288e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // Define the pattern/format for carrier specified OTASP number schema. 1289e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // It separates by comma and/or whitespace. 1290e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private static Pattern pOtaSpNumSchema = Pattern.compile("[,\\s]+"); 1291e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1292e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li /** 1293e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The following function checks if a dial string is a carrier specified 1294e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * OTASP number or not by checking against the OTASP number schema stored 1295e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * in PROPERTY_OTASP_NUM_SCHEMA. 1296e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1297e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * Currently, there are 2 schemas for carriers to specify the OTASP number: 1298e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1) Use system selection code: 1299e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1300e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * SELC,the # of code pairs,min1,max1,min2,max2,... 1301e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "SELC,3,10,20,30,40,60,70" indicates that there are 3 pairs of 1302e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * selection codes, and they are {10,20}, {30,40} and {60,70} respectively. 1303e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 1304e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * 2) Use feature code: 1305e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * The schema is: 1306e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * "FC,length of feature code,feature code". 1307e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * e.g "FC,2,*2" indicates that the length of the feature code is 2, 1308e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li * and the code itself is "*2". 1309e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li */ 1310e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li private boolean isCarrierOtaSpNum(String dialStr) { 1311e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li boolean isOtaSpNum = false; 1312e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int sysSelCodeInt = extractSelCodeFromOtaSpNum(dialStr); 1313e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt == INVALID_SYSTEM_SELECTION_CODE) { 1314e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1315e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1316e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // mCarrierOtaSpNumSchema is retrieved from PROPERTY_OTASP_NUM_SCHEMA: 1317e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(mCarrierOtaSpNumSchema)) { 1318e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Matcher m = pOtaSpNumSchema.matcher(mCarrierOtaSpNumSchema); 1319e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1320e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,schema" + mCarrierOtaSpNumSchema); 1321e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1322e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li 1323e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (m.find()) { 1324e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String sch[] = pOtaSpNumSchema.split(mCarrierOtaSpNumSchema); 1325e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li // If carrier uses system selection code mechanism 1326e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("SELC")) { 1327e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (sysSelCodeInt!=INVALID_SYSTEM_SELECTION_CODE) { 1328e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum=checkOtaSpNumBasedOnSysSelCode(sysSelCodeInt,sch); 1329e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1330e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1331e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,sysSelCodeInt is invalid"); 1332e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1333e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1334e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else if (!TextUtils.isEmpty(sch[0]) && sch[0].equals("FC")) { 1335e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li int fcLen = Integer.parseInt((String)sch[1]); 1336e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li String fc = (String)sch[2]; 1337e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (dialStr.regionMatches(0,fc,0,fcLen)) { 1338e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li isOtaSpNum = true; 1339e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1340e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,not otasp number"); 1341e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1342e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1343e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1344e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema not supported" + sch[0]); 1345e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1346e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1347e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1348e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) { 1349e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern not right" + 1350e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li mCarrierOtaSpNumSchema); 1351e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1352e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1353e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } else { 1354e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li if (DBG) Log.d(LOG_TAG, "isCarrierOtaSpNum,ota schema pattern empty"); 1355e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li } 1356e4a84af11d94e90f8d0a376582e0c91cdfc1c4feLing Li return isOtaSpNum; 1357dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville } 1358767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1359d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang /** 1360d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * isOTASPNumber: checks a given number against the IS-683A OTASP dial string and carrier 1361d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * OTASP dial string. 1362d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * 1363d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @param dialStr the number to look up. 1364d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang * @return true if the number is in IS-683A OTASP dial string or carrier OTASP dial string 1365d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang */ 1366dda5391d5079537e275c9f4ed2637a1484d0e4e8Wink Saville @Override 1367d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang public boolean isOtaSpNumber(String dialStr){ 1368d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang boolean isOtaSpNum = false; 1369d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang String dialableStr = PhoneNumberUtils.extractNetworkPortion(dialStr); 1370d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (dialableStr != null) { 1371d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isIs683OtaSpDialStr(dialableStr); 1372d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (isOtaSpNum == false) { 1373d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang isOtaSpNum = isCarrierOtaSpNum(dialableStr); 1374d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1375d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1376d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang if (DBG) Log.d(LOG_TAG, "isOtaSpNumber " + isOtaSpNum); 1377d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang return isOtaSpNum; 1378d903014c1f42884531372f18a754e5d6ff7366a7Libin Tang } 1379e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1380e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1381e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconIndex() { 1382e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int roamInd = getServiceState().getCdmaRoamingIndicator(); 1383e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); 1384f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mEriManager.getCdmaEriIconIndex(roamInd, defRoamInd); 1385e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1386e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1387e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1388e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI icon mode, 1389e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 0 - ON 1390e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * 1 - FLASHING 1391e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1392e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1393e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public int getCdmaEriIconMode() { 1394e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int roamInd = getServiceState().getCdmaRoamingIndicator(); 1395e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); 1396f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mEriManager.getCdmaEriIconMode(roamInd, defRoamInd); 1397e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1398e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 1399e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville /** 1400e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville * Returns the CDMA ERI text, 1401e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville */ 1402e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville @Override 1403e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public String getCdmaEriText() { 1404e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int roamInd = getServiceState().getCdmaRoamingIndicator(); 1405e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville int defRoamInd = getServiceState().getCdmaDefaultRoamingIndicator(); 1406f315238a2b07c7e84f6ade800e504f520d262e66Wink Saville return mEriManager.getCdmaEriText(roamInd, defRoamInd); 1407e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 1408ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1409ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause /** 1410ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause * Store the voicemail number in preferences 1411ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause */ 1412ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause private void storeVoiceMailNumber(String number) { 1413ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause // Update the preference value of voicemail number 1414ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 1415ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause SharedPreferences.Editor editor = sp.edit(); 1416ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause editor.putString(VM_NUMBER_CDMA, number); 1417ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause editor.commit(); 1418ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause } 1419ce099c3226b33b43e0dd5d1f24347b14a2223ee1David Krause 1420142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1421142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * Sets PROPERTY_ICC_OPERATOR_ISO_COUNTRY property 1422142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1423142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1424142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville private void setIsoCountryProperty(String operatorNumeric) { 1425142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (TextUtils.isEmpty(operatorNumeric)) { 1426142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, ""); 1427142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } else { 1428142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville String iso = ""; 1429142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1430142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville iso = MccTable.countryCodeForMcc(Integer.parseInt( 1431142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville operatorNumeric.substring(0,3))); 1432142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (NumberFormatException ex) { 1433142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1434142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (StringIndexOutOfBoundsException ex) { 1435142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.w(LOG_TAG, "countryCodeForMcc error" + ex); 1436142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1437142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1438142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso); 1439142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1440142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1441142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1442142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1443142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * Sets the "current" field in the telephony provider according to the build-time 1444142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * operator numeric property 1445142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1446142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * @return true for success; false otherwise. 1447142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1448142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // TODO(Moto): move this method into PhoneBase, since it looks identical to 1449142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville // the one in GsmPhone 1450142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville private boolean updateCurrentCarrierInProvider(String operatorNumeric) { 1451142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (!TextUtils.isEmpty(operatorNumeric)) { 1452142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1453142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"); 1454142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville ContentValues map = new ContentValues(); 1455142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville map.put(Telephony.Carriers.NUMERIC, operatorNumeric); 1456142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville getContext().getContentResolver().insert(uri, map); 1457142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return true; 1458142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (SQLException e) { 1459142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.e(LOG_TAG, "Can't store current operator", e); 1460142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1461142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1462142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville return false; 1463142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1464142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville 1465142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville /** 1466142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * Updates MCC and MNC device configuration information for application retrieving 1467142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * correct version of resources 1468142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville * 1469142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville */ 1470142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville private void updateMccMncConfiguration(String operatorNumeric) { 1471142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville if (operatorNumeric.length() >= 5) { 1472142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Configuration config = new Configuration(); 1473142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville config.mcc = Integer.parseInt(operatorNumeric.substring(0,3)); 1474142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville config.mnc = Integer.parseInt(operatorNumeric.substring(3)); 1475142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville try { 1476142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville ActivityManagerNative.getDefault().updateConfiguration(config); 1477142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } catch (RemoteException e) { 1478142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville Log.e(LOG_TAG, "Can't update configuration", e); 1479142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1480142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1481142eefc67b661a63f95dd2b92cf622e7b57fcb4bWink Saville } 1482767a662ecde33c3979bf02b793d392aca0403162Wink Saville} 1483