GSMPhone.java revision c6f79ce6bcc77abe222e5cc39a0b065bc76bce83
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.telephony.gsm; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.SharedPreferences; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.SQLException; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.AsyncResult; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Looper; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Registrant; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RegistrantList; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemProperties; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.preference.PreferenceManager; 32767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport android.provider.Settings; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Telephony; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.CellLocation; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.PhoneNumberUtils; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.ServiceState; 37e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_DISABLE; 42767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_ENABLE; 43767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_ERASURE; 44767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_REGISTRATION; 45767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_ALL; 46767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_ALL_CONDITIONAL; 47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_NO_REPLY; 48767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_NOT_REACHABLE; 49767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_BUSY; 50767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_UNCONDITIONAL; 51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_VOICE; 52767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_BASEBAND_VERSION; 53767a662ecde33c3979bf02b793d392aca0403162Wink Saville 541c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganeshimport com.android.internal.telephony.Call; 55767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CallForwardInfo; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.CallStateException; 57767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.CommandsInterface; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.Connection; 59767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.DataConnection; 60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.DataConnectionTracker; 61767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccCard; 62767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccFileHandler; 63767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 64767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.MmiCode; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.Phone; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.PhoneBase; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.PhoneNotifier; 69767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneProxy; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.PhoneSubInfo; 71767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.RILConstants; 729bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport com.android.internal.telephony.TelephonyProperties; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.gsm.stk.StkService; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.test.SimulatedRadioControl; 75767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccVmNotSupportedException; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.InetSocketAddress; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.ServerSocket; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.Socket; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class GSMPhone extends PhoneBase { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // NOTE that LOG_TAG here is "GSM", which means that log messages 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // from this file will go into the radio log rather than the main 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // log. (Use "adb logcat -b radio" to see them.) 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final String LOG_TAG = "GSM"; 92767a662ecde33c3979bf02b793d392aca0403162Wink Saville private static final boolean LOCAL_DEBUG = true; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Key used to read/write current ciphering state 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CIPHERING_KEY = "ciphering_key"; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Key used to read/write voice mail number 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String VM_NUMBER = "vm_number_key"; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Key used to read/write the SIM IMSI used for storing the voice mail 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String VM_SIM_IMSI = "vm_sim_imsi_key"; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //***** Instance Variables 102767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCallTracker mCT; 103767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmServiceStateTracker mSST; 104767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmSMSDispatcher mSMS; 105767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmDataConnectionTracker mDataConnection; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SIMRecords mSIMRecords; 107767a662ecde33c3979bf02b793d392aca0403162Wink Saville SimCard mSimCard; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StkService mStkService; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MyHandler h; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList <GsmMmiCode> mPendingMMIs = new ArrayList<GsmMmiCode>(); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SimPhoneBookInterfaceManager mSimPhoneBookIntManager; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SimSmsInterfaceManager mSimSmsIntManager; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PhoneSubInfo mSubInfo; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Registrant mPostDialHandler; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** List of Registrants to receive Supplementary Service Notifications. */ 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RegistrantList mSsnRegistrants = new RegistrantList(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread debugPortThread; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServerSocket debugSocket; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mReportedRadioResets; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mReportedAttemptedConnects; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mReportedSuccessfulConnects; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mImei; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mImeiSv; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mVmNumber; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //***** Constructors 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public 136767a662ecde33c3979bf02b793d392aca0403162Wink Saville GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier) { 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context,ci,notifier, false); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public 141767a662ecde33c3979bf02b793d392aca0403162Wink Saville GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier, boolean unitTestMode) { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(notifier, context, unitTestMode); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project h = new MyHandler(); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM = ci; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ci instanceof SimulatedRadioControl) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSimulatedRadioControl = (SimulatedRadioControl) ci; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 150767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.setPhoneType(RILConstants.GSM_PHONE); 151767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT = new GsmCallTracker(this); 152767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST = new GsmServiceStateTracker (this); 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSMS = new GsmSMSDispatcher(this); 154767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIccFileHandler = new SIMFileHandler(this); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords = new SIMRecords(this); 156767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection = new GsmDataConnectionTracker (this); 157767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSimCard = new SimCard(this); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!unitTestMode) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSimPhoneBookIntManager = new SimPhoneBookInterfaceManager(this); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSimSmsIntManager = new SimSmsInterfaceManager(this); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubInfo = new PhoneSubInfo(this); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStkService = StkService.getInstance(mCM, mSIMRecords, mContext, 164767a662ecde33c3979bf02b793d392aca0403162Wink Saville (SIMFileHandler)mIccFileHandler, mSimCard); 165767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.registerForAvailable(h, EVENT_RADIO_AVAILABLE, null); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords.registerForRecordsLoaded(h, EVENT_SIM_RECORDS_LOADED, null); 168767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.registerForOffOrNotAvailable(h, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.registerForOn(h, EVENT_RADIO_ON, null); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setOnUSSD(h, EVENT_USSD, null); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setOnSuppServiceNotification(h, EVENT_SSN, null); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setOnCallRing(h, EVENT_CALL_RING, null); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.registerForNetworkAttach(h, EVENT_REGISTERED_TO_NETWORK, null); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (false) { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //debugSocket = new LocalServerSocket("com.android.internal.telephony.debug"); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugSocket = new ServerSocket(); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugSocket.setReuseAddress(true); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugSocket.bind (new InetSocketAddress("127.0.0.1", 6666)); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugPortThread 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Thread( 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Runnable() { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for(;;) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Socket sock; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sock = debugSocket.accept(); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.i(LOG_TAG, "New connection; resetting radio"); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.resetRadio(null); 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sock.close(); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException ex) { 194767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.w(LOG_TAG, 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Exception accepting socket", ex); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }, 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GSMPhone debug"); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugPortThread.start(); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException ex) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(LOG_TAG, "Failure to open com.android.internal.telephony.debug socket", ex); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 208767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2099bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh //Change the system property 2109bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE, 2119bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh new Integer(RILConstants.GSM_PHONE).toString()); 212767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 213767a662ecde33c3979bf02b793d392aca0403162Wink Saville 214767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void dispose() { 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 216767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Unregister from all former registered events 217767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unregisterForAvailable(h); //EVENT_RADIO_AVAILABLE 218767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSIMRecords.unregisterForRecordsLoaded(h); //EVENT_SIM_RECORDS_LOADED 219767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unregisterForOffOrNotAvailable(h); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE 220767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unregisterForOn(h); //EVENT_RADIO_ON 221767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.unregisterForNetworkAttach(h); //EVENT_REGISTERED_TO_NETWORK 222767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unSetOnUSSD(h); 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unSetOnSuppServiceNotification(h); 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.unSetOnCallRing(h); 225767a662ecde33c3979bf02b793d392aca0403162Wink Saville 226767a662ecde33c3979bf02b793d392aca0403162Wink Saville mPendingMMIs.clear(); 227767a662ecde33c3979bf02b793d392aca0403162Wink Saville 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Force all referenced classes to unregister their former registered events 229767a662ecde33c3979bf02b793d392aca0403162Wink Saville mStkService.dispose(); 230767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.dispose(); 231767a662ecde33c3979bf02b793d392aca0403162Wink Saville mDataConnection.dispose(); 232767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.dispose(); 233767a662ecde33c3979bf02b793d392aca0403162Wink Saville mIccFileHandler.dispose(); // instance of SimFileHandler 234767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSIMRecords.dispose(); 235767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSimCard.dispose(); 236767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSimPhoneBookIntManager.dispose(); 237767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSimSmsIntManager.dispose(); 238767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo.dispose(); 239767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 241767a662ecde33c3979bf02b793d392aca0403162Wink Saville 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void removeReferences() { 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSimulatedRadioControl = null; 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mStkService = null; 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSimPhoneBookIntManager = null; 246767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSimSmsIntManager = null; 247767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSMS = null; 248767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSubInfo = null; 249767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSIMRecords = null; 250767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mIccFileHandler = null; 251767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSimCard = null; 252767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mDataConnection = null; 253767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mCT = null; 254767a662ecde33c3979bf02b793d392aca0403162Wink Saville this.mSST = null; 255767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 256767a662ecde33c3979bf02b793d392aca0403162Wink Saville 257767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void finalize() { 258767a662ecde33c3979bf02b793d392aca0403162Wink Saville if(LOCAL_DEBUG) Log.d(LOG_TAG, "GSMPhone finalized"); 259767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 260767a662ecde33c3979bf02b793d392aca0403162Wink Saville 261767a662ecde33c3979bf02b793d392aca0403162Wink Saville 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //***** Overridden from Phone 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 264767a662ecde33c3979bf02b793d392aca0403162Wink Saville public ServiceState 265767a662ecde33c3979bf02b793d392aca0403162Wink Saville getServiceState() { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSST.ss; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CellLocation getCellLocation() { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSST.cellLoc; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 273767a662ecde33c3979bf02b793d392aca0403162Wink Saville public Phone.State 274767a662ecde33c3979bf02b793d392aca0403162Wink Saville getState() { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.state; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String 279767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPhoneName() { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "GSM"; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] getActiveApnTypes() { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.getActiveApnTypes(); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getActiveApn() { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.getActiveApnString(); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 291e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public SignalStrength getSignalStrength() { 292e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return mSST.mSignalStrength; 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean 296767a662ecde33c3979bf02b793d392aca0403162Wink Saville getMessageWaitingIndicator() { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSIMRecords.getVoiceMessageWaiting(); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getCallForwardingIndicator() { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSIMRecords.getVoiceCallForwardingFlag(); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<? extends MmiCode> 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPendingMmiCodes() { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPendingMMIs; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DataState getDataConnectionState() { 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DataState ret = DataState.DISCONNECTED; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((SystemProperties.get("adb.connected", "").length() > 0) 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && (SystemProperties.get("android.net.use-adb-networking", "") 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .length() > 0)) { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We're connected to an ADB host and we have USB networking 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // turned on. No matter what the radio state is, 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // we report data connected 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ret = DataState.CONNECTED; 32144038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville } else if (mSST == null) { 32244038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville // Radio Technology Change is ongoning, dispose() and removeReferences() have 32344038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville // already been called 32444038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville 32544038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville ret = DataState.DISCONNECTED; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mSST.getCurrentGprsState() 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project != ServiceState.STATE_IN_SERVICE) { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If we're out of service, open TCP sockets may still work 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // but no data will flow 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ret = DataState.DISCONNECTED; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { /* mSST.gprsState == ServiceState.STATE_IN_SERVICE */ 332767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch (mDataConnection.getState()) { 333767a662ecde33c3979bf02b793d392aca0403162Wink Saville case FAILED: 334767a662ecde33c3979bf02b793d392aca0403162Wink Saville case IDLE: 335767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 336767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTED: 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DISCONNECTING: 340767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( mCT.state != Phone.State.IDLE 341767a662ecde33c3979bf02b793d392aca0403162Wink Saville && !mSST.isConcurrentVoiceAndData()) { 342767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.SUSPENDED; 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTED; 345767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 346767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 348767a662ecde33c3979bf02b793d392aca0403162Wink Saville case INITING: 349767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTING: 350767a662ecde33c3979bf02b793d392aca0403162Wink Saville case SCANNING: 351767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTING; 352767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ret; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DataActivityState getDataActivityState() { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DataActivityState ret = DataActivityState.NONE; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSST.getCurrentGprsState() == ServiceState.STATE_IN_SERVICE) { 363767a662ecde33c3979bf02b793d392aca0403162Wink Saville switch (mDataConnection.getActivity()) { 364767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAIN: 365767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAIN; 366767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAOUT: 369767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAOUT; 370767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 372767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAINANDOUT: 373767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAINANDOUT; 374767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ret; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3821c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify any interested party of a Phone state change {@link Phone.State} 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void notifyPhoneStateChanged() { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifyPhoneState(this); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3891c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 3901c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3921c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh /*package*/ void notifyPreciseCallStateChanged() { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* we'd love it if this was package-scoped*/ 3941c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh super.notifyPreciseCallStateChangedP(); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 398767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifyNewRingingConnection(Connection c) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* we'd love it if this was package-scoped*/ 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.notifyNewRingingConnectionP(c); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Notifiy registrants of a RING event. 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 406767a662ecde33c3979bf02b793d392aca0403162Wink Saville void notifyIncomingRing() { 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult ar = new AsyncResult(null, this, null); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIncomingRingRegistrants.notifyRegistrants(ar); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 410767a662ecde33c3979bf02b793d392aca0403162Wink Saville 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 412767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifyDisconnect(Connection cn) { 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDisconnectRegistrants.notifyResult(cn); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void notifyUnknownConnection() { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUnknownConnectionRegistrants.notifyResult(this); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 419767a662ecde33c3979bf02b793d392aca0403162Wink Saville 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void notifySuppServiceFailed(SuppService code) { 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSuppServiceFailedRegistrants.notifyResult(code); 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 425767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifyServiceStateChanged(ServiceState ss) { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.notifyServiceStateChangedP(ss); 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void notifyLocationChanged() { 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifyCellLocation(this); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 435767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifySignalStrength() { 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifySignalStrength(this); 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyDataConnectionFailed(String reason) { 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifyDataConnectionFailed(this, reason); 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 445767a662ecde33c3979bf02b793d392aca0403162Wink Saville updateMessageWaitingIndicator(boolean mwi) { 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this also calls notifyMessageWaitingIndicator() 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords.setVoiceMessageWaiting(1, mwi ? -1 : 0); 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 450767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyCallForwardingIndicator() { 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifyCallForwardingChanged(this); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 455767a662ecde33c3979bf02b793d392aca0403162Wink Saville // override for allowing access from other classes of this package 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 457767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@inheritDoc} 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459767a662ecde33c3979bf02b793d392aca0403162Wink Saville public final void 460767a662ecde33c3979bf02b793d392aca0403162Wink Saville setSystemProperty(String property, String value) { 461767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.setSystemProperty(property, value); 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void registerForSuppServiceNotification( 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Handler h, int what, Object obj) { 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSsnRegistrants.addUnique(h, what, obj); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSsnRegistrants.size() == 1) mCM.setSuppServiceNotifications(true, null); 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void unregisterForSuppServiceNotification(Handler h) { 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSsnRegistrants.remove(h); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSsnRegistrants.size() == 0) mCM.setSuppServiceNotifications(false, null); 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 475767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 476767a662ecde33c3979bf02b793d392aca0403162Wink Saville acceptCall() throws CallStateException { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.acceptCall(); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 480767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 481767a662ecde33c3979bf02b793d392aca0403162Wink Saville rejectCall() throws CallStateException { 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.rejectCall(); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 486767a662ecde33c3979bf02b793d392aca0403162Wink Saville switchHoldingAndActive() throws CallStateException { 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.switchWaitingOrHoldingAndActive(); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 490767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canConference() { 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.canConference(); 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 494767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canDial() { 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.canDial(); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 498767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void conference() throws CallStateException { 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.conference(); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 502767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void clearDisconnected() { 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.clearDisconnected(); 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 506767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canTransfer() { 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.canTransfer(); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 510767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void explicitCallTransfer() throws CallStateException { 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.explicitCallTransfer(); 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 514767a662ecde33c3979bf02b793d392aca0403162Wink Saville public GsmCall 515767a662ecde33c3979bf02b793d392aca0403162Wink Saville getForegroundCall() { 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.foregroundCall; 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519767a662ecde33c3979bf02b793d392aca0403162Wink Saville public GsmCall 520767a662ecde33c3979bf02b793d392aca0403162Wink Saville getBackgroundCall() { 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.backgroundCall; 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 524767a662ecde33c3979bf02b793d392aca0403162Wink Saville public GsmCall 525767a662ecde33c3979bf02b793d392aca0403162Wink Saville getRingingCall() { 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.ringingCall; 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCallDeflectionIncallSupplementaryService( 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String dialString) throws CallStateException { 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialString.length() > 1) { 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 535767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (getRingingCall().getState() != GsmCall.State.IDLE) { 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 0: rejectCall"); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.rejectCall(); 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "reject failed", e); 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.REJECT); 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 544767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else if (getBackgroundCall().getState() != GsmCall.State.IDLE) { 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 0: hangupWaitingOrBackground"); 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.hangupWaitingOrBackground(); 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCallWaitingIncallSupplementaryService( 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String dialString) throws CallStateException { 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = dialString.length(); 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 2) { 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 561767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall call = (GsmCall) getForegroundCall(); 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 1) { 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char ch = dialString.charAt(1); 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int callIndex = ch - '0'; 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 568767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (callIndex >= 1 && callIndex <= GsmCallTracker.MAX_CONNECTIONS) { 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 1: hangupConnectionByIndex " + 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callIndex); 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.hangupConnectionByIndex(call, callIndex); 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 575767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (call.getState() != GsmCall.State.IDLE) { 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 1: hangup foreground"); 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //mCT.hangupForegroundResumeBackground(); 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.hangup(call); 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 1: switchWaitingOrHoldingAndActive"); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.switchWaitingOrHoldingAndActive(); 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "hangup failed", e); 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.HANGUP); 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCallHoldIncallSupplementaryService(String dialString) 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = dialString.length(); 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 2) { 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 603767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall call = (GsmCall) getForegroundCall(); 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 1) { 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char ch = dialString.charAt(1); 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int callIndex = ch - '0'; 609767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmConnection conn = mCT.getConnectionByIndex(call, callIndex); 610767a662ecde33c3979bf02b793d392aca0403162Wink Saville 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // gsm index starts at 1, up to 5 connections in a call, 612767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (conn != null && callIndex >= 1 && callIndex <= GsmCallTracker.MAX_CONNECTIONS) { 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 2: separate call "+ 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callIndex); 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.separate(conn); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "separate: invalid call index "+ 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callIndex); 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.SEPARATE); 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "separate failed", e); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.SEPARATE); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 628767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (getRingingCall().getState() != GsmCall.State.IDLE) { 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 2: accept ringing call"); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.acceptCall(); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 2: switchWaitingOrHoldingAndActive"); 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.switchWaitingOrHoldingAndActive(); 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "switch failed", e); 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.SWITCH); 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleMultipartyIncallSupplementaryService( 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String dialString) throws CallStateException { 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialString.length() > 1) { 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 3: merge calls"); 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project conference(); 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "conference failed", e); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.CONFERENCE); 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleEctIncallSupplementaryService(String dialString) 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = dialString.length(); 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len != 1) { 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 4: explicit call transfer"); 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project explicitCallTransfer(); 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "transfer failed", e); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.TRANSFER); 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCcbsIncallSupplementaryService(String dialString) 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialString.length() > 1) { 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.i(LOG_TAG, "MmiCode 5: CCBS not supported!"); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Treat it as an "unknown" service. 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.UNKNOWN); 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean handleInCallMmiCommands(String dialString) 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isInCall()) { 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(dialString)) { 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean result = false; 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char ch = dialString.charAt(0); 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (ch) { 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '0': 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCallDeflectionIncallSupplementaryService( 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialString); 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '1': 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCallWaitingIncallSupplementaryService( 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialString); 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '2': 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCallHoldIncallSupplementaryService(dialString); 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '3': 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleMultipartyIncallSupplementaryService(dialString); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '4': 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleEctIncallSupplementaryService(dialString); 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '5': 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCcbsIncallSupplementaryService(dialString); 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isInCall() { 737767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall.State foregroundCallState = getForegroundCall().getState(); 738767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall.State backgroundCallState = getBackgroundCall().getState(); 739767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall.State ringingCallState = getRingingCall().getState(); 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (foregroundCallState.isAlive() || 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project backgroundCallState.isAlive() || 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ringingCallState.isAlive()); 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Connection 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dial (String dialString) throws CallStateException { 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Need to make sure dialString gets parsed properly 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String newDialString = PhoneNumberUtils.stripSeparators(dialString); 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // handle in-call MMI first if applicable 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handleInCallMmiCommands(newDialString)) { 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Only look at the Network portion for mmi 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String networkPortion = PhoneNumberUtils.extractNetworkPortion(newDialString); 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi = GsmMmiCode.newFromDialString(networkPortion, this); 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "dialing w/ mmi '" + mmi + "'..."); 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mmi == null) { 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.dial(newDialString); 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mmi.isTemporaryModeCLIR()) { 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.dial(mmi.dialingNumber, mmi.getCLIRMode()); 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPendingMMIs.add(mmi); 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mmi.processCode(); 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // FIXME should this return null or something else? 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean handlePinMmi(String dialString) { 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi = GsmMmiCode.newFromDialString(dialString, this); 778767a662ecde33c3979bf02b793d392aca0403162Wink Saville 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mmi != null && mmi.isPinCommand()) { 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPendingMMIs.add(mmi); 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mmi.processCode(); 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 785767a662ecde33c3979bf02b793d392aca0403162Wink Saville 786767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendUssdResponse(String ussdMessge) { 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi = GsmMmiCode.newFromUssdUserInput(ussdMessge, this); 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPendingMMIs.add(mmi); 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mmi.sendUssd(ussdMessge); 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 795767a662ecde33c3979bf02b793d392aca0403162Wink Saville 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendDtmf(char c) { 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!PhoneNumberUtils.is12Key(c)) { 799767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "sendDtmf called with invalid character '" + c + "'"); 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCT.state == Phone.State.OFFHOOK) { 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.sendDtmf(c, null); 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startDtmf(char c) { 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!PhoneNumberUtils.is12Key(c)) { 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startDtmf called with invalid character '" + c + "'"); 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.startDtmf(c, null); 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stopDtmf() { 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.stopDtmf(null); 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 824e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville sendBurstDtmf(String dtmfString) { 825e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Log.e(LOG_TAG, "[GSMPhone] sendBurstDtmf() is a CDMA method"); 826e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 827e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 828e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setRadioPower(boolean power) { 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.setRadioPower(power); 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void storeVoiceMailNumber(String number) { 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 8369bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh editor.putString(VM_NUMBER, number); 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.commit(); 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setVmSimImsi(getSubscriberId()); 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getVoiceMailNumber() { 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Read from the SIM. If its null, try reading from the shared preference area. 8439bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh String number = mSIMRecords.getVoiceMailNumber(); 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(number)) { 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = sp.getString(VM_NUMBER, null); 8479bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh } 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return number; 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8509bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String getVmSimImsi() { 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sp.getString(VM_SIM_IMSI, null); 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setVmSimImsi(String imsi) { 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putString(VM_SIM_IMSI, imsi); 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.commit(); 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8629bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getVoiceMailAlphaTag() { 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ret; 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ret = mSIMRecords.getVoiceMailAlphaTag(); 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ret == null || ret.length() == 0) { 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mContext.getText( 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.string.defaultVoiceMailAlphaTag).toString(); 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 873767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getDeviceId() { 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mImei; 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getDeviceSvn() { 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mImeiSv; 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 884767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEsn() { 885767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "[GSMPhone] getEsn() is a CDMA method"); 886767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 887767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 888767a662ecde33c3979bf02b793d392aca0403162Wink Saville 889767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMeid() { 890767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "[GSMPhone] getMeid() is a CDMA method"); 891767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 892767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 893767a662ecde33c3979bf02b793d392aca0403162Wink Saville 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSubscriberId() { 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSIMRecords.imsi; 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 898767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getIccSerialNumber() { 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSIMRecords.iccid; 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLine1Number() { 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSIMRecords.getMsisdnNumber(); 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLine1AlphaTag() { 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ret; 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ret = mSIMRecords.getMsisdnAlphaTag(); 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ret == null || ret.length() == 0) { 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mContext.getText( 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.string.defaultMsisdnAlphaTag).toString(); 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ret; 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLine1Number(String alphaTag, String number, Message onComplete) { 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords.setMsisdnNumber(alphaTag, number, onComplete); 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setVoiceMailNumber(String alphaTag, 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String voiceMailNumber, 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message onComplete) { 9269bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 9279bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh Message resp; 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVmNumber = voiceMailNumber; 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp = h.obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete); 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords.setVoiceMailNumber(alphaTag, mVmNumber, resp); 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9329bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean isValidCommandInterfaceCFReason (int commandInterfaceCFReason) { 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (commandInterfaceCFReason) { 935767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_UNCONDITIONAL: 936767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_BUSY: 937767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_NO_REPLY: 938767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_NOT_REACHABLE: 939767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_ALL: 940767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_ALL_CONDITIONAL: 941767a662ecde33c3979bf02b793d392aca0403162Wink Saville return true; 942767a662ecde33c3979bf02b793d392aca0403162Wink Saville default: 943767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean isValidCommandInterfaceCFAction (int commandInterfaceCFAction) { 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (commandInterfaceCFAction) { 949767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_DISABLE: 950767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_ENABLE: 951767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_REGISTRATION: 952767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_ERASURE: 953767a662ecde33c3979bf02b793d392aca0403162Wink Saville return true; 954767a662ecde33c3979bf02b793d392aca0403162Wink Saville default: 955767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 958767a662ecde33c3979bf02b793d392aca0403162Wink Saville 959767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean isCfEnable(int action) { 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (action == CF_ACTION_ENABLE) || (action == CF_ACTION_REGISTRATION); 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 962767a662ecde33c3979bf02b793d392aca0403162Wink Saville 963767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isValidCommandInterfaceCFReason(commandInterfaceCFReason)) { 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "requesting call forwarding query."); 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message resp; 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (commandInterfaceCFReason == CF_REASON_UNCONDITIONAL) { 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp = h.obtainMessage(EVENT_GET_CALL_FORWARD_DONE, onComplete); 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp = onComplete; 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.queryCallForwardStatus(commandInterfaceCFReason,0,null,resp); 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCallForwardingOption(int commandInterfaceCFAction, 977767a662ecde33c3979bf02b793d392aca0403162Wink Saville int commandInterfaceCFReason, 978767a662ecde33c3979bf02b793d392aca0403162Wink Saville String dialingNumber, 979767a662ecde33c3979bf02b793d392aca0403162Wink Saville int timerSeconds, 980767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 981767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( (isValidCommandInterfaceCFAction(commandInterfaceCFAction)) && 982767a662ecde33c3979bf02b793d392aca0403162Wink Saville (isValidCommandInterfaceCFReason(commandInterfaceCFReason))) { 983767a662ecde33c3979bf02b793d392aca0403162Wink Saville 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message resp; 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (commandInterfaceCFReason == CF_REASON_UNCONDITIONAL) { 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp = h.obtainMessage(EVENT_SET_CALL_FORWARD_DONE, 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isCfEnable(commandInterfaceCFAction) ? 1 : 0, 0, onComplete); 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp = onComplete; 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCallForward(commandInterfaceCFAction, 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project commandInterfaceCFReason, 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CommandsInterface.SERVICE_CLASS_VOICE, 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialingNumber, 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project timerSeconds, 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp); 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999767a662ecde33c3979bf02b793d392aca0403162Wink Saville 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getOutgoingCallerIdDisplay(Message onComplete) { 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getCLIR(onComplete); 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1003767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1004767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message onComplete) { 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCLIR(commandInterfaceCLIRMode, 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project h.obtainMessage(EVENT_SET_CLIR_COMPLETE, commandInterfaceCLIRMode, 0, onComplete)); 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getCallWaiting(Message onComplete) { 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.queryCallWaiting(CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1013767a662ecde33c3979bf02b793d392aca0403162Wink Saville 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCallWaiting(boolean enable, Message onComplete) { 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCallWaiting(enable, CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1017767a662ecde33c3979bf02b793d392aca0403162Wink Saville 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean 1019767a662ecde33c3979bf02b793d392aca0403162Wink Saville getIccRecordsLoaded() { 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSIMRecords.getRecordsLoaded(); 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1023767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccCard getIccCard() { 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSimCard; 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1027767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getAvailableNetworks(Message response) { 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getAvailableNetworks(response); 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1033767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Small container class used to hold information relevant to 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the carrier selection process. operatorNumeric can be "" 1035c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang * if we are looking for automatic selection. operatorAlphaLong is the 1036c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang * corresponding operator name. 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class NetworkSelectMessage { 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message message; 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String operatorNumeric; 1041c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang public String operatorAlphaLong; 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1043767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1044767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNetworkSelectionModeAutomatic(Message response) { 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // wrap the response message in our own message along with 1047767a662ecde33c3979bf02b793d392aca0403162Wink Saville // an empty string (to indicate automatic selection) for the 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // operator's id. 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkSelectMessage nsm = new NetworkSelectMessage(); 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.message = response; 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.operatorNumeric = ""; 1052c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang nsm.operatorAlphaLong = ""; 1053767a662ecde33c3979bf02b793d392aca0403162Wink Saville 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get the message 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message msg = h.obtainMessage(EVENT_SET_NETWORK_AUTOMATIC_COMPLETE, nsm); 1056767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (LOCAL_DEBUG) 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.d(LOG_TAG, "wrapping and sending message to connect automatically"); 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setNetworkSelectionModeAutomatic(msg); 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1062767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project selectNetworkManually(com.android.internal.telephony.gsm.NetworkInfo network, 1064767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response) { 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // wrap the response message in our own message along with 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the operator's id. 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkSelectMessage nsm = new NetworkSelectMessage(); 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.message = response; 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.operatorNumeric = network.operatorNumeric; 1070c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang nsm.operatorAlphaLong = network.operatorAlphaLong; 1071767a662ecde33c3979bf02b793d392aca0403162Wink Saville 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get the message 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message msg = h.obtainMessage(EVENT_SET_NETWORK_MANUAL_COMPLETE, nsm); 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setNetworkSelectionModeManual(network.operatorNumeric, msg); 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getNeighboringCids(Message response) { 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getNeighboringCids(response); 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1082767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1083767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPostDialHandler = new Registrant(h, what, obj); 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1087767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setMute(boolean muted) { 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.setMute(muted); 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1091767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getMute() { 1092767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.getMute(); 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1095767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1096767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @deprecated 1097767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getPdpContextList(Message response) { 1099767a662ecde33c3979bf02b793d392aca0403162Wink Saville getDataCallList(response); 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1102767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getDataCallList(Message response) { 1103767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getDataCallList(response); 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1107767a662ecde33c3979bf02b793d392aca0403162Wink Saville * @deprecated 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1109767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<PdpConnection> getCurrentPdpList() { 1110767a662ecde33c3979bf02b793d392aca0403162Wink Saville ArrayList<DataConnection> connections = new ArrayList<DataConnection>(); 1111767a662ecde33c3979bf02b793d392aca0403162Wink Saville ArrayList<PdpConnection> pdp_list = new ArrayList<PdpConnection>(); 1112767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1113767a662ecde33c3979bf02b793d392aca0403162Wink Saville for(int n = 0; n < connections.size(); n++) { 1114767a662ecde33c3979bf02b793d392aca0403162Wink Saville pdp_list.add((PdpConnection) connections.get(n)); 1115767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1116767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1117767a662ecde33c3979bf02b793d392aca0403162Wink Saville return pdp_list; 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1120767a662ecde33c3979bf02b793d392aca0403162Wink Saville public List<DataConnection> getCurrentDataConnectionList () { 1121767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mDataConnection.getAllDataConnections(); 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void updateServiceLocation(Message response) { 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.getLacAndCid(response); 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void enableLocationUpdates() { 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.enableLocationUpdates(); 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void disableLocationUpdates() { 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.disableLocationUpdates(); 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getDataRoamingEnabled() { 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.getDataOnRoamingEnabled(); 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDataRoamingEnabled(boolean enable) { 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataConnection.setDataOnRoamingEnabled(enable); 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean enableDataConnectivity() { 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.setDataEnabled(true); 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int enableApnType(String type) { 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.enableApnType(type); 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int disableApnType(String type) { 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.disableApnType(type); 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean disableDataConnectivity() { 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.setDataEnabled(false); 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getInterfaceName(String apnType) { 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.getInterfaceName(apnType); 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getIpAddress(String apnType) { 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.getIpAddress(apnType); 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getGateway(String apnType) { 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.getGateway(apnType); 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] getDnsServers(String apnType) { 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDataConnection.getDnsServers(apnType); 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1176c6d6b687af385d2a4e5f5210a9111d7b1acc233cWink Saville public boolean isDataConnectivityEnabled() { 1177c6d6b687af385d2a4e5f5210a9111d7b1acc233cWink Saville return mDataConnection.getDataEnabled(); 1178c6d6b687af385d2a4e5f5210a9111d7b1acc233cWink Saville } 1179c6d6b687af385d2a4e5f5210a9111d7b1acc233cWink Saville 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The only circumstances under which we report that data connectivity is not 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * possible are 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>Data roaming is disallowed and we are roaming.</li> 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The current data state is {@code DISCONNECTED} for a reason other than 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * having explicitly disabled connectivity. In other words, data is not available 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * because the phone is out of coverage or some like reason.</li> 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if data connectivity is possible, {@code false} otherwise. 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isDataConnectivityPossible() { 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: Currently checks if any GPRS connection is active. Should it only 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for "default"? 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean noData = mDataConnection.getDataEnabled() && 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getDataConnectionState() == DataState.DISCONNECTED; 1196767a662ecde33c3979bf02b793d392aca0403162Wink Saville return !noData && getIccCard().getState() == SimCard.State.READY && 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getServiceState().getState() == ServiceState.STATE_IN_SERVICE && 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (mDataConnection.getDataOnRoamingEnabled() || !getServiceState().getRoaming()); 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes the given MMI from the pending list and notifies 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * registrants that it is complete. 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mmi MMI that is done 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 1207767a662ecde33c3979bf02b793d392aca0403162Wink Saville onMMIDone(GsmMmiCode mmi) { 1208767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* Only notify complete if it's on the pending list. 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Otherwise, it's already been handled (eg, previously canceled). 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The exception is cancellation of an incoming USSD-REQUEST, which is 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not on the list. 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPendingMMIs.remove(mmi) || mmi.isUssdRequest()) { 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiCompleteRegistrants.notifyRegistrants( 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new AsyncResult(null, mmi, null)); 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1220767a662ecde33c3979bf02b793d392aca0403162Wink Saville private void 1221767a662ecde33c3979bf02b793d392aca0403162Wink Saville onNetworkInitiatedUssd(GsmMmiCode mmi) { 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiCompleteRegistrants.notifyRegistrants( 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new AsyncResult(null, mmi, null)); 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** ussdMode is one of CommandsInterface.USSD_MODE_* */ 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void 1229767a662ecde33c3979bf02b793d392aca0403162Wink Saville onIncomingUSSD (int ussdMode, String ussdMessage) { 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isUssdError; 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isUssdRequest; 1232767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1233767a662ecde33c3979bf02b793d392aca0403162Wink Saville isUssdRequest 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = (ussdMode == CommandsInterface.USSD_MODE_REQUEST); 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1236767a662ecde33c3979bf02b793d392aca0403162Wink Saville isUssdError 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = (ussdMode != CommandsInterface.USSD_MODE_NOTIFY 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && ussdMode != CommandsInterface.USSD_MODE_REQUEST); 1239767a662ecde33c3979bf02b793d392aca0403162Wink Saville 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // See comments in GsmMmiCode.java 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // USSD requests aren't finished until one 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // of these two events happen 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode found = null; 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0, s = mPendingMMIs.size() ; i < s; i++) { 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(mPendingMMIs.get(i).isPendingUSSD()) { 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found = mPendingMMIs.get(i); 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (found != null) { 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Complete pending USSD 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isUssdError) { 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found.onUssdFinishedError(); 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found.onUssdFinished(ussdMessage, isUssdRequest); 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { // pending USSD not found 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The network may initiate its own USSD request 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore everything that isnt a Notify or a Request 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // also, discard if there is no message to present 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isUssdError && ussdMessage != null) { 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi; 1266767a662ecde33c3979bf02b793d392aca0403162Wink Saville mmi = GsmMmiCode.newNetworkInitiatedUssd(ussdMessage, 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isUssdRequest, 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GSMPhone.this); 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onNetworkInitiatedUssd(mmi); 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make sure the network knows our preferred setting. 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1277767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void syncClirSetting() { 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int clirSetting = sp.getInt(CLIR_KEY, -1); 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clirSetting >= 0) { 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCLIR(clirSetting, null); 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //***** Inner Classes 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1287767a662ecde33c3979bf02b793d392aca0403162Wink Saville class MyHandler extends Handler { 1288767a662ecde33c3979bf02b793d392aca0403162Wink Saville MyHandler() { 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1291767a662ecde33c3979bf02b793d392aca0403162Wink Saville MyHandler(Looper l) { 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(l); 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 1296767a662ecde33c3979bf02b793d392aca0403162Wink Saville handleMessage (Message msg) { 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult ar; 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message onComplete; 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (msg.what) { 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_RADIO_AVAILABLE: { 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getBasebandVersion( 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE)); 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getIMEI(obtainMessage(EVENT_GET_IMEI_DONE)); 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getIMEISV(obtainMessage(EVENT_GET_IMEISV_DONE)); 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_RADIO_ON: 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_REGISTERED_TO_NETWORK: 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project syncClirSetting(); 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SIM_RECORDS_LOADED: 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project updateCurrentCarrierInProvider(); 13199bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Check if this is a different SIM than the previous one. If so unset the 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // voice mail number. 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String imsi = getVmSimImsi(); 13239bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh if (imsi != null && !getSubscriberId().equals(imsi)) { 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project storeVoiceMailNumber(null); 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setVmSimImsi(null); 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_GET_BASEBAND_VERSION_DONE: 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar.exception != null) { 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "Baseband version: " + ar.result); 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setSystemProperty(PROPERTY_BASEBAND_VERSION, (String)ar.result); 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_GET_IMEI_DONE: 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar.exception != null) { 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mImei = (String)ar.result; 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_GET_IMEISV_DONE: 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar.exception != null) { 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1357767a662ecde33c3979bf02b793d392aca0403162Wink Saville 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mImeiSv = (String)ar.result; 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_USSD: 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] ussdResult = (String[]) ar.result; 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ussdResult.length > 1) { 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onIncomingUSSD(Integer.parseInt(ussdResult[0]), ussdResult[1]); 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (NumberFormatException e) { 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(LOG_TAG, "error parsing USSD"); 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1375767a662ecde33c3979bf02b793d392aca0403162Wink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE: 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Some MMI requests (eg USSD) are not completed 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // within the course of a CommandsInterface request 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If the radio shuts off or resets while one of these 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // is pending, we need to clean up. 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0, s = mPendingMMIs.size() ; i < s; i++) { 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPendingMMIs.get(i).isPendingUSSD()) { 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPendingMMIs.get(i).onUssdFinishedError(); 1384767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1387767a662ecde33c3979bf02b793d392aca0403162Wink Saville 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SSN: 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SuppServiceNotification not = (SuppServiceNotification) ar.result; 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSsnRegistrants.notifyRegistrants(ar); 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SET_CALL_FORWARD_DONE: 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar.exception == null) { 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords.setVoiceCallForwardingFlag(1, msg.arg1 == 1); 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete = (Message) ar.userObj; 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (onComplete != null) { 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult.forMessage(onComplete, ar.result, ar.exception); 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete.sendToTarget(); 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 14059bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SET_VM_NUMBER_DONE: 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 1408767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (IccVmNotSupportedException.class.isInstance(ar.exception)) { 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project storeVoiceMailNumber(mVmNumber); 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar.exception = null; 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete = (Message) ar.userObj; 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (onComplete != null) { 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult.forMessage(onComplete, ar.result, ar.exception); 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete.sendToTarget(); 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14199bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_GET_CALL_FORWARD_DONE: 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar.exception == null) { 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handleCfuQueryResult((CallForwardInfo[])ar.result); 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete = (Message) ar.userObj; 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (onComplete != null) { 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult.forMessage(onComplete, ar.result, ar.exception); 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete.sendToTarget(); 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1431767a662ecde33c3979bf02b793d392aca0403162Wink Saville 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_CALL_RING: 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar.exception == null) { 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyIncomingRing(); 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1438767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1439767a662ecde33c3979bf02b793d392aca0403162Wink Saville // handle the select network completion callbacks. 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SET_NETWORK_MANUAL_COMPLETE: 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SET_NETWORK_AUTOMATIC_COMPLETE: 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handleSetSelectNetwork((AsyncResult) msg.obj); 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case EVENT_SET_CLIR_COMPLETE: 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar = (AsyncResult)msg.obj; 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar.exception == null) { 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project saveClirSetting(msg.arg1); 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete = (Message) ar.userObj; 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (onComplete != null) { 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult.forMessage(onComplete, ar.result, ar.exception); 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onComplete.sendToTarget(); 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the "current" field in the telephony provider according to the SIM's operator 14629bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh * 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true for success; false otherwise. 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean updateCurrentCarrierInProvider() { 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSIMRecords != null) { 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"); 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues map = new ContentValues(); 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project map.put(Telephony.Carriers.NUMERIC, mSIMRecords.getSIMOperatorNumeric()); 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.getContentResolver().insert(uri, map); 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (SQLException e) { 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "Can't store current operator", e); 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to track the settings upon completion of the network change. 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void handleSetSelectNetwork(AsyncResult ar) { 1484767a662ecde33c3979bf02b793d392aca0403162Wink Saville // look for our wrapper within the asyncresult, skip the rest if it 1485767a662ecde33c3979bf02b793d392aca0403162Wink Saville // is null. 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!(ar.userObj instanceof NetworkSelectMessage)) { 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "unexpected result from user object."); 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1490767a662ecde33c3979bf02b793d392aca0403162Wink Saville 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkSelectMessage nsm = (NetworkSelectMessage) ar.userObj; 1492767a662ecde33c3979bf02b793d392aca0403162Wink Saville 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // found the object, now we send off the message we had originally 1494767a662ecde33c3979bf02b793d392aca0403162Wink Saville // attached to the request. 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nsm.message != null) { 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "sending original message to recipient"); 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult.forMessage(nsm.message, ar.result, ar.exception); 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.message.sendToTarget(); 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1500767a662ecde33c3979bf02b793d392aca0403162Wink Saville 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // open the shared preferences editor, and write the value. 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // nsm.operatorNumeric is "" if we're in automatic.selection. 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putString(NETWORK_SELECTION_KEY, nsm.operatorNumeric); 1506c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang editor.putString(NETWORK_SELECTION_NAME_KEY, nsm.operatorAlphaLong); 1507767a662ecde33c3979bf02b793d392aca0403162Wink Saville 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // commit and log the result. 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (! editor.commit()) { 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "failed to commit network selection preference"); 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Saves CLIR setting so that we can re-apply it as necessary 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (in case the RIL resets it across reboots). 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1519767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void saveClirSetting(int commandInterfaceCLIRMode) { 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // open the shared preferences editor, and write the value. 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putInt(CLIR_KEY, commandInterfaceCLIRMode); 1524767a662ecde33c3979bf02b793d392aca0403162Wink Saville 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // commit and log the result. 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (! editor.commit()) { 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "failed to commit CLIR preference"); 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void handleCfuQueryResult(CallForwardInfo[] infos) { 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (infos == null || infos.length == 0) { 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Assume the default is not active 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Set unconditional CFF in SIM to false 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords.setVoiceCallForwardingFlag(1, false); 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0, s = infos.length; i < s; i++) { 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((infos[i].serviceClass & SERVICE_CLASS_VOICE) != 0) { 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSIMRecords.setVoiceCallForwardingFlag(1, (infos[i].status == 1)); 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // should only have the one 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * simulateDataConnection 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * simulates various data connection states. This messes with 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DataConnectionTracker's internal states, but doesn't actually change 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the underlying radio connection states. 1552767a662ecde33c3979bf02b793d392aca0403162Wink Saville * 15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param state Phone.DataState enum. 15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void simulateDataConnection(Phone.DataState state) { 15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DataConnectionTracker.State dcState; 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (state) { 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case CONNECTED: 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dcState = DataConnectionTracker.State.CONNECTED; 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SUSPENDED: 15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dcState = DataConnectionTracker.State.CONNECTED; 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DISCONNECTED: 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dcState = DataConnectionTracker.State.FAILED; 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dcState = DataConnectionTracker.State.CONNECTING; 15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDataConnection.setState(dcState); 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyDataConnection(null); 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1576767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1577767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1578767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Retrieves the PhoneSubInfo of the GSMPhone 1579767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1580767a662ecde33c3979bf02b793d392aca0403162Wink Saville public PhoneSubInfo getPhoneSubInfo(){ 1581767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSubInfo; 1582767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1583767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1584767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1585767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Retrieves the IccSmsInterfaceManager of the GSMPhone 1586767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1587767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccSmsInterfaceManager getIccSmsInterfaceManager(){ 1588767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSimSmsIntManager; 1589767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1590767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1591767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1592767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Retrieves the IccPhoneBookInterfaceManager of the GSMPhone 1593767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1594767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager(){ 1595767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSimPhoneBookIntManager; 1596767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1597767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1598767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1599767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@inheritDoc} 1600767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1601767a662ecde33c3979bf02b793d392aca0403162Wink Saville public Handler getHandler(){ 1602767a662ecde33c3979bf02b793d392aca0403162Wink Saville return h; 1603767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1604767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1605767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1606767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@inheritDoc} 1607767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1608767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccFileHandler getIccFileHandler(){ 1609767a662ecde33c3979bf02b793d392aca0403162Wink Saville return this.mIccFileHandler; 1610767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1611767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1612767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 1613767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "Error! This functionality is not implemented for GSM."); 1614767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1615767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1616767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCellBroadcastSmsConfig(Message response) { 1617767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "Error! This functionality is not implemented for GSM."); 1618767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1619767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1620767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response){ 1621767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "Error! This functionality is not implemented for GSM."); 1622767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1623767a662ecde33c3979bf02b793d392aca0403162Wink Saville 16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1625