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.Message; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Registrant; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RegistrantList; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemProperties; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.preference.PreferenceManager; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Telephony; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.CellLocation; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.PhoneNumberUtils; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.telephony.ServiceState; 35e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 369d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Savilleimport com.android.internal.telephony.CallTracker; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_DISABLE; 41767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_ENABLE; 42767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_ERASURE; 43767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_ACTION_REGISTRATION; 44767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_ALL; 45767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_ALL_CONDITIONAL; 46767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_NO_REPLY; 47767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_NOT_REACHABLE; 48767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_BUSY; 49767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.CF_REASON_UNCONDITIONAL; 50767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_VOICE; 51767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_BASEBAND_VERSION; 52767a662ecde33c3979bf02b793d392aca0403162Wink Saville 53a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenkaimport com.android.internal.telephony.cat.CatService; 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; 59e7af59b375f08b13d964816fc52048e670764bdbAlex Yakavenkaimport com.android.internal.telephony.IccCard; 60767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccFileHandler; 61767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 62767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.MmiCode; 643caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwaltimport com.android.internal.telephony.OperatorInfo; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.Phone; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.PhoneBase; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.PhoneNotifier; 68767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.PhoneProxy; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.PhoneSubInfo; 709bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganeshimport com.android.internal.telephony.TelephonyProperties; 7124440cf8a9431291bdcaa77b418e6c4715932507Naveen Kallaimport com.android.internal.telephony.UUSInfo; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.telephony.test.SimulatedRadioControl; 7322c1700378667c1f25974b134cc201663ac2c29eWink Savilleimport com.android.internal.telephony.uicc.UiccController; 74767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.IccVmNotSupportedException; 759d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Savilleimport com.android.internal.telephony.ServiceStateTracker; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7730ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Savilleimport java.io.FileDescriptor; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 7930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Savilleimport java.io.PrintWriter; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.InetSocketAddress; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.ServerSocket; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.net.Socket; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class GSMPhone extends PhoneBase { 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // NOTE that LOG_TAG here is "GSM", which means that log messages 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // from this file will go into the radio log rather than the main 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // log. (Use "adb logcat -b radio" to see them.) 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final String LOG_TAG = "GSM"; 94767a662ecde33c3979bf02b793d392aca0403162Wink Saville private static final boolean LOCAL_DEBUG = true; 9530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville private static final boolean VDBG = false; /* STOP SHIP if true */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Key used to read/write current ciphering state 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CIPHERING_KEY = "ciphering_key"; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Key used to read/write voice mail number 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String VM_NUMBER = "vm_number_key"; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Key used to read/write the SIM IMSI used for storing the voice mail 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String VM_SIM_IMSI = "vm_sim_imsi_key"; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 104a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Instance Variables 105767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCallTracker mCT; 106767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmServiceStateTracker mSST; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList <GsmMmiCode> mPendingMMIs = new ArrayList<GsmMmiCode>(); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SimPhoneBookInterfaceManager mSimPhoneBookIntManager; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SimSmsInterfaceManager mSimSmsIntManager; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PhoneSubInfo mSubInfo; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Registrant mPostDialHandler; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** List of Registrants to receive Supplementary Service Notifications. */ 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RegistrantList mSsnRegistrants = new RegistrantList(); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread debugPortThread; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServerSocket debugSocket; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mImei; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mImeiSv; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mVmNumber; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 126a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Constructors 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public 129767a662ecde33c3979bf02b793d392aca0403162Wink Saville GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier) { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context,ci,notifier, false); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public 134767a662ecde33c3979bf02b793d392aca0403162Wink Saville GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier, boolean unitTestMode) { 135a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super(notifier, context, ci, unitTestMode); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ci instanceof SimulatedRadioControl) { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSimulatedRadioControl = (SimulatedRadioControl) ci; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 140ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville 1413cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink mCM.setPhoneType(Phone.PHONE_TYPE_GSM); 142ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccCard.set(UiccController.getInstance(this).getIccCard()); 143ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords = mIccCard.get().getIccRecords(); 144767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT = new GsmCallTracker(this); 145767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST = new GsmServiceStateTracker (this); 146b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSMS = new GsmSMSDispatcher(this, mSmsStorageMonitor, mSmsUsageMonitor); 14763edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker = new GsmDataConnectionTracker (this); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!unitTestMode) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSimPhoneBookIntManager = new SimPhoneBookInterfaceManager(this); 150bb3716332321e22537a5015be13e2229fb9b90bcJake Hamby mSimSmsIntManager = new SimSmsInterfaceManager(this, mSMS); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSubInfo = new PhoneSubInfo(this); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 153767a662ecde33c3979bf02b793d392aca0403162Wink Saville 154a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); 155ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville registerForSimRecordEvents(); 156a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null); 157a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.registerForOn(this, EVENT_RADIO_ON, null); 158a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setOnUSSD(this, EVENT_USSD, null); 159a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.setOnSuppServiceNotification(this, EVENT_SSN, null); 16088d852969a0ffd2ce228defe96ecae0173574f55Robert Greenwalt mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (false) { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //debugSocket = new LocalServerSocket("com.android.internal.telephony.debug"); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugSocket = new ServerSocket(); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugSocket.setReuseAddress(true); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugSocket.bind (new InetSocketAddress("127.0.0.1", 6666)); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugPortThread 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new Thread( 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Runnable() { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for(;;) { 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Socket sock; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sock = debugSocket.accept(); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.i(LOG_TAG, "New connection; resetting radio"); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.resetRadio(null); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sock.close(); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException ex) { 181767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.w(LOG_TAG, 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Exception accepting socket", ex); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }, 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GSMPhone debug"); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project debugPortThread.start(); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IOException ex) { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.w(LOG_TAG, "Failure to open com.android.internal.telephony.debug socket", ex); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 195767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1969bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh //Change the system property 1979bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh SystemProperties.set(TelephonyProperties.CURRENT_ACTIVE_PHONE, 1983cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink new Integer(Phone.PHONE_TYPE_GSM).toString()); 199767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 200767a662ecde33c3979bf02b793d392aca0403162Wink Saville 201b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 202767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void dispose() { 203767a662ecde33c3979bf02b793d392aca0403162Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 204a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.dispose(); 205a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville 206767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Unregister from all former registered events 207a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForAvailable(this); //EVENT_RADIO_AVAILABLE 20880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka unregisterForSimRecordEvents(); 209a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOffOrNotAvailable(this); //EVENT_RADIO_OFF_OR_NOT_AVAILABLE 210a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unregisterForOn(this); //EVENT_RADIO_ON 21188d852969a0ffd2ce228defe96ecae0173574f55Robert Greenwalt mSST.unregisterForNetworkAttached(this); //EVENT_REGISTERED_TO_NETWORK 212a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unSetOnUSSD(this); 213a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.unSetOnSuppServiceNotification(this); 214767a662ecde33c3979bf02b793d392aca0403162Wink Saville 215767a662ecde33c3979bf02b793d392aca0403162Wink Saville mPendingMMIs.clear(); 216767a662ecde33c3979bf02b793d392aca0403162Wink Saville 217767a662ecde33c3979bf02b793d392aca0403162Wink Saville //Force all referenced classes to unregister their former registered events 218767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCT.dispose(); 21963edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.dispose(); 220767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSST.dispose(); 221767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSimPhoneBookIntManager.dispose(); 222767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSimSmsIntManager.dispose(); 223767a662ecde33c3979bf02b793d392aca0403162Wink Saville mSubInfo.dispose(); 224767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 226767a662ecde33c3979bf02b793d392aca0403162Wink Saville 227b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby @Override 228767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void removeReferences() { 229b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby Log.d(LOG_TAG, "removeReferences"); 230b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSimulatedRadioControl = null; 231b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSimPhoneBookIntManager = null; 232b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSimSmsIntManager = null; 233b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSubInfo = null; 234b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mCT = null; 235b7945cae5ad0feaad09378d0db77f2b3105e5235Jake Hamby mSST = null; 236ce2dcb6f1358398eef9ccffccd0c0a309238f7a4Alex Yakavenka super.removeReferences(); 237767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 238767a662ecde33c3979bf02b793d392aca0403162Wink Saville 239767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void finalize() { 240767a662ecde33c3979bf02b793d392aca0403162Wink Saville if(LOCAL_DEBUG) Log.d(LOG_TAG, "GSMPhone finalized"); 241767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 242767a662ecde33c3979bf02b793d392aca0403162Wink Saville 243767a662ecde33c3979bf02b793d392aca0403162Wink Saville 244767a662ecde33c3979bf02b793d392aca0403162Wink Saville public ServiceState 245767a662ecde33c3979bf02b793d392aca0403162Wink Saville getServiceState() { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSST.ss; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CellLocation getCellLocation() { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSST.cellLoc; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2533cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public Phone.State getState() { 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.state; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2573cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public String getPhoneName() { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "GSM"; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2613cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink public int getPhoneType() { 2623cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink return Phone.PHONE_TYPE_GSM; 2633cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink } 2643cc97f8dbc22eff56f17f30e1633084af507eff4Tammo Spalink 265e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public SignalStrength getSignalStrength() { 266e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville return mSST.mSignalStrength; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville public CallTracker getCallTracker() { 2709d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville return mCT; 2719d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 2729d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville 2739d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville public ServiceStateTracker getServiceStateTracker() { 2749d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville return mSST; 2759d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville } 2769d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<? extends MmiCode> 278767a662ecde33c3979bf02b793d392aca0403162Wink Saville getPendingMmiCodes() { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPendingMMIs; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28202648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt public DataState getDataConnectionState(String apnType) { 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DataState ret = DataState.DISCONNECTED; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28582583b8312403ed734c30b161750d40c26086ee2Elliott Hughes if (mSST == null) { 28644038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville // Radio Technology Change is ongoning, dispose() and removeReferences() have 28744038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville // already been called 28844038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville 28944038aa032ffd876f3c9b20a84db9d189f77e18eWink Saville ret = DataState.DISCONNECTED; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mSST.getCurrentGprsState() 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project != ServiceState.STATE_IN_SERVICE) { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If we're out of service, open TCP sockets may still work 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // but no data will flow 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ret = DataState.DISCONNECTED; 29563edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt } else if (mDataConnectionTracker.isApnTypeEnabled(apnType) == false || 29663edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.isApnTypeActive(apnType) == false) { 2972e994586ed0aa09f93951dbc4de35d56a93abe95Kazuhiro Ondo //TODO: isApnTypeActive() is just checking whether ApnContext holds 2982e994586ed0aa09f93951dbc4de35d56a93abe95Kazuhiro Ondo // Dataconnection or not. Checking each ApnState below should 2992e994586ed0aa09f93951dbc4de35d56a93abe95Kazuhiro Ondo // provide the same state. Calling isApnTypeActive() can be removed. 30002648a4b8422733ed401f07edf8e426318bb2f8dRobert Greenwalt ret = DataState.DISCONNECTED; 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { /* mSST.gprsState == ServiceState.STATE_IN_SERVICE */ 30263edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt switch (mDataConnectionTracker.getState(apnType)) { 303767a662ecde33c3979bf02b793d392aca0403162Wink Saville case FAILED: 304767a662ecde33c3979bf02b793d392aca0403162Wink Saville case IDLE: 305767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.DISCONNECTED; 306767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 308767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTED: 309767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DISCONNECTING: 310767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( mCT.state != Phone.State.IDLE 3119d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville && !mSST.isConcurrentVoiceAndDataAllowed()) { 312767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.SUSPENDED; 313767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else { 314767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTED; 315767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 316767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 318767a662ecde33c3979bf02b793d392aca0403162Wink Saville case INITING: 319767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CONNECTING: 320767a662ecde33c3979bf02b793d392aca0403162Wink Saville case SCANNING: 321767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataState.CONNECTING; 322767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ret; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DataActivityState getDataActivityState() { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DataActivityState ret = DataActivityState.NONE; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSST.getCurrentGprsState() == ServiceState.STATE_IN_SERVICE) { 33363edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt switch (mDataConnectionTracker.getActivity()) { 334767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAIN: 335767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAIN; 336767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 338767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAOUT: 339767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAOUT; 340767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 342767a662ecde33c3979bf02b793d392aca0403162Wink Saville case DATAINANDOUT: 343767a662ecde33c3979bf02b793d392aca0403162Wink Saville ret = DataActivityState.DATAINANDOUT; 344767a662ecde33c3979bf02b793d392aca0403162Wink Saville break; 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ret; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3521c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify any interested party of a Phone state change {@link Phone.State} 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void notifyPhoneStateChanged() { 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifyPhoneState(this); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3591c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 3601c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3621c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh /*package*/ void notifyPreciseCallStateChanged() { 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* we'd love it if this was package-scoped*/ 3641c42769339d8fe98ecb2698c64e7dc6672e3d59dJaikumar Ganesh super.notifyPreciseCallStateChangedP(); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 368767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifyNewRingingConnection(Connection c) { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* we'd love it if this was package-scoped*/ 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.notifyNewRingingConnectionP(c); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 374767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifyDisconnect(Connection cn) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDisconnectRegistrants.notifyResult(cn); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void notifyUnknownConnection() { 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUnknownConnectionRegistrants.notifyResult(this); 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 381767a662ecde33c3979bf02b793d392aca0403162Wink Saville 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void notifySuppServiceFailed(SuppService code) { 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSuppServiceFailedRegistrants.notifyResult(code); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 387767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifyServiceStateChanged(ServiceState ss) { 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.notifyServiceStateChangedP(ss); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void notifyLocationChanged() { 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifyCellLocation(this); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 397767a662ecde33c3979bf02b793d392aca0403162Wink Saville notifySignalStrength() { 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifySignalStrength(this); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4019d7d62801ddb206d2ea96d74864a9edfe54d2eeeWink Saville public void 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifyCallForwardingIndicator() { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNotifier.notifyCallForwardingChanged(this); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 406767a662ecde33c3979bf02b793d392aca0403162Wink Saville // override for allowing access from other classes of this package 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 408767a662ecde33c3979bf02b793d392aca0403162Wink Saville * {@inheritDoc} 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 410767a662ecde33c3979bf02b793d392aca0403162Wink Saville public final void 411767a662ecde33c3979bf02b793d392aca0403162Wink Saville setSystemProperty(String property, String value) { 412767a662ecde33c3979bf02b793d392aca0403162Wink Saville super.setSystemProperty(property, value); 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void registerForSuppServiceNotification( 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Handler h, int what, Object obj) { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSsnRegistrants.addUnique(h, what, obj); 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSsnRegistrants.size() == 1) mCM.setSuppServiceNotifications(true, null); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void unregisterForSuppServiceNotification(Handler h) { 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSsnRegistrants.remove(h); 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mSsnRegistrants.size() == 0) mCM.setSuppServiceNotifications(false, null); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 426767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 427767a662ecde33c3979bf02b793d392aca0403162Wink Saville acceptCall() throws CallStateException { 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.acceptCall(); 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 431767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 432767a662ecde33c3979bf02b793d392aca0403162Wink Saville rejectCall() throws CallStateException { 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.rejectCall(); 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 437767a662ecde33c3979bf02b793d392aca0403162Wink Saville switchHoldingAndActive() throws CallStateException { 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.switchWaitingOrHoldingAndActive(); 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 441767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canConference() { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.canConference(); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 445767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canDial() { 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.canDial(); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void conference() throws CallStateException { 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.conference(); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 453767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void clearDisconnected() { 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.clearDisconnected(); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 457767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean canTransfer() { 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.canTransfer(); 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 461767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void explicitCallTransfer() throws CallStateException { 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.explicitCallTransfer(); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 465767a662ecde33c3979bf02b793d392aca0403162Wink Saville public GsmCall 466767a662ecde33c3979bf02b793d392aca0403162Wink Saville getForegroundCall() { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.foregroundCall; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 470767a662ecde33c3979bf02b793d392aca0403162Wink Saville public GsmCall 471767a662ecde33c3979bf02b793d392aca0403162Wink Saville getBackgroundCall() { 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.backgroundCall; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 475767a662ecde33c3979bf02b793d392aca0403162Wink Saville public GsmCall 476767a662ecde33c3979bf02b793d392aca0403162Wink Saville getRingingCall() { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mCT.ringingCall; 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCallDeflectionIncallSupplementaryService( 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String dialString) throws CallStateException { 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialString.length() > 1) { 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 486767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (getRingingCall().getState() != GsmCall.State.IDLE) { 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 0: rejectCall"); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.rejectCall(); 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "reject failed", e); 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.REJECT); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 495767a662ecde33c3979bf02b793d392aca0403162Wink Saville } else if (getBackgroundCall().getState() != GsmCall.State.IDLE) { 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 0: hangupWaitingOrBackground"); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.hangupWaitingOrBackground(); 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCallWaitingIncallSupplementaryService( 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String dialString) throws CallStateException { 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = dialString.length(); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 2) { 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 512767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall call = (GsmCall) getForegroundCall(); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 1) { 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char ch = dialString.charAt(1); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int callIndex = ch - '0'; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (callIndex >= 1 && callIndex <= GsmCallTracker.MAX_CONNECTIONS) { 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 1: hangupConnectionByIndex " + 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callIndex); 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.hangupConnectionByIndex(call, callIndex); 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 526767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (call.getState() != GsmCall.State.IDLE) { 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 1: hangup foreground"); 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //mCT.hangupForegroundResumeBackground(); 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.hangup(call); 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 1: switchWaitingOrHoldingAndActive"); 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.switchWaitingOrHoldingAndActive(); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "hangup failed", e); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.HANGUP); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCallHoldIncallSupplementaryService(String dialString) 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = dialString.length(); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 2) { 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 554767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall call = (GsmCall) getForegroundCall(); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len > 1) { 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char ch = dialString.charAt(1); 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int callIndex = ch - '0'; 560767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmConnection conn = mCT.getConnectionByIndex(call, callIndex); 561767a662ecde33c3979bf02b793d392aca0403162Wink Saville 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // gsm index starts at 1, up to 5 connections in a call, 563767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (conn != null && callIndex >= 1 && callIndex <= GsmCallTracker.MAX_CONNECTIONS) { 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 2: separate call "+ 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callIndex); 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.separate(conn); 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "separate: invalid call index "+ 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callIndex); 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.SEPARATE); 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "separate failed", e); 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.SEPARATE); 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 579767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (getRingingCall().getState() != GsmCall.State.IDLE) { 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 2: accept ringing call"); 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.acceptCall(); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "MmiCode 2: switchWaitingOrHoldingAndActive"); 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.switchWaitingOrHoldingAndActive(); 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "switch failed", e); 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.SWITCH); 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleMultipartyIncallSupplementaryService( 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String dialString) throws CallStateException { 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialString.length() > 1) { 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 3: merge calls"); 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project conference(); 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "conference failed", e); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.CONFERENCE); 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleEctIncallSupplementaryService(String dialString) 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = dialString.length(); 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (len != 1) { 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "MmiCode 4: explicit call transfer"); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project explicitCallTransfer(); 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CallStateException e) { 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "transfer failed", e); 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.TRANSFER); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean handleCcbsIncallSupplementaryService(String dialString) 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialString.length() > 1) { 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.i(LOG_TAG, "MmiCode 5: CCBS not supported!"); 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Treat it as an "unknown" service. 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project notifySuppServiceFailed(Phone.SuppService.UNKNOWN); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean handleInCallMmiCommands(String dialString) 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws CallStateException { 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isInCall()) { 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(dialString)) { 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean result = false; 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char ch = dialString.charAt(0); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (ch) { 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '0': 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCallDeflectionIncallSupplementaryService( 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialString); 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '1': 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCallWaitingIncallSupplementaryService( 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialString); 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '2': 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCallHoldIncallSupplementaryService(dialString); 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '3': 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleMultipartyIncallSupplementaryService(dialString); 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '4': 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleEctIncallSupplementaryService(dialString); 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case '5': 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = handleCcbsIncallSupplementaryService(dialString); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isInCall() { 688767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall.State foregroundCallState = getForegroundCall().getState(); 689767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall.State backgroundCallState = getBackgroundCall().getState(); 690767a662ecde33c3979bf02b793d392aca0403162Wink Saville GsmCall.State ringingCallState = getRingingCall().getState(); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (foregroundCallState.isAlive() || 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project backgroundCallState.isAlive() || 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ringingCallState.isAlive()); 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Connection 69824440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla dial(String dialString) throws CallStateException { 69924440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla return dial(dialString, null); 70024440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla } 70124440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla 70224440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla public Connection 70324440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla dial (String dialString, UUSInfo uusInfo) throws CallStateException { 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Need to make sure dialString gets parsed properly 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String newDialString = PhoneNumberUtils.stripSeparators(dialString); 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // handle in-call MMI first if applicable 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handleInCallMmiCommands(newDialString)) { 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Only look at the Network portion for mmi 7139e534153264138cfee383c626db92b934fafc1afTammo Spalink String networkPortion = PhoneNumberUtils.extractNetworkPortionAlt(newDialString); 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi = GsmMmiCode.newFromDialString(networkPortion, this); 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "dialing w/ mmi '" + mmi + "'..."); 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mmi == null) { 71924440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla return mCT.dial(newDialString, uusInfo); 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mmi.isTemporaryModeCLIR()) { 72124440cf8a9431291bdcaa77b418e6c4715932507Naveen Kalla return mCT.dial(mmi.dialingNumber, mmi.getCLIRMode(), uusInfo); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPendingMMIs.add(mmi); 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mmi.processCode(); 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // FIXME should this return null or something else? 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean handlePinMmi(String dialString) { 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi = GsmMmiCode.newFromDialString(dialString, this); 734767a662ecde33c3979bf02b793d392aca0403162Wink Saville 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mmi != null && mmi.isPinCommand()) { 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPendingMMIs.add(mmi); 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mmi.processCode(); 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 741767a662ecde33c3979bf02b793d392aca0403162Wink Saville 742767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendUssdResponse(String ussdMessge) { 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi = GsmMmiCode.newFromUssdUserInput(ussdMessge, this); 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPendingMMIs.add(mmi); 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiRegistrants.notifyRegistrants(new AsyncResult(null, mmi, null)); 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mmi.sendUssd(ussdMessge); 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 751767a662ecde33c3979bf02b793d392aca0403162Wink Saville 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendDtmf(char c) { 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!PhoneNumberUtils.is12Key(c)) { 755767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "sendDtmf called with invalid character '" + c + "'"); 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCT.state == Phone.State.OFFHOOK) { 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.sendDtmf(c, null); 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startDtmf(char c) { 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!PhoneNumberUtils.is12Key(c)) { 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startDtmf called with invalid character '" + c + "'"); 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.startDtmf(c, null); 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stopDtmf() { 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.stopDtmf(null); 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 780e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville sendBurstDtmf(String dtmfString) { 781e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville Log.e(LOG_TAG, "[GSMPhone] sendBurstDtmf() is a CDMA method"); 782e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville } 783e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville 784e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setRadioPower(boolean power) { 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.setRadioPower(power); 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void storeVoiceMailNumber(String number) { 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 7929bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh editor.putString(VM_NUMBER, number); 793fa8e271636b9e9b86f247cdb4c91d9ebe9675c27Brad Fitzpatrick editor.apply(); 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setVmSimImsi(getSubscriberId()); 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getVoiceMailNumber() { 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Read from the SIM. If its null, try reading from the shared preference area. 799ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville String number = mIccRecords.getVoiceMailNumber(); 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (TextUtils.isEmpty(number)) { 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project number = sp.getString(VM_NUMBER, null); 8039bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh } 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return number; 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8069bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String getVmSimImsi() { 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sp.getString(VM_SIM_IMSI, null); 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setVmSimImsi(String imsi) { 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putString(VM_SIM_IMSI, imsi); 816fa8e271636b9e9b86f247cdb4c91d9ebe9675c27Brad Fitzpatrick editor.apply(); 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8189bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getVoiceMailAlphaTag() { 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String ret; 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 822ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville ret = mIccRecords.getVoiceMailAlphaTag(); 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ret == null || ret.length() == 0) { 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mContext.getText( 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.string.defaultVoiceMailAlphaTag).toString(); 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829767a662ecde33c3979bf02b793d392aca0403162Wink Saville return ret; 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getDeviceId() { 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mImei; 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getDeviceSvn() { 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mImeiSv; 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8402ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang public String getImei() { 8412ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang return mImei; 8422ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang } 8432ea7e443b27ff185104b8a8b5e7a08b5510125bdJohn Wang 844767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getEsn() { 845767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "[GSMPhone] getEsn() is a CDMA method"); 846767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 847767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 848767a662ecde33c3979bf02b793d392aca0403162Wink Saville 849767a662ecde33c3979bf02b793d392aca0403162Wink Saville public String getMeid() { 850767a662ecde33c3979bf02b793d392aca0403162Wink Saville Log.e(LOG_TAG, "[GSMPhone] getMeid() is a CDMA method"); 851767a662ecde33c3979bf02b793d392aca0403162Wink Saville return "0"; 852767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 853767a662ecde33c3979bf02b793d392aca0403162Wink Saville 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSubscriberId() { 855ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville return mIccRecords.getIMSI(); 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLine1Number() { 859ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville return mIccRecords.getMsisdnNumber(); 8605d39ec4a37de500ada84225f8bd2c244db0cd287Jake Hamby } 8615d39ec4a37de500ada84225f8bd2c244db0cd287Jake Hamby 8625d39ec4a37de500ada84225f8bd2c244db0cd287Jake Hamby @Override 8635d39ec4a37de500ada84225f8bd2c244db0cd287Jake Hamby public String getMsisdn() { 864ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville return mIccRecords.getMsisdnNumber(); 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLine1AlphaTag() { 868ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville return mIccRecords.getMsisdnAlphaTag(); 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLine1Number(String alphaTag, String number, Message onComplete) { 872ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.setMsisdnNumber(alphaTag, number, onComplete); 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setVoiceMailNumber(String alphaTag, 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String voiceMailNumber, 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message onComplete) { 8789bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 8799bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh Message resp; 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVmNumber = voiceMailNumber; 881a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville resp = obtainMessage(EVENT_SET_VM_NUMBER_DONE, 0, 0, onComplete); 882ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.setVoiceMailNumber(alphaTag, mVmNumber, resp); 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8849bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean isValidCommandInterfaceCFReason (int commandInterfaceCFReason) { 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (commandInterfaceCFReason) { 887767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_UNCONDITIONAL: 888767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_BUSY: 889767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_NO_REPLY: 890767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_NOT_REACHABLE: 891767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_ALL: 892767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_REASON_ALL_CONDITIONAL: 893767a662ecde33c3979bf02b793d392aca0403162Wink Saville return true; 894767a662ecde33c3979bf02b793d392aca0403162Wink Saville default: 895767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean isValidCommandInterfaceCFAction (int commandInterfaceCFAction) { 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (commandInterfaceCFAction) { 901767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_DISABLE: 902767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_ENABLE: 903767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_REGISTRATION: 904767a662ecde33c3979bf02b793d392aca0403162Wink Saville case CF_ACTION_ERASURE: 905767a662ecde33c3979bf02b793d392aca0403162Wink Saville return true; 906767a662ecde33c3979bf02b793d392aca0403162Wink Saville default: 907767a662ecde33c3979bf02b793d392aca0403162Wink Saville return false; 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 910767a662ecde33c3979bf02b793d392aca0403162Wink Saville 911767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected boolean isCfEnable(int action) { 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (action == CF_ACTION_ENABLE) || (action == CF_ACTION_REGISTRATION); 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 914767a662ecde33c3979bf02b793d392aca0403162Wink Saville 915767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isValidCommandInterfaceCFReason(commandInterfaceCFReason)) { 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "requesting call forwarding query."); 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message resp; 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (commandInterfaceCFReason == CF_REASON_UNCONDITIONAL) { 920a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville resp = obtainMessage(EVENT_GET_CALL_FORWARD_DONE, onComplete); 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp = onComplete; 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.queryCallForwardStatus(commandInterfaceCFReason,0,null,resp); 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCallForwardingOption(int commandInterfaceCFAction, 929767a662ecde33c3979bf02b793d392aca0403162Wink Saville int commandInterfaceCFReason, 930767a662ecde33c3979bf02b793d392aca0403162Wink Saville String dialingNumber, 931767a662ecde33c3979bf02b793d392aca0403162Wink Saville int timerSeconds, 932767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message onComplete) { 933767a662ecde33c3979bf02b793d392aca0403162Wink Saville if ( (isValidCommandInterfaceCFAction(commandInterfaceCFAction)) && 934767a662ecde33c3979bf02b793d392aca0403162Wink Saville (isValidCommandInterfaceCFReason(commandInterfaceCFReason))) { 935767a662ecde33c3979bf02b793d392aca0403162Wink Saville 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message resp; 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (commandInterfaceCFReason == CF_REASON_UNCONDITIONAL) { 938a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville resp = obtainMessage(EVENT_SET_CALL_FORWARD_DONE, 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isCfEnable(commandInterfaceCFAction) ? 1 : 0, 0, onComplete); 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp = onComplete; 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCallForward(commandInterfaceCFAction, 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project commandInterfaceCFReason, 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CommandsInterface.SERVICE_CLASS_VOICE, 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialingNumber, 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project timerSeconds, 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resp); 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 951767a662ecde33c3979bf02b793d392aca0403162Wink Saville 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getOutgoingCallerIdDisplay(Message onComplete) { 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getCLIR(onComplete); 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 955767a662ecde33c3979bf02b793d392aca0403162Wink Saville 956767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Message onComplete) { 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCLIR(commandInterfaceCLIRMode, 959a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville obtainMessage(EVENT_SET_CLIR_COMPLETE, commandInterfaceCLIRMode, 0, onComplete)); 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void getCallWaiting(Message onComplete) { 963c4c4c98c5ca6b4c017a5b429a6bd80a440c63559Naveen Kalla //As per 3GPP TS 24.083, section 1.6 UE doesn't need to send service 964c4c4c98c5ca6b4c017a5b429a6bd80a440c63559Naveen Kalla //class parameter in call waiting interrogation to network 965c4c4c98c5ca6b4c017a5b429a6bd80a440c63559Naveen Kalla mCM.queryCallWaiting(CommandsInterface.SERVICE_CLASS_NONE, onComplete); 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 967767a662ecde33c3979bf02b793d392aca0403162Wink Saville 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCallWaiting(boolean enable, Message onComplete) { 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCallWaiting(enable, CommandsInterface.SERVICE_CLASS_VOICE, onComplete); 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 971767a662ecde33c3979bf02b793d392aca0403162Wink Saville 972767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getAvailableNetworks(Message response) { 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getAvailableNetworks(response); 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 978767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Small container class used to hold information relevant to 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the carrier selection process. operatorNumeric can be "" 980c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang * if we are looking for automatic selection. operatorAlphaLong is the 981c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang * corresponding operator name. 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class NetworkSelectMessage { 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Message message; 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String operatorNumeric; 986c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang public String operatorAlphaLong; 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 988767a662ecde33c3979bf02b793d392aca0403162Wink Saville 989767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setNetworkSelectionModeAutomatic(Message response) { 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // wrap the response message in our own message along with 992767a662ecde33c3979bf02b793d392aca0403162Wink Saville // an empty string (to indicate automatic selection) for the 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // operator's id. 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkSelectMessage nsm = new NetworkSelectMessage(); 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.message = response; 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.operatorNumeric = ""; 997c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang nsm.operatorAlphaLong = ""; 998767a662ecde33c3979bf02b793d392aca0403162Wink Saville 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get the message 1000a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Message msg = obtainMessage(EVENT_SET_NETWORK_AUTOMATIC_COMPLETE, nsm); 1001767a662ecde33c3979bf02b793d392aca0403162Wink Saville if (LOCAL_DEBUG) 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.d(LOG_TAG, "wrapping and sending message to connect automatically"); 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setNetworkSelectionModeAutomatic(msg); 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1007767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void 10083caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt selectNetworkManually(OperatorInfo network, 1009767a662ecde33c3979bf02b793d392aca0403162Wink Saville Message response) { 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // wrap the response message in our own message along with 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the operator's id. 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkSelectMessage nsm = new NetworkSelectMessage(); 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.message = response; 10143caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt nsm.operatorNumeric = network.getOperatorNumeric(); 10153caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt nsm.operatorAlphaLong = network.getOperatorAlphaLong(); 1016767a662ecde33c3979bf02b793d392aca0403162Wink Saville 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get the message 1018a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Message msg = obtainMessage(EVENT_SET_NETWORK_MANUAL_COMPLETE, nsm); 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10203caa1bd1061df4029951e68d0a04d5e30928701fRobert Greenwalt mCM.setNetworkSelectionModeManual(network.getOperatorNumeric(), msg); 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getNeighboringCids(Message response) { 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.getNeighboringCids(response); 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1027767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1028767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPostDialHandler = new Registrant(h, what, obj); 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1032767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void setMute(boolean muted) { 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCT.setMute(muted); 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1036767a662ecde33c3979bf02b793d392aca0403162Wink Saville public boolean getMute() { 1037767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mCT.getMute(); 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1040767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getDataCallList(Message response) { 1041767a662ecde33c3979bf02b793d392aca0403162Wink Saville mCM.getDataCallList(response); 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10447a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink public void updateServiceLocation() { 10457a043b351b43e963605afef6ab76a52ae3a9270eTammo Spalink mSST.enableSingleLocationUpdate(); 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void enableLocationUpdates() { 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.enableLocationUpdates(); 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void disableLocationUpdates() { 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSST.disableLocationUpdates(); 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getDataRoamingEnabled() { 105763edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt return mDataConnectionTracker.getDataOnRoamingEnabled(); 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDataRoamingEnabled(boolean enable) { 106163edf6c4f5795009e55f2ae9556550c38daa9774Robert Greenwalt mDataConnectionTracker.setDataOnRoamingEnabled(enable); 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes the given MMI from the pending list and notifies 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * registrants that it is complete. 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mmi MMI that is done 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ void 1070767a662ecde33c3979bf02b793d392aca0403162Wink Saville onMMIDone(GsmMmiCode mmi) { 1071767a662ecde33c3979bf02b793d392aca0403162Wink Saville /* Only notify complete if it's on the pending list. 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Otherwise, it's already been handled (eg, previously canceled). 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The exception is cancellation of an incoming USSD-REQUEST, which is 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not on the list. 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPendingMMIs.remove(mmi) || mmi.isUssdRequest()) { 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiCompleteRegistrants.notifyRegistrants( 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new AsyncResult(null, mmi, null)); 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1083767a662ecde33c3979bf02b793d392aca0403162Wink Saville private void 1084767a662ecde33c3979bf02b793d392aca0403162Wink Saville onNetworkInitiatedUssd(GsmMmiCode mmi) { 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMmiCompleteRegistrants.notifyRegistrants( 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new AsyncResult(null, mmi, null)); 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** ussdMode is one of CommandsInterface.USSD_MODE_* */ 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void 1092767a662ecde33c3979bf02b793d392aca0403162Wink Saville onIncomingUSSD (int ussdMode, String ussdMessage) { 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isUssdError; 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isUssdRequest; 1095767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1096767a662ecde33c3979bf02b793d392aca0403162Wink Saville isUssdRequest 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = (ussdMode == CommandsInterface.USSD_MODE_REQUEST); 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099767a662ecde33c3979bf02b793d392aca0403162Wink Saville isUssdError 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = (ussdMode != CommandsInterface.USSD_MODE_NOTIFY 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && ussdMode != CommandsInterface.USSD_MODE_REQUEST); 1102767a662ecde33c3979bf02b793d392aca0403162Wink Saville 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // See comments in GsmMmiCode.java 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // USSD requests aren't finished until one 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // of these two events happen 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode found = null; 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0, s = mPendingMMIs.size() ; i < s; i++) { 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(mPendingMMIs.get(i).isPendingUSSD()) { 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found = mPendingMMIs.get(i); 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (found != null) { 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Complete pending USSD 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isUssdError) { 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found.onUssdFinishedError(); 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project found.onUssdFinished(ussdMessage, isUssdRequest); 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { // pending USSD not found 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The network may initiate its own USSD request 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ignore everything that isnt a Notify or a Request 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // also, discard if there is no message to present 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isUssdError && ussdMessage != null) { 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GsmMmiCode mmi; 1129767a662ecde33c3979bf02b793d392aca0403162Wink Saville mmi = GsmMmiCode.newNetworkInitiatedUssd(ussdMessage, 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isUssdRequest, 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GSMPhone.this); 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onNetworkInitiatedUssd(mmi); 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Make sure the network knows our preferred setting. 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1140767a662ecde33c3979bf02b793d392aca0403162Wink Saville protected void syncClirSetting() { 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int clirSetting = sp.getInt(CLIR_KEY, -1); 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clirSetting >= 0) { 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCM.setCLIR(clirSetting, null); 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1148a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville @Override 1149a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville public void handleMessage (Message msg) { 1150a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult ar; 1151a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Message onComplete; 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1153a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville switch (msg.what) { 1154a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_AVAILABLE: { 1155a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getBasebandVersion( 1156a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville obtainMessage(EVENT_GET_BASEBAND_VERSION_DONE)); 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1158a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getIMEI(obtainMessage(EVENT_GET_IMEI_DONE)); 1159a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mCM.getIMEISV(obtainMessage(EVENT_GET_IMEISV_DONE)); 1160a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1161a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1163a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_ON: 1164a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1166a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_REGISTERED_TO_NETWORK: 1167a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville syncClirSetting(); 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1170a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SIM_RECORDS_LOADED: 1171a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville updateCurrentCarrierInProvider(); 11729bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 1173a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Check if this is a different SIM than the previous one. If so unset the 1174a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // voice mail number. 1175a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville String imsi = getVmSimImsi(); 1176aeab76c5be62ad4289e5b27937affd4460d588b3Babis Triantafyllou String imsiFromSIM = getSubscriberId(); 1177aeab76c5be62ad4289e5b27937affd4460d588b3Babis Triantafyllou if (imsi != null && imsiFromSIM != null && !imsiFromSIM.equals(imsi)) { 1178a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville storeVoiceMailNumber(null); 1179a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville setVmSimImsi(null); 1180a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1182a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1184a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_BASEBAND_VERSION_DONE: 1185a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1187a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 1188a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1189a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1191a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (LOCAL_DEBUG) Log.d(LOG_TAG, "Baseband version: " + ar.result); 1192a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville setSystemProperty(PROPERTY_BASEBAND_VERSION, (String)ar.result); 1193a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1195a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_IMEI_DONE: 1196a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1198a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 1199a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1200a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1202a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mImei = (String)ar.result; 1203a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1205a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_IMEISV_DONE: 1206a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1208a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception != null) { 1209a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1210a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1211767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1212a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mImeiSv = (String)ar.result; 1213a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1215a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_USSD: 1216a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1218a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville String[] ussdResult = (String[]) ar.result; 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1220a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ussdResult.length > 1) { 1221a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville try { 1222a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onIncomingUSSD(Integer.parseInt(ussdResult[0]), ussdResult[1]); 1223a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } catch (NumberFormatException e) { 1224a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville Log.w(LOG_TAG, "error parsing USSD"); 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1226a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1227a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_RADIO_OFF_OR_NOT_AVAILABLE: 1230a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // Some MMI requests (eg USSD) are not completed 1231a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // within the course of a CommandsInterface request 1232a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // If the radio shuts off or resets while one of these 1233a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // is pending, we need to clean up. 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1235a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville for (int i = 0, s = mPendingMMIs.size() ; i < s; i++) { 1236a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (mPendingMMIs.get(i).isPendingUSSD()) { 1237a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mPendingMMIs.get(i).onUssdFinishedError(); 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1240a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1241a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville 1242a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SSN: 1243a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1244a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville SuppServiceNotification not = (SuppServiceNotification) ar.result; 1245a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville mSsnRegistrants.notifyRegistrants(ar); 1246a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1247a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville 1248a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_CALL_FORWARD_DONE: 1249a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1250ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville if (ar.exception == null) { 1251ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.setVoiceCallForwardingFlag(1, msg.arg1 == 1); 1252a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1253a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete = (Message) ar.userObj; 1254a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (onComplete != null) { 1255a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1256a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete.sendToTarget(); 1257a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1259767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1260a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_VM_NUMBER_DONE: 1261a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1262a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (IccVmNotSupportedException.class.isInstance(ar.exception)) { 1263a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville storeVoiceMailNumber(mVmNumber); 1264a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar.exception = null; 1265a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1266a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete = (Message) ar.userObj; 1267a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (onComplete != null) { 1268a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1269a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete.sendToTarget(); 1270a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12739bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh 1274a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_GET_CALL_FORWARD_DONE: 1275a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1276a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception == null) { 1277a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleCfuQueryResult((CallForwardInfo[])ar.result); 1278a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1279a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete = (Message) ar.userObj; 1280a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (onComplete != null) { 1281a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1282a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete.sendToTarget(); 1283a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1284a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1285767a662ecde33c3979bf02b793d392aca0403162Wink Saville 128680198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka case EVENT_NEW_ICC_SMS: 128780198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka ar = (AsyncResult)msg.obj; 128880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka mSMS.dispatchMessage((SmsMessage)ar.result); 128980198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 129080198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 129180198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka case EVENT_SET_NETWORK_AUTOMATIC: 129280198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka ar = (AsyncResult)msg.obj; 129380198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka setNetworkSelectionModeAutomatic((Message)ar.result); 129480198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 129580198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 129680198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka case EVENT_ICC_RECORD_EVENTS: 129780198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka ar = (AsyncResult)msg.obj; 129880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka processIccRecordEvents((Integer)ar.result); 129980198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 130080198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 1301a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville // handle the select network completion callbacks. 1302a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_NETWORK_MANUAL_COMPLETE: 1303a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_NETWORK_AUTOMATIC_COMPLETE: 1304a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville handleSetSelectNetwork((AsyncResult) msg.obj); 1305a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 1306767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1307a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville case EVENT_SET_CLIR_COMPLETE: 1308a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville ar = (AsyncResult)msg.obj; 1309a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (ar.exception == null) { 1310a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville saveClirSetting(msg.arg1); 1311a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1312a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete = (Message) ar.userObj; 1313a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville if (onComplete != null) { 1314a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville AsyncResult.forMessage(onComplete, ar.result, ar.exception); 1315a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville onComplete.sendToTarget(); 1316a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville } 1317a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville break; 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville default: 1320a3659232ba9f7f3ba87ff036d17e08a46cf1be62Wink Saville super.handleMessage(msg); 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 132480198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka private void processIccRecordEvents(int eventCode) { 132580198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka switch (eventCode) { 1326ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville case SIMRecords.EVENT_CFI: 132780198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka notifyCallForwardingIndicator(); 132880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 1329ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville case SIMRecords.EVENT_MWI: 133080198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka notifyMessageWaitingIndicator(); 133180198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka break; 133280198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 133380198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 133480198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 133580198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka /** 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the "current" field in the telephony provider according to the SIM's operator 13379bfbfbd40df381817c0c685b177a2a1d666e101dJaikumar Ganesh * 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true for success; false otherwise. 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean updateCurrentCarrierInProvider() { 1341ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville if (mIccRecords != null) { 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"); 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues map = new ContentValues(); 1345ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville map.put(Telephony.Carriers.NUMERIC, mIccRecords.getOperatorNumeric()); 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.getContentResolver().insert(uri, map); 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (SQLException e) { 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "Can't store current operator", e); 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Used to track the settings upon completion of the network change. 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void handleSetSelectNetwork(AsyncResult ar) { 1359767a662ecde33c3979bf02b793d392aca0403162Wink Saville // look for our wrapper within the asyncresult, skip the rest if it 1360767a662ecde33c3979bf02b793d392aca0403162Wink Saville // is null. 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!(ar.userObj instanceof NetworkSelectMessage)) { 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "unexpected result from user object."); 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1365767a662ecde33c3979bf02b793d392aca0403162Wink Saville 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project NetworkSelectMessage nsm = (NetworkSelectMessage) ar.userObj; 1367767a662ecde33c3979bf02b793d392aca0403162Wink Saville 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // found the object, now we send off the message we had originally 1369767a662ecde33c3979bf02b793d392aca0403162Wink Saville // attached to the request. 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (nsm.message != null) { 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_DEBUG) Log.d(LOG_TAG, "sending original message to recipient"); 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AsyncResult.forMessage(nsm.message, ar.result, ar.exception); 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nsm.message.sendToTarget(); 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1375767a662ecde33c3979bf02b793d392aca0403162Wink Saville 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // open the shared preferences editor, and write the value. 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // nsm.operatorNumeric is "" if we're in automatic.selection. 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putString(NETWORK_SELECTION_KEY, nsm.operatorNumeric); 1381c6f79ce6bcc77abe222e5cc39a0b065bc76bce83johnwang editor.putString(NETWORK_SELECTION_NAME_KEY, nsm.operatorAlphaLong); 1382767a662ecde33c3979bf02b793d392aca0403162Wink Saville 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // commit and log the result. 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (! editor.commit()) { 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "failed to commit network selection preference"); 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Saves CLIR setting so that we can re-apply it as necessary 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (in case the RIL resets it across reboots). 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1394767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void saveClirSetting(int commandInterfaceCLIRMode) { 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // open the shared preferences editor, and write the value. 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SharedPreferences.Editor editor = sp.edit(); 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project editor.putInt(CLIR_KEY, commandInterfaceCLIRMode); 1399767a662ecde33c3979bf02b793d392aca0403162Wink Saville 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // commit and log the result. 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (! editor.commit()) { 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOG_TAG, "failed to commit CLIR preference"); 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void handleCfuQueryResult(CallForwardInfo[] infos) { 1407ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville if (infos == null || infos.length == 0) { 1408ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville // Assume the default is not active 1409ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville // Set unconditional CFF in SIM to false 1410ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.setVoiceCallForwardingFlag(1, false); 1411ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville } else { 1412ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville for (int i = 0, s = infos.length; i < s; i++) { 1413ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville if ((infos[i].serviceClass & SERVICE_CLASS_VOICE) != 0) { 1414ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.setVoiceCallForwardingFlag(1, (infos[i].status == 1)); 1415ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville // should only have the one 1416ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville break; 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1421767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1422767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1423767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Retrieves the PhoneSubInfo of the GSMPhone 1424767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1425767a662ecde33c3979bf02b793d392aca0403162Wink Saville public PhoneSubInfo getPhoneSubInfo(){ 1426767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSubInfo; 1427767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1428767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1429767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1430767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Retrieves the IccSmsInterfaceManager of the GSMPhone 1431767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1432767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccSmsInterfaceManager getIccSmsInterfaceManager(){ 1433767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSimSmsIntManager; 1434767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1435767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1436767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1437767a662ecde33c3979bf02b793d392aca0403162Wink Saville * Retrieves the IccPhoneBookInterfaceManager of the GSMPhone 1438767a662ecde33c3979bf02b793d392aca0403162Wink Saville */ 1439767a662ecde33c3979bf02b793d392aca0403162Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager(){ 1440767a662ecde33c3979bf02b793d392aca0403162Wink Saville return mSimPhoneBookIntManager; 1441767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1442767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1443767a662ecde33c3979bf02b793d392aca0403162Wink Saville /** 1444ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * Activate or deactivate cell broadcast SMS. 1445ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * 1446ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * @param activate 0 = activate, 1 = deactivate 1447ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * @param response Callback message is empty on completion 1448ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby */ 1449767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 1450ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[GSMPhone] activateCellBroadcastSms() is obsolete; use SmsManager"); 1451ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1452767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1453767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1454ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby /** 1455ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * Query the current configuration of cdma cell broadcast SMS. 1456ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * 1457ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * @param response Callback message is empty on completion 1458ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby */ 1459767a662ecde33c3979bf02b793d392aca0403162Wink Saville public void getCellBroadcastSmsConfig(Message response) { 1460ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[GSMPhone] getCellBroadcastSmsConfig() is obsolete; use SmsManager"); 1461ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1462767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1463767a662ecde33c3979bf02b793d392aca0403162Wink Saville 1464ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby /** 1465ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * Configure cdma cell broadcast SMS. 1466ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * 1467ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby * @param response Callback message is empty on completion 1468ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby */ 1469ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response) { 1470ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby Log.e(LOG_TAG, "[GSMPhone] setCellBroadcastSmsConfig() is obsolete; use SmsManager"); 1471ab79ee4adcbc6eb9fb9c509766753f65d3857739Jake Hamby response.sendToTarget(); 1472767a662ecde33c3979bf02b793d392aca0403162Wink Saville } 1473767a662ecde33c3979bf02b793d392aca0403162Wink Saville 14740e67c8926be9896e46eeecac42894d8997656809Banavathu, Srinivas Naik public boolean isCspPlmnEnabled() { 1475ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville return mIccRecords.isCspPlmnEnabled(); 14760e67c8926be9896e46eeecac42894d8997656809Banavathu, Srinivas Naik } 147780198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 147880198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka private void registerForSimRecordEvents() { 1479ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.registerForNetworkSelectionModeAutomatic( 148080198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka this, EVENT_SET_NETWORK_AUTOMATIC, null); 1481ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.registerForNewSms(this, EVENT_NEW_ICC_SMS, null); 1482ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.registerForRecordsEvents(this, EVENT_ICC_RECORD_EVENTS, null); 1483ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.registerForRecordsLoaded(this, EVENT_SIM_RECORDS_LOADED, null); 148480198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 148580198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 148680198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka private void unregisterForSimRecordEvents() { 1487ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.unregisterForNetworkSelectionModeAutomatic(this); 1488ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.unregisterForNewSms(this); 1489ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.unregisterForRecordsEvents(this); 1490ecd302259a66aaf5abd49407c379c066e2542e95Wink Saville mIccRecords.unregisterForRecordsLoaded(this); 149180198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka } 149280198f2235d12f278e391dfedc582b0b40bfd404Alex Yakavenka 149330ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville @Override 149430ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 149530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println("GSMPhone extends:"); 149630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville super.dump(fd, pw, args); 149730ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mCT=" + mCT); 149830ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mSST=" + mSST); 149930ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mPendingMMIs=" + mPendingMMIs); 150030ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mSimPhoneBookIntManager=" + mSimPhoneBookIntManager); 150130ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mSimSmsIntManager=" + mSimSmsIntManager); 150230ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mSubInfo=" + mSubInfo); 150330ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville if (VDBG) pw.println(" mImei=" + mImei); 150430ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville if (VDBG) pw.println(" mImeiSv=" + mImeiSv); 150530ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville pw.println(" mVmNumber=" + mVmNumber); 150630ccade7f9432b8212807b9ddc8cc69a4a8fc854Wink Saville } 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1508