10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2007 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 19a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.content.BroadcastReceiver; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context; 21a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.content.Intent; 22a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.content.IntentFilter; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.SharedPreferences; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties; 2596cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwaltimport android.net.NetworkCapabilities; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.wifi.WifiManager; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 282cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Savilleimport android.os.Build; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 32e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingamimport android.os.Registrant; 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RegistrantList; 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.preference.PreferenceManager; 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.provider.Settings; 37dc2b5d1c32cad5269106d00fd106bd64097238f4Tyler Gunnimport android.telecom.VideoProfile; 38ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.CellIdentityCdma; 39ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.CellInfo; 40ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.CellInfoCdma; 418758315661d65c14d0e10d354a14f80ec1f65db7Wink Savilleimport android.telephony.DataConnectionRealTimeInfo; 422b40e6226b4b71408964bca46f0a9f256cd4f523Wink Savilleimport android.telephony.RadioAccessFamily; 43ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.Rlog; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState; 45ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.SignalStrength; 466bc4098827f3070a44b5e51508b455d7c7be9c07Wink Savilleimport android.telephony.SubscriptionManager; 472b40e6226b4b71408964bca46f0a9f256cd4f523Wink Savilleimport android.telephony.VoLteServiceState; 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 50a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.ims.ImsManager; 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.R; 52454b1dfd508844b42eb775e4ab2359be74d3672bWink Savilleimport com.android.internal.telephony.dataconnection.DcTrackerBase; 53888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohenimport com.android.internal.telephony.imsphone.ImsPhone; 542b40e6226b4b71408964bca46f0a9f256cd4f523Wink Savilleimport com.android.internal.telephony.RadioCapability; 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.test.SimulatedRadioControl; 56d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType; 57d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccFileHandler; 58d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccRecords; 59d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IsimRecords; 60a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport com.android.internal.telephony.uicc.UiccCard; 61d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccCardApplication; 62e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccController; 63d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UsimServiceTable; 64ffe6e68213ae3220497188fed814e271b472292aJake Hamby 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor; 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter; 67ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport java.util.ArrayList; 6834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawalimport java.util.HashSet; 69ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport java.util.List; 70c25bcac2c4c8754faae69efe2fc5c407f66a9240Narayan Kamathimport java.util.Locale; 7134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawalimport java.util.Set; 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicReference; 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (<em>Not for SDK use</em>) 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * A base implementation for the com.android.internal.telephony.Phone interface. 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Note that implementations of Phone.java are expected to be used 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * from a single application thread. This should be the same thread that 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * originally called PhoneFactory to obtain the interface. 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic abstract class PhoneBase extends Handler implements Phone { 87cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville private static final String LOG_TAG = "PhoneBase"; 88ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 89a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() { 90a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 91a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void onReceive(Context context, Intent intent) { 9253dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen Rlog.d(LOG_TAG, "mImsIntentReceiver: action " + intent.getAction()); 9353dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen if (intent.hasExtra(ImsManager.EXTRA_PHONE_ID)) { 9453dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen int extraPhoneId = intent.getIntExtra(ImsManager.EXTRA_PHONE_ID, 9553dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen SubscriptionManager.INVALID_PHONE_INDEX); 9653dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen Rlog.d(LOG_TAG, "mImsIntentReceiver: extraPhoneId = " + extraPhoneId); 9753dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen if (extraPhoneId == SubscriptionManager.INVALID_PHONE_INDEX || 9853dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen extraPhoneId != getPhoneId()) { 999f9aadee921db335adc891412a6e1e828153cfc6Etan Cohen return; 10053dde7e076954c250e55d156cc1df1202c3a8a9eEtan Cohen } 1019f9aadee921db335adc891412a6e1e828153cfc6Etan Cohen } 10238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 103a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_UP)) { 104a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mImsServiceReady = true; 105888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen updateImsPhone(); 106a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_DOWN)) { 107a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mImsServiceReady = false; 108888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen updateImsPhone(); 109a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 110a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 111a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville }; 112a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read and write the saved network selection numeric value 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String NETWORK_SELECTION_KEY = "network_selection_key"; 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read and write the saved network selection operator name 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String NETWORK_SELECTION_NAME_KEY = "network_selection_name_key"; 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read/write "disable data connection on boot" pref (used for testing) 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String DATA_DISABLED_ON_BOOT_KEY = "disabled_on_boot_key"; 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* Event Constants */ 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_AVAILABLE = 1; 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Supplementary Service Notification received. */ 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SSN = 2; 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SIM_RECORDS_LOADED = 3; 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_MMI_DONE = 4; 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_ON = 5; 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_BASEBAND_VERSION_DONE = 6; 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_USSD = 7; 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE = 8; 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_IMEI_DONE = 9; 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_IMEISV_DONE = 10; 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_SIM_STATUS_DONE = 11; 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_CALL_FORWARD_DONE = 12; 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_CALL_FORWARD_DONE = 13; 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CALL_RING = 14; 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CALL_RING_CONTINUE = 15; 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Used to intercept the carrier selection calls so that 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // we can save the values. 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_MANUAL_COMPLETE = 16; 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_AUTOMATIC_COMPLETE = 17; 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_CLIR_COMPLETE = 18; 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_REGISTERED_TO_NETWORK = 19; 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_VM_NUMBER_DONE = 20; 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Events for CDMA support 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_DEVICE_IDENTITY_DONE = 21; 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RUIM_RECORDS_LOADED = 22; 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_NV_READY = 23; 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_ENHANCED_VP = 24; 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_EMERGENCY_CALLBACK_MODE_ENTER = 25; 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE = 26; 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED = 27; 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // other 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_AUTOMATIC = 28; 1571260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected static final int EVENT_ICC_RECORD_EVENTS = 29; 1581260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected static final int EVENT_ICC_CHANGED = 30; 159a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // Single Radio Voice Call Continuity 160a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville protected static final int EVENT_SRVCC_STATE_CHANGED = 31; 161a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville protected static final int EVENT_INITIATE_SILENT_REDIAL = 32; 1626bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville protected static final int EVENT_RADIO_NOT_AVAILABLE = 33; 163110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu protected static final int EVENT_UNSOL_OEM_HOOK_RAW = 34; 1642b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville protected static final int EVENT_GET_RADIO_CAPABILITY = 35; 16509b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja protected static final int EVENT_SS = 36; 16609b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja protected static final int EVENT_LAST = EVENT_SS; 16709b65da3b46e18c8acc146d722047ba2fb161bfePreeti Ahuja 16834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal // For shared prefs. 16934057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal private static final String GSM_ROAMING_LIST_OVERRIDE_PREFIX = "gsm_roaming_list_"; 17034057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal private static final String GSM_NON_ROAMING_LIST_OVERRIDE_PREFIX = "gsm_non_roaming_list_"; 17134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal private static final String CDMA_ROAMING_LIST_OVERRIDE_PREFIX = "cdma_roaming_list_"; 17234057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal private static final String CDMA_NON_ROAMING_LIST_OVERRIDE_PREFIX = "cdma_non_roaming_list_"; 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read/write current CLIR setting 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String CLIR_KEY = "clir_key"; 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17726a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa // Key used for storing voice mail count 17826a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa public static final String VM_COUNT = "vm_count_key"; 17926a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa // Key used to read/write the ID for storing the voice mail 18026a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa public static final String VM_ID = "vm_id_key"; 18126a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read/write "disable DNS server check" pref (used for testing) 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String DNS_SERVER_CHECK_DISABLED_KEY = "dns_server_check_disabled_key"; 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 185f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal /** 186f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal * Small container class used to hold information relevant to 187f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal * the carrier selection process. operatorNumeric can be "" 188f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal * if we are looking for automatic selection. operatorAlphaLong is the 189f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal * corresponding operator name. 190f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal */ 191f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal protected static class NetworkSelectMessage { 192f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal public Message message; 193f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal public String operatorNumeric; 194f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal public String operatorAlphaLong; 195f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal } 196f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* Instance Variables */ 19822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville public CommandsInterface mCi; 19926a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa private int mVmCount = 0; 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mDnsCheckDisabled; 201454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville public DcTrackerBase mDcTracker; 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mDoesRilSendMultipleCallRing; 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mCallRingContinueToken; 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mCallRingDelay; 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean mIsTheCurrentActivePhone = true; 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mIsVoiceCapable = true; 207e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected UiccController mUiccController = null; 208e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka public AtomicReference<IccRecords> mIccRecords = new AtomicReference<IccRecords>(); 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsStorageMonitor mSmsStorageMonitor; 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsUsageMonitor mSmsUsageMonitor; 211e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka protected AtomicReference<UiccCardApplication> mUiccApplication = 212e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka new AtomicReference<UiccCardApplication>(); 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 214ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private TelephonyTester mTelephonyTester; 215ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String mName; 216ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String mActionDetached; 217ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String mActionAttached; 218ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 219a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville protected int mPhoneId; 220a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 22138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen private final Object mImsLock = new Object(); 22238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen private boolean mImsServiceReady = false; 223888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen protected ImsPhone mImsPhone = null; 224a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 2252b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville protected int mRadioAccessFamily = RadioAccessFamily.RAF_UNKNOWN; 2262b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 227ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville @Override 228ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public String getPhoneName() { 229ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville return mName; 230ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 231ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 2322351b17aba5350004fc76707f3b3d2859ce773c8xinhe public String getNai(){ 2332351b17aba5350004fc76707f3b3d2859ce773c8xinhe return null; 2342351b17aba5350004fc76707f3b3d2859ce773c8xinhe } 2352351b17aba5350004fc76707f3b3d2859ce773c8xinhe 236ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville /** 237ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Return the ActionDetached string. When this action is received by components 238ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * they are to simulate detaching from the network. 239ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * 240ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * @return com.android.internal.telephony.{mName}.action_detached 241ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * {mName} is GSM, CDMA ... 242ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */ 243ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public String getActionDetached() { 244ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville return mActionDetached; 245ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 246ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 247ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville /** 248ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Return the ActionAttached string. When this action is received by components 249ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * they are to simulate attaching to the network. 250ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * 251ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * @return com.android.internal.telephony.{mName}.action_detached 252ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * {mName} is GSM, CDMA ... 253ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */ 254ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public String getActionAttached() { 255ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville return mActionAttached; 256ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 257ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set a system property, unless we're in unit test mode 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 261a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // CAF_MSIM TODO this need to be replated with TelephonyManager API ? 262ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public void setSystemProperty(String property, String value) { 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if(getUnitTestMode()) { 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SystemProperties.set(property, value); 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2692d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying /** 2702d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying * Set a system property, unless we're in unit test mode 2712d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying */ 2722d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying // CAF_MSIM TODO this need to be replated with TelephonyManager API ? 2732d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying public String getSystemProperty(String property, String defValue) { 2742d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying if(getUnitTestMode()) { 2752d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying return null; 2762d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying } 2772d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying return SystemProperties.get(property, defValue); 2782d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying } 2792d265969ca301ba3720458ea9da2ec8d6a18bb8dXia Ying 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mPreciseCallStateRegistrants 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 284e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam protected final RegistrantList mHandoverRegistrants 285e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam = new RegistrantList(); 286e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mNewRingingConnectionRegistrants 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mIncomingRingRegistrants 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mDisconnectRegistrants 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mServiceStateRegistrants 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mMmiCompleteRegistrants 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mMmiRegistrants 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mUnknownConnectionRegistrants 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mSuppServiceFailedRegistrants 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3116bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville protected final RegistrantList mRadioOffOrNotAvailableRegistrants 3126bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville = new RegistrantList(); 3136bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville 314a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville protected final RegistrantList mSimRecordsLoadedRegistrants 315a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville = new RegistrantList(); 316a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected Looper mLooper; /* to insure registrants are in correct thread*/ 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final Context mContext; 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * PhoneNotifier is an abstraction for all system-wide 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * state change notification. DefaultPhoneNotifier is 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * used here unless running we're inside a unit test. 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected PhoneNotifier mNotifier; 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected SimulatedRadioControl mSimulatedRadioControl; 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mUnitTestMode; 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Constructs a PhoneBase in normal (non-unit test) mode. 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param notifier An instance of DefaultPhoneNotifier, 336ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param context Context object from hosting application 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unless unit testing. 338ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param ci the CommandsInterface 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 340ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville protected PhoneBase(String name, PhoneNotifier notifier, Context context, CommandsInterface ci) { 341ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville this(name, notifier, context, ci, false); 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Constructs a PhoneBase in normal (non-unit test) mode. 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param notifier An instance of DefaultPhoneNotifier, 348ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param context Context object from hosting application 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unless unit testing. 350ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param ci is CommandsInterface 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param unitTestMode when true, prevents notifications 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * of state change events 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 354ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville protected PhoneBase(String name, PhoneNotifier notifier, Context context, CommandsInterface ci, 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean unitTestMode) { 3564b09dff383ae7dfca595aeeea886a594a1947340Wink Saville this(name, notifier, context, ci, unitTestMode, SubscriptionManager.DEFAULT_PHONE_INDEX); 357a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 358a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 359a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 360a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Constructs a PhoneBase in normal (non-unit test) mode. 361a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 362a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @param notifier An instance of DefaultPhoneNotifier, 363a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @param context Context object from hosting application 364a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * unless unit testing. 365a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @param ci is CommandsInterface 366a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @param unitTestMode when true, prevents notifications 367a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * of state change events 368a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @param subscription is current phone subscription 369a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 370a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville protected PhoneBase(String name, PhoneNotifier notifier, Context context, CommandsInterface ci, 371a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville boolean unitTestMode, int phoneId) { 372a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mPhoneId = phoneId; 373ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mName = name; 37422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mNotifier = notifier; 37522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mContext = context; 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLooper = Looper.myLooper(); 37722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi = ci; 378ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mActionDetached = this.getClass().getPackage().getName() + ".action_detached"; 379ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mActionAttached = this.getClass().getPackage().getName() + ".action_attached"; 380ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 3812cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Saville if (Build.IS_DEBUGGABLE) { 382ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mTelephonyTester = new TelephonyTester(this); 383ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setUnitTestMode(unitTestMode); 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDnsCheckDisabled = sp.getBoolean(DNS_SERVER_CHECK_DISABLED_KEY, false); 38922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setOnCallRing(this, EVENT_CALL_RING, null); 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* "Voice capable" means that this device supports circuit-switched 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (i.e. voice) phone calls over the telephony network, and is allowed 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to display the in-call UI while a cellular voice call is active. 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This will be false on "data only" devices which can't make voice 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * calls and don't support any in-call UI. 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsVoiceCapable = mContext.getResources().getBoolean( 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville com.android.internal.R.bool.config_voice_capable); 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Some RIL's don't always send RIL_UNSOL_CALL_RING so it needs 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to be generated locally. Ideally all ring tones should be loops 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * and this wouldn't be necessary. But to minimize changes to upper 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * layers it is requested that it be generated by lower layers. 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * By default old phones won't have the property set but do generate 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the RIL_UNSOL_CALL_RING so the default if there is no property is 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * true. 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDoesRilSendMultipleCallRing = SystemProperties.getBoolean( 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_RIL_SENDS_MULTIPLE_CALL_RING, true); 412ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing); 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCallRingDelay = SystemProperties.getInt( 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_CALL_RING_DELAY, 3000); 416ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "mCallRingDelay=" + mCallRingDelay); 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 418a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (getPhoneType() == PhoneConstants.PHONE_TYPE_IMS) return; 419a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 420a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville setPropertiesByCarrier(); 421a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Initialize device storage and outgoing SMS usage monitors for SMSDispatchers. 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor = new SmsStorageMonitor(this); 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor = new SmsUsageMonitor(context); 425e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccController = UiccController.getInstance(); 426e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null); 427a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 428a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // Monitor IMS service 429a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville IntentFilter filter = new IntentFilter(); 430a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP); 431a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN); 432a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mContext.registerReceiver(mImsIntentReceiver, filter); 433befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh 434befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh mCi.registerForSrvccStateChanged(this, EVENT_SRVCC_STATE_CHANGED, null); 435110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu mCi.setOnUnsolOemHookRaw(this, EVENT_UNSOL_OEM_HOOK_RAW, null); 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 438cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dispose() { 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 441a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mContext.unregisterReceiver(mImsIntentReceiver); 44222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unSetOnCallRing(this); 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Must cleanup all connectionS and needs to use sendMessage! 444454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker.cleanUpAllConnections(null); 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsTheCurrentActivePhone = false; 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Dispose the SMS usage and storage monitors 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor.dispose(); 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor.dispose(); 449e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController.unregisterForIccChanged(this); 450befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh mCi.unregisterForSrvccStateChanged(this); 451110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu mCi.unSetOnUnsolOemHookRaw(this); 452ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 453ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville if (mTelephonyTester != null) { 454ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mTelephonyTester.dispose(); 455ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 456a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 45738b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen ImsPhone imsPhone = mImsPhone; 45838b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (imsPhone != null) { 45938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen imsPhone.unregisterForSilentRedial(this); 46038b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen imsPhone.dispose(); 461a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 465cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void removeReferences() { 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor = null; 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor = null; 469e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mIccRecords.set(null); 470e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccApplication.set(null); 471454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker = null; 472e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController = null; 473a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 47438b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen ImsPhone imsPhone = mImsPhone; 47538b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (imsPhone != null) { 47638b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen imsPhone.removeReferences(); 477888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen mImsPhone = null; 478a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * When overridden the derived class needs to call 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * super.handleMessage(msg) so this method has a 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a chance to process the message. 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param msg 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void handleMessage(Message msg) { 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4927771a0a487bc9253872034025e9c91283af4425fEtan Cohen // messages to be handled whether or not the phone is being destroyed 4937771a0a487bc9253872034025e9c91283af4425fEtan Cohen // should only include messages which are being re-directed and do not use 4947771a0a487bc9253872034025e9c91283af4425fEtan Cohen // resources of the phone being destroyed 4957771a0a487bc9253872034025e9c91283af4425fEtan Cohen // Note: make sure to add code in GSMPhone/CDMAPhone to re-direct here before 4967771a0a487bc9253872034025e9c91283af4425fEtan Cohen // they check if phone destroyed. 4977771a0a487bc9253872034025e9c91283af4425fEtan Cohen switch (msg.what) { 4987771a0a487bc9253872034025e9c91283af4425fEtan Cohen // handle the select network completion callbacks. 4997771a0a487bc9253872034025e9c91283af4425fEtan Cohen case EVENT_SET_NETWORK_MANUAL_COMPLETE: 5007771a0a487bc9253872034025e9c91283af4425fEtan Cohen case EVENT_SET_NETWORK_AUTOMATIC_COMPLETE: 5017771a0a487bc9253872034025e9c91283af4425fEtan Cohen handleSetSelectNetwork((AsyncResult) msg.obj); 5027771a0a487bc9253872034025e9c91283af4425fEtan Cohen return; 5037771a0a487bc9253872034025e9c91283af4425fEtan Cohen } 5047771a0a487bc9253872034025e9c91283af4425fEtan Cohen 5055e2000b856a7959609e8f15148a3584ec372f865Wink Saville if (!mIsTheCurrentActivePhone) { 5065e2000b856a7959609e8f15148a3584ec372f865Wink Saville Rlog.e(LOG_TAG, "Received message " + msg + 5075e2000b856a7959609e8f15148a3584ec372f865Wink Saville "[" + msg.what + "] while being destroyed. Ignoring."); 5085e2000b856a7959609e8f15148a3584ec372f865Wink Saville return; 5095e2000b856a7959609e8f15148a3584ec372f865Wink Saville } 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch(msg.what) { 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_CALL_RING: 512ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Event EVENT_CALL_RING Received state=" + getState()); 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult)msg.obj; 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ar.exception == null) { 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.State state = getState(); 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((!mDoesRilSendMultipleCallRing) 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville && ((state == PhoneConstants.State.RINGING) || 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (state == PhoneConstants.State.IDLE))) { 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCallRingContinueToken += 1; 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendIncomingCallRingNotification(mCallRingContinueToken); 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyIncomingRing(); 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_CALL_RING_CONTINUE: 528ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Event EVENT_CALL_RING_CONTINUE Received stat=" + getState()); 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (getState() == PhoneConstants.State.RINGING) { 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendIncomingCallRingNotification(msg.arg1); 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 534e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka case EVENT_ICC_CHANGED: 535e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka onUpdateIccAvailability(); 536e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka break; 537e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 538a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville case EVENT_INITIATE_SILENT_REDIAL: 539a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.d(LOG_TAG, "Event EVENT_INITIATE_SILENT_REDIAL Received"); 540a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville ar = (AsyncResult) msg.obj; 541a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if ((ar.exception == null) && (ar.result != null)) { 542a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String dialString = (String) ar.result; 543a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (TextUtils.isEmpty(dialString)) return; 544a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville try { 545d5c5a168b4f5806701a4d146309c996acca7183dIhab Awad dialInternal(dialString, null, VideoProfile.VideoState.AUDIO_ONLY); 546a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } catch (CallStateException e) { 547a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.e(LOG_TAG, "silent redial failed: " + e); 548a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 549a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 550a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville break; 551a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 552befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh case EVENT_SRVCC_STATE_CHANGED: 553befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh ar = (AsyncResult)msg.obj; 554befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh if (ar.exception == null) { 555befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh handleSrvccStateChanged((int[]) ar.result); 556befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } else { 557befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh Rlog.e(LOG_TAG, "Srvcc exception: " + ar.exception); 558befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } 559befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh break; 560befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh 561110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu case EVENT_UNSOL_OEM_HOOK_RAW: 562110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu ar = (AsyncResult)msg.obj; 563110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu if (ar.exception == null) { 564110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu byte[] data = (byte[])ar.result; 565110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu Rlog.d(LOG_TAG, "EVENT_UNSOL_OEM_HOOK_RAW data=" 566110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu + IccUtils.bytesToHexString(data)); 567110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu mNotifier.notifyOemHookRawEventForSubscriber(getSubId(), data); 568110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu } else { 569110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu Rlog.e(LOG_TAG, "OEM hook raw exception: " + ar.exception); 570110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu } 571110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu break; 572110eda521d7a40ffcb09f31fd02d3d65a10cdcc3New Author Steven Liu 5732b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville case EVENT_GET_RADIO_CAPABILITY: 5742b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville ar = (AsyncResult) msg.obj; 5752b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville RadioCapability rc = (RadioCapability) ar.result; 5762b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville if (ar.exception != null) { 5772b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville Rlog.d(LOG_TAG, "get phone radio capability fail," 5782b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville + "no need to change mRadioAccessFamily"); 5792b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } else { 5802b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville mRadioAccessFamily = rc.getRadioAccessFamily(); 5812b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } 5822b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville Rlog.d(LOG_TAG, "EVENT_GET_RADIO_CAPABILITY :" 5832b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville + "phone RAF : " + mRadioAccessFamily); 5842b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville break; 5852b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new RuntimeException("unexpected event not handled"); 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 591befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh private void handleSrvccStateChanged(int[] ret) { 592befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh Rlog.d(LOG_TAG, "handleSrvccStateChanged"); 593befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh 5944be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam ArrayList<Connection> conn = null; 59538b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen ImsPhone imsPhone = mImsPhone; 596befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh Call.SrvccState srvccState = Call.SrvccState.NONE; 597befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh if (ret != null && ret.length != 0) { 598befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh int state = ret[0]; 599befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh switch(state) { 600befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh case VoLteServiceState.HANDOVER_STARTED: 601befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh srvccState = Call.SrvccState.STARTED; 60238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (imsPhone != null) { 60338b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen conn = imsPhone.getHandoverConnection(); 6044be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam migrateFrom(imsPhone); 605befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } else { 606888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen Rlog.d(LOG_TAG, "HANDOVER_STARTED: mImsPhone null"); 607befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } 608befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh break; 609befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh case VoLteServiceState.HANDOVER_COMPLETED: 610befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh srvccState = Call.SrvccState.COMPLETED; 61138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (imsPhone != null) { 61238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen imsPhone.notifySrvccState(srvccState); 613befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } else { 614888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen Rlog.d(LOG_TAG, "HANDOVER_COMPLETED: mImsPhone null"); 615befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } 616befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh break; 617befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh case VoLteServiceState.HANDOVER_FAILED: 618befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh case VoLteServiceState.HANDOVER_CANCELED: 619befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh srvccState = Call.SrvccState.FAILED; 620befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh break; 621befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh 622befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh default: 623befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh //ignore invalid state 624befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh return; 625befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } 626befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh 627befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh getCallTracker().notifySrvccState(srvccState, conn); 628befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh 629befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh VoLteServiceState lteState = new VoLteServiceState(state); 630befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh notifyVoLteServiceStateChanged(lteState); 631befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } 632befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh } 633befe0bf21cf06c47b1f099caed9e6c6b7125c0feShriram Ganesh 6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 635cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Context getContext() { 6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mContext; 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 640e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka // Will be called when icc changed 641e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected abstract void onUpdateIccAvailability(); 642e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Disables the DNS check (i.e., allows "0.0.0.0"). 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Useful for lab testing environment. 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param b true disables the check, false enables. 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 648cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void disableDnsCheck(boolean b) { 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDnsCheckDisabled = b; 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences.Editor editor = sp.edit(); 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.putBoolean(DNS_SERVER_CHECK_DISABLED_KEY, b); 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.apply(); 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if the DNS check is currently disabled. 6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 660cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDnsCheckDisabled() { 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDnsCheckDisabled; 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 666cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForPreciseCallStateChanged(Handler h, int what, Object obj) { 6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.addUnique(h, what, obj); 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 674cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForPreciseCallStateChanged(Handler h) { 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.remove(h); 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyPreciseCallStateChangedP() { 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, this, null); 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.notifyRegistrants(ar); 6860742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela 6870742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela mNotifier.notifyPreciseCallState(this); 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 690e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam @Override 691e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public void registerForHandoverStateChanged(Handler h, int what, Object obj) { 692e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam checkCorrectThread(h); 693e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mHandoverRegistrants.addUnique(h, what, obj); 694e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 695e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam 696e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam @Override 697e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public void unregisterForHandoverStateChanged(Handler h) { 698e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mHandoverRegistrants.remove(h); 699e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 700e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam 701e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam /** 702e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam * Subclasses of Phone probably want to replace this with a 703e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam * version scoped to their packages 704e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam */ 705e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public void notifyHandoverStateChanged(Connection cn) { 706e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam AsyncResult ar = new AsyncResult(null, cn, null); 707e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam mHandoverRegistrants.notifyRegistrants(ar); 708e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 709e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam 710e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public void migrateFrom(PhoneBase from) { 711e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mHandoverRegistrants, from.mHandoverRegistrants); 712e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mPreciseCallStateRegistrants, from.mPreciseCallStateRegistrants); 713e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mNewRingingConnectionRegistrants, from.mNewRingingConnectionRegistrants); 714e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mIncomingRingRegistrants, from.mIncomingRingRegistrants); 715e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mDisconnectRegistrants, from.mDisconnectRegistrants); 716e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mServiceStateRegistrants, from.mServiceStateRegistrants); 717e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mMmiCompleteRegistrants, from.mMmiCompleteRegistrants); 718e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mMmiRegistrants, from.mMmiRegistrants); 719e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mUnknownConnectionRegistrants, from.mUnknownConnectionRegistrants); 720e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam migrate(mSuppServiceFailedRegistrants, from.mSuppServiceFailedRegistrants); 721e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 722e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam 723e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam public void migrate(RegistrantList to, RegistrantList from) { 724e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam from.removeCleared(); 725e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam for (int i = 0, n = from.size(); i < n; i++) { 726e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam to.add((Registrant) from.get(i)); 727e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 728e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam } 729e64a413b850aae224e2f56e7dfc6e0bcd667643eUma Maheswari Ramalingam 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 731cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForUnknownConnection(Handler h, int what, Object obj) { 7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.addUnique(h, what, obj); 7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 739cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForUnknownConnection(Handler h) { 7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.remove(h); 7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 745cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForNewRingingConnection( 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.addUnique(h, what, obj); 7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 754cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForNewRingingConnection(Handler h) { 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.remove(h); 7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 760cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj){ 7628758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville mCi.registerForInCallVoicePrivacyOn(h, what, obj); 7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 766cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForInCallVoicePrivacyOn(Handler h){ 76822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForInCallVoicePrivacyOn(h); 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 772cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj){ 7748758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville mCi.registerForInCallVoicePrivacyOff(h, what, obj); 7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 778cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForInCallVoicePrivacyOff(Handler h){ 78022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForInCallVoicePrivacyOff(h); 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 784cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForIncomingRing( 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.addUnique(h, what, obj); 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 793cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForIncomingRing(Handler h) { 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.remove(h); 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 799cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForDisconnect(Handler h, int what, Object obj) { 8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.addUnique(h, what, obj); 8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 807cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForDisconnect(Handler h) { 8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.remove(h); 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 813cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSuppServiceFailed(Handler h, int what, Object obj) { 8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSuppServiceFailedRegistrants.addUnique(h, what, obj); 8180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 821cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSuppServiceFailed(Handler h) { 8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSuppServiceFailedRegistrants.remove(h); 8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 827cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForMmiInitiate(Handler h, int what, Object obj) { 8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiRegistrants.addUnique(h, what, obj); 8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 835cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForMmiInitiate(Handler h) { 8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiRegistrants.remove(h); 8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 841cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForMmiComplete(Handler h, int what, Object obj) { 8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiCompleteRegistrants.addUnique(h, what, obj); 8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 849cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForMmiComplete(Handler h) { 8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiCompleteRegistrants.remove(h); 8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 856a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void registerForSimRecordsLoaded(Handler h, int what, Object obj) { 857a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville logUnexpectedCdmaMethodCall("registerForSimRecordsLoaded"); 858a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 859a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 860a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void unregisterForSimRecordsLoaded(Handler h) { 861a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville logUnexpectedCdmaMethodCall("unregisterForSimRecordsLoaded"); 862a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 863a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 864f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal @Override 8656d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak public void registerForTtyModeReceived(Handler h, int what, Object obj) { 8666d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak } 8676d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak 8686d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak @Override 8696d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak public void unregisterForTtyModeReceived(Handler h) { 8706d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak } 8716d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak 8726d91e295add44a5b7e611cb51401a20b3caa6571Pavel Zhamaitsiak @Override 873f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal public void setNetworkSelectionModeAutomatic(Message response) { 874f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // wrap the response message in our own message along with 875f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // an empty string (to indicate automatic selection) for the 876f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // operator's id. 877f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal NetworkSelectMessage nsm = new NetworkSelectMessage(); 878f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal nsm.message = response; 879f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal nsm.operatorNumeric = ""; 880f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal nsm.operatorAlphaLong = ""; 881f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 882f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal Message msg = obtainMessage(EVENT_SET_NETWORK_AUTOMATIC_COMPLETE, nsm); 883f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal mCi.setNetworkSelectionModeAutomatic(msg); 8848cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan 8858cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan updateSavedNetworkOperator(nsm); 886f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal } 887f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 888f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal @Override 8893b9b9d704121b1c7a9cd98626d7ca87d9cff5437Shishir Agrawal public void getNetworkSelectionMode(Message message) { 8903b9b9d704121b1c7a9cd98626d7ca87d9cff5437Shishir Agrawal mCi.getNetworkSelectionMode(message); 8913b9b9d704121b1c7a9cd98626d7ca87d9cff5437Shishir Agrawal } 8923b9b9d704121b1c7a9cd98626d7ca87d9cff5437Shishir Agrawal 8933b9b9d704121b1c7a9cd98626d7ca87d9cff5437Shishir Agrawal @Override 894f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal public void selectNetworkManually(OperatorInfo network, Message response) { 895f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // wrap the response message in our own message along with 896f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // the operator's id. 897f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal NetworkSelectMessage nsm = new NetworkSelectMessage(); 898f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal nsm.message = response; 899f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal nsm.operatorNumeric = network.getOperatorNumeric(); 900f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal nsm.operatorAlphaLong = network.getOperatorAlphaLong(); 901f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 902f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal Message msg = obtainMessage(EVENT_SET_NETWORK_MANUAL_COMPLETE, nsm); 903f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal mCi.setNetworkSelectionModeManual(network.getOperatorNumeric(), msg); 9048cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan 9058cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan updateSavedNetworkOperator(nsm); 9068cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan } 9078cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan 9088cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan private void updateSavedNetworkOperator(NetworkSelectMessage nsm) { 909d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan int subId = getSubId(); 910d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan if (SubscriptionManager.isValidSubscriptionId(subId)) { 911d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan // open the shared preferences editor, and write the value. 912d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan // nsm.operatorNumeric is "" if we're in automatic.selection. 913d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 914d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan SharedPreferences.Editor editor = sp.edit(); 915d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan editor.putString(NETWORK_SELECTION_KEY + subId, nsm.operatorNumeric); 916d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan editor.putString(NETWORK_SELECTION_NAME_KEY + subId, nsm.operatorAlphaLong); 917d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan 918d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan // commit and log the result. 919d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan if (!editor.commit()) { 920d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan Rlog.e(LOG_TAG, "failed to commit network selection preference"); 921d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan } 922d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan } else { 923d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan Rlog.e(LOG_TAG, "Cannot update network selection preference due to invalid subId " + 924d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan subId); 9258cef6eeaae1f80cf867875e8b3e0172216806509Amit Mahajan } 926f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal } 927f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 928f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal /** 929f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal * Used to track the settings upon completion of the network change. 930f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal */ 931f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal private void handleSetSelectNetwork(AsyncResult ar) { 932f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // look for our wrapper within the asyncresult, skip the rest if it 933f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // is null. 934f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal if (!(ar.userObj instanceof NetworkSelectMessage)) { 935f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal Rlog.e(LOG_TAG, "unexpected result from user object."); 936f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal return; 937f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal } 938f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 939f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal NetworkSelectMessage nsm = (NetworkSelectMessage) ar.userObj; 940f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 941f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // found the object, now we send off the message we had originally 942f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal // attached to the request. 943f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal if (nsm.message != null) { 944f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal AsyncResult.forMessage(nsm.message, ar.result, ar.exception); 945f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal nsm.message.sendToTarget(); 946f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal } 947f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal } 948f61aaae6608243be4e0da97a56ff9fed488cb173Shishir Agrawal 9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Method to retrieve the saved operator id from the Shared Preferences 9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private String getSavedNetworkSelection() { 9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // open the shared preferences and search with our key. 9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 955d756a6bcf4fe09b561481eb6ed5368bd7b21ca76Amit Mahajan return sp.getString(NETWORK_SELECTION_KEY + getSubId(), ""); 9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Method to restore the previously saved operator id, or reset to 9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * automatic selection, all depending upon the value in the shared 9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * preferences. 9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void restoreSavedNetworkSelection(Message response) { 9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // retrieve the operator id 9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String networkSelection = getSavedNetworkSelection(); 9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set to auto if the id is empty, otherwise select the network. 9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (TextUtils.isEmpty(networkSelection)) { 96922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setNetworkSelectionModeAutomatic(response); 9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 97122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setNetworkSelectionModeManual(networkSelection, response); 9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 976cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setUnitTestMode(boolean f) { 9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnitTestMode = f; 9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 982cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getUnitTestMode() { 9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mUnitTestMode; 9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * To be invoked when a voice call Connection disconnects. 9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyDisconnectP(Connection cn) { 9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, cn, null); 9950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.notifyRegistrants(ar); 9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 999cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForServiceStateChanged( 10010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.add(h, what, obj); 10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 1008cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForServiceStateChanged(Handler h) { 10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.remove(h); 10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 1014cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForRingbackTone(Handler h, int what, Object obj) { 10168758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville mCi.registerForRingbackTone(h, what, obj); 10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 1020cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForRingbackTone(Handler h) { 102222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForRingbackTone(h); 10230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 1026cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1027a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void registerForOnHoldTone(Handler h, int what, Object obj) { 1028a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1029a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1030a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // Inherited documentation suffices. 1031a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 1032a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void unregisterForOnHoldTone(Handler h) { 1033a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1034a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1035a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // Inherited documentation suffices. 1036a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForResendIncallMute(Handler h, int what, Object obj) { 10388758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville mCi.registerForResendIncallMute(h, what, obj); 10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 1042cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForResendIncallMute(Handler h) { 104422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForResendIncallMute(h); 10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1047cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1048184ffb58812108624ea0be2732cdae511b99d09dVidyakumar Athota public void setEchoSuppressionEnabled() { 10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // no need for regular phone 10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyServiceStateChangedP(ServiceState ss) { 10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, ss, null); 10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.notifyRegistrants(ar); 10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyServiceState(this); 10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 1064cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SimulatedRadioControl getSimulatedRadioControl() { 10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSimulatedRadioControl; 10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Verifies the current thread is the same as the thread originally 10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * used in the initialization of this instance. Throws RuntimeException 10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * if not. 10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @exception RuntimeException if the current thread is not 10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the thread that originally obtained this PhoneBase instance. 10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void checkCorrectThread(Handler h) { 10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (h.getLooper() != mLooper) { 10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new RuntimeException( 10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "com.android.internal.telephony.Phone must be used from within one thread"); 10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the properties by matching the carrier string in 10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a string-array resource 10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void setPropertiesByCarrier() { 10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String carrier = SystemProperties.get("ro.carrier"); 10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (null == carrier || 0 == carrier.length() || "unknown".equals(carrier)) { 10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CharSequence[] carrierLocales = mContext. 10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getResources().getTextArray(R.array.carrier_properties); 10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < carrierLocales.length; i+=3) { 10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String c = carrierLocales[i].toString(); 11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (carrier.equals(c)) { 1101c25bcac2c4c8754faae69efe2fc5c407f66a9240Narayan Kamath final Locale l = Locale.forLanguageTag(carrierLocales[i + 1].toString().replace('_', '-')); 1102c25bcac2c4c8754faae69efe2fc5c407f66a9240Narayan Kamath final String country = l.getCountry(); 1103c25bcac2c4c8754faae69efe2fc5c407f66a9240Narayan Kamath MccTable.setSystemLocale(mContext, l.getLanguage(), country); 1104e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt 1105e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt if (!country.isEmpty()) { 1106e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt try { 1107e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt Settings.Global.getInt(mContext.getContentResolver(), 1108e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt Settings.Global.WIFI_COUNTRY_CODE); 1109e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt } catch (Settings.SettingNotFoundException e) { 1110e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt // note this is not persisting 1111e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt WifiManager wM = (WifiManager) 1112e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt mContext.getSystemService(Context.WIFI_SERVICE); 1113e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt wM.setCountryCode(country, false); 1114e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt } 1115e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt } 11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get state 11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1124cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract PhoneConstants.State getState(); 11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the IccFileHandler of the Phone instance 11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccFileHandler getIccFileHandler(){ 1131e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka UiccCardApplication uiccApplication = mUiccApplication.get(); 1132d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville IccFileHandler fh; 1133d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville 1134d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville if (uiccApplication == null) { 1135d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville Rlog.d(LOG_TAG, "getIccFileHandler: uiccApplication == null, return null"); 1136d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville fh = null; 1137d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville } else { 1138d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville fh = uiccApplication.getIccFileHandler(); 1139d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville } 1140d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville 1141d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville Rlog.d(LOG_TAG, "getIccFileHandler: fh=" + fh); 1142d4397df465323b2add2f5e532824ec0ed0d785f4Wink Saville return fh; 11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the Handler of the Phone instance 11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Handler getHandler() { 11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return this; 11500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 115203b37b67755a4033c6be32ae2e389c310e06e7d1Amit Mahajan @Override 115303b37b67755a4033c6be32ae2e389c310e06e7d1Amit Mahajan public void updatePhoneObject(int voiceRadioTech) { 115403b37b67755a4033c6be32ae2e389c310e06e7d1Amit Mahajan // Only the PhoneProxy can update the phone object. 115503b37b67755a4033c6be32ae2e389c310e06e7d1Amit Mahajan PhoneFactory.getDefaultPhone().updatePhoneObject(voiceRadioTech); 115603b37b67755a4033c6be32ae2e389c310e06e7d1Amit Mahajan } 115703b37b67755a4033c6be32ae2e389c310e06e7d1Amit Mahajan 11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the ServiceStateTracker of the phone instance. 11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public ServiceStateTracker getServiceStateTracker() { 11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get call tracker 11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CallTracker getCallTracker() { 11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1172ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka public AppType getCurrentUiccAppType() { 1173ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka UiccCardApplication currentApp = mUiccApplication.get(); 1174ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka if (currentApp != null) { 1175ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka return currentApp.getType(); 1176ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka } 1177ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka return AppType.APPTYPE_UNKNOWN; 1178ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka } 1179ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka 11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 11810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccCard getIccCard() { 1182e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka return null; 1183e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka //throw new Exception("getIccCard Shouldn't be called from PhoneBase"); 11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getIccSerialNumber() { 1188e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 11893c6bdec23af42aba1168303cdefc20525b0ec1d0Ajay Nambi return (r != null) ? r.getIccId() : null; 11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 11930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getIccRecordsLoaded() { 1194e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1195e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getRecordsLoaded() : false; 11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1198ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville /** 1199ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @return all available cell information or null if none. 1200ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville */ 1201ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville @Override 1202ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public List<CellInfo> getAllCellInfo() { 1203ffe6e68213ae3220497188fed814e271b472292aJake Hamby List<CellInfo> cellInfoList = getServiceStateTracker().getAllCellInfo(); 1204ffe6e68213ae3220497188fed814e271b472292aJake Hamby return privatizeCellInfoList(cellInfoList); 1205ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 1206ffe6e68213ae3220497188fed814e271b472292aJake Hamby 1207ffe6e68213ae3220497188fed814e271b472292aJake Hamby /** 1208ffe6e68213ae3220497188fed814e271b472292aJake Hamby * Clear CDMA base station lat/long values if location setting is disabled. 1209ffe6e68213ae3220497188fed814e271b472292aJake Hamby * @param cellInfoList the original cell info list from the RIL 1210ffe6e68213ae3220497188fed814e271b472292aJake Hamby * @return the original list with CDMA lat/long cleared if necessary 1211ffe6e68213ae3220497188fed814e271b472292aJake Hamby */ 1212ffe6e68213ae3220497188fed814e271b472292aJake Hamby private List<CellInfo> privatizeCellInfoList(List<CellInfo> cellInfoList) { 1213ffe6e68213ae3220497188fed814e271b472292aJake Hamby int mode = Settings.Secure.getInt(getContext().getContentResolver(), 1214ffe6e68213ae3220497188fed814e271b472292aJake Hamby Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); 1215ffe6e68213ae3220497188fed814e271b472292aJake Hamby if (mode == Settings.Secure.LOCATION_MODE_OFF) { 1216ffe6e68213ae3220497188fed814e271b472292aJake Hamby ArrayList<CellInfo> privateCellInfoList = new ArrayList<CellInfo>(cellInfoList.size()); 1217ffe6e68213ae3220497188fed814e271b472292aJake Hamby // clear lat/lon values for location privacy 1218ffe6e68213ae3220497188fed814e271b472292aJake Hamby for (CellInfo c : cellInfoList) { 1219ffe6e68213ae3220497188fed814e271b472292aJake Hamby if (c instanceof CellInfoCdma) { 1220ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellInfoCdma cellInfoCdma = (CellInfoCdma) c; 1221ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellIdentityCdma cellIdentity = cellInfoCdma.getCellIdentity(); 1222ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellIdentityCdma maskedCellIdentity = new CellIdentityCdma( 1223ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellIdentity.getNetworkId(), 1224ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellIdentity.getSystemId(), 1225ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellIdentity.getBasestationId(), 1226ffe6e68213ae3220497188fed814e271b472292aJake Hamby Integer.MAX_VALUE, Integer.MAX_VALUE); 1227ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellInfoCdma privateCellInfoCdma = new CellInfoCdma(cellInfoCdma); 1228ffe6e68213ae3220497188fed814e271b472292aJake Hamby privateCellInfoCdma.setCellIdentity(maskedCellIdentity); 1229ffe6e68213ae3220497188fed814e271b472292aJake Hamby privateCellInfoList.add(privateCellInfoCdma); 1230ffe6e68213ae3220497188fed814e271b472292aJake Hamby } else { 1231ffe6e68213ae3220497188fed814e271b472292aJake Hamby privateCellInfoList.add(c); 1232ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 1233ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 1234ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellInfoList = privateCellInfoList; 1235ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 1236ffe6e68213ae3220497188fed814e271b472292aJake Hamby return cellInfoList; 1237ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 1238ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 12395fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville /** 12405fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville * {@inheritDoc} 12415fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville */ 12425fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville @Override 12435fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville public void setCellInfoListRate(int rateInMillis) { 12445fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville mCi.setCellInfoListRate(rateInMillis, null); 12455fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville } 12465fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville 12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 124826a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa /** @return true if there are messages waiting, false otherwise. */ 12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getMessageWaitingIndicator() { 125026a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa return mVmCount != 0; 12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getCallForwardingIndicator() { 1255e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1256e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getVoiceCallForwardingFlag() : false; 12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Query the status of the CDMA roaming preference 12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1262cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryCdmaRoamingPreference(Message response) { 126422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.queryCdmaRoamingPreference(response); 12650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1268ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * Get the signal strength 1269ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville */ 1270ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville @Override 1271ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public SignalStrength getSignalStrength() { 1272ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville ServiceStateTracker sst = getServiceStateTracker(); 1273ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville if (sst == null) { 1274ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return new SignalStrength(); 1275ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } else { 1276ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return sst.getSignalStrength(); 1277ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 1278ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 1279ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 1280ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville /** 12810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the status of the CDMA roaming preference 12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1283cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) { 128522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setCdmaRoamingPreference(cdmaRoamingType, response); 12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the status of the CDMA subscription mode 12900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1291cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCdmaSubscription(int cdmaSubscriptionType, Message response) { 129322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setCdmaSubscriptionSource(cdmaSubscriptionType, response); 12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the preferred Network Type: Global, CDMA only or GSM/UMTS only 12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1299cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setPreferredNetworkType(int networkType, Message response) { 130122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setPreferredNetworkType(networkType, response); 13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1304cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getPreferredNetworkType(Message response) { 130622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getPreferredNetworkType(response); 13070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1309cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getSmscAddress(Message result) { 131122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getSmscAddress(result); 13120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1314cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setSmscAddress(String address, Message result) { 131622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setSmscAddress(address, result); 13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1319cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setTTYMode(int ttyMode, Message onComplete) { 132122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setTTYMode(ttyMode, onComplete); 13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1324cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1325b7aff911e1106eb2eb16fd2bafae0ed8f4d4d4f7Shriram Ganesh public void setUiTTYMode(int uiTtyMode, Message onComplete) { 1326b7aff911e1106eb2eb16fd2bafae0ed8f4d4d4f7Shriram Ganesh Rlog.d(LOG_TAG, "unexpected setUiTTYMode method call"); 1327b7aff911e1106eb2eb16fd2bafae0ed8f4d4d4f7Shriram Ganesh } 1328b7aff911e1106eb2eb16fd2bafae0ed8f4d4d4f7Shriram Ganesh 1329b7aff911e1106eb2eb16fd2bafae0ed8f4d4d4f7Shriram Ganesh @Override 13300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryTTYMode(Message onComplete) { 133122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.queryTTYMode(onComplete); 13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1334cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 13360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("enableEnhancedVoicePrivacy"); 13380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1340cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getEnhancedVoicePrivacy"); 13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1346cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setBandMode(int bandMode, Message response) { 134822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setBandMode(bandMode, response); 13490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1351cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryAvailableBandMode(Message response) { 135322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.queryAvailableBandMode(response); 13540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1356cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void invokeOemRilRequestRaw(byte[] data, Message response) { 135822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.invokeOemRilRequestRaw(data, response); 13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1361cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void invokeOemRilRequestStrings(String[] strings, Message response) { 136322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.invokeOemRilRequestStrings(strings, response); 13640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1366cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1367f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby public void nvReadItem(int itemID, Message response) { 1368f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby mCi.nvReadItem(itemID, response); 1369f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby } 1370f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby 1371f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby @Override 1372f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby public void nvWriteItem(int itemID, String itemValue, Message response) { 1373f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby mCi.nvWriteItem(itemID, itemValue, response); 1374f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby } 1375f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby 1376f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby @Override 1377f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message response) { 1378f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby mCi.nvWriteCdmaPrl(preferredRoamingList, response); 1379f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby } 1380f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby 1381f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby @Override 1382f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby public void nvResetConfig(int resetType, Message response) { 1383f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby mCi.nvResetConfig(resetType, response); 1384f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby } 1385f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby 1386f28ac81ec36df38307648d404cff4b2b11f46861Jake Hamby @Override 13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataActivity() { 13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataActivity(this); 13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyMessageWaitingIndicator() { 13920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Do not notify voice mail waiting if device doesn't support voice 13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 13940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 13950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function is added to send the notification to DefaultPhoneNotifier. 13970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyMessageWaitingChanged(this); 13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason, String apnType, 14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.DataState state) { 14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, state); 14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason, String apnType) { 14060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType)); 14070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason) { 14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String types[] = getActiveApnTypes(); 14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String apnType : types) { 14120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType)); 14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyOtaspChanged(int otaspMode) { 14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyOtaspChanged(this, otaspMode); 14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1420ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public void notifySignalStrength() { 1421ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville mNotifier.notifySignalStrength(this); 1422ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 1423ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 1424ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public void notifyCellInfo(List<CellInfo> cellInfo) { 1425ffe6e68213ae3220497188fed814e271b472292aJake Hamby mNotifier.notifyCellInfo(this, privatizeCellInfoList(cellInfo)); 1426ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 1427ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 14288758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville public void notifyDataConnectionRealTimeInfo(DataConnectionRealTimeInfo dcRtInfo) { 14298758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville mNotifier.notifyDataConnectionRealTimeInfo(this, dcRtInfo); 14308758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville } 14318758315661d65c14d0e10d354a14f80ec1f65db7Wink Saville 1432a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void notifyVoLteServiceStateChanged(VoLteServiceState lteState) { 1433a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mNotifier.notifyVoLteServiceStateChanged(this, lteState); 1434a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1435a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if a mobile originating emergency call is active 14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEmergencyCall() { 14400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if we are in the emergency call back mode. This is a period where 14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the phone should be using as little power as possible and be ready to receive an 14460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * incoming call from the emergency operator. 14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 14480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEcm() { 14490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 14500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1452cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract int getPhoneType(); 14540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** @hide */ 145626a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa /** @return number of voicemails */ 1457cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getVoiceMessageCount(){ 145926a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa return mVmCount; 146026a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa } 146126a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa 146226a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa /** sets the voice mail count of the phone and notifies listeners. */ 146326a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa public void setVoiceMessageCount(int countWaiting) { 146426a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa mVmCount = countWaiting; 146526a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa // notify listeners of voice mail 146626a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa notifyMessageWaitingIndicator(); 146726a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa } 146826a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa 146926a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa /** gets the voice mail count from preferences */ 147026a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa protected int getStoredVoiceMessageCount() { 147126a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa int countVoiceMessages = 0; 147226a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); 147326a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa String subscriberId = sp.getString(VM_ID, null); 147426a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa String currentSubscriberId = getSubscriberId(); 147526a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa 147626a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa Rlog.d(LOG_TAG, "Voicemail count retrieval for subscriberId = " + subscriberId + 147726a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa " current subscriberId = " + currentSubscriberId); 147826a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa 147926a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa if ((subscriberId != null) && (currentSubscriberId != null) 148026a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa && (currentSubscriberId.equals(subscriberId))) { 148126a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa // get voice mail count from preferences 148226a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa countVoiceMessages = sp.getInt(VM_COUNT, 0); 148326a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa Rlog.d(LOG_TAG, "Voice Mail Count from preference = " + countVoiceMessages); 148426a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa } 148526a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa return countVoiceMessages; 14860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 14890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI icon index to display 14900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1491cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 14920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconIndex() { 14930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriIconIndex"); 14940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return -1; 14950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 14980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI icon mode, 14990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 0 - ON 15000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1 - FLASHING 15010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1502cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconMode() { 15040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriIconMode"); 15050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return -1; 15060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI text, 15100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1511cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaEriText() { 15130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriText"); 15140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "GSM nw, no ERI"; 15150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1517cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaMin() { 15190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaMin"); 15210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 15220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1524cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isMinInfoReady() { 15260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("isMinInfoReady"); 15280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 15290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1531cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaPrlVersion(){ 15330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaPrlVersion"); 15350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 15360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1538cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 15400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("sendBurstDtmf"); 15420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1544cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void exitEmergencyCallbackMode() { 15460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("exitEmergencyCallbackMode"); 15480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1550cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 15520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForCdmaOtaStatusChange"); 15540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1556cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 15580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForCdmaOtaStatusChange"); 15600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1562cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 15640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForSubscriptionInfoReady"); 15660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1568cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSubscriptionInfoReady(Handler h) { 15700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForSubscriptionInfoReady"); 15720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if OTA Service Provisioning needs to be performed. 15760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If not overridden return false. 15770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1578cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean needsOtaServiceProvisioning() { 15800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 15810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 15830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 15840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return true if number is an OTASP number. 15850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If not overridden return false. 15860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1587cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isOtaSpNumber(String dialStr) { 15890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 15900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1592cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj){ 15940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 15950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForCallWaiting"); 15960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 15970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1598cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 15990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCallWaiting(Handler h){ 16000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 16010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForCallWaiting"); 16020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1604cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 16060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 16070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForEcmTimerReset"); 16080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1610cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForEcmTimerReset(Handler h) { 16120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 16130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForEcmTimerReset"); 16140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1616cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSignalInfo(Handler h, int what, Object obj) { 161822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForSignalInfo(h, what, obj); 16190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1621cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSignalInfo(Handler h) { 162322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForSignalInfo(h); 16240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1626cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForDisplayInfo(Handler h, int what, Object obj) { 162822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForDisplayInfo(h, what, obj); 16290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1631cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1632cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public void unregisterForDisplayInfo(Handler h) { 163322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForDisplayInfo(h); 16340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1636cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForNumberInfo(Handler h, int what, Object obj) { 163822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForNumberInfo(h, what, obj); 16390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1641cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForNumberInfo(Handler h) { 164322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForNumberInfo(h); 16440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1646cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForRedirectedNumberInfo(Handler h, int what, Object obj) { 164822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForRedirectedNumberInfo(h, what, obj); 16490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1651cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForRedirectedNumberInfo(Handler h) { 165322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForRedirectedNumberInfo(h); 16540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1656cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForLineControlInfo(Handler h, int what, Object obj) { 165822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForLineControlInfo( h, what, obj); 16590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1661cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForLineControlInfo(Handler h) { 166322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForLineControlInfo(h); 16640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1666cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerFoT53ClirlInfo(Handler h, int what, Object obj) { 166822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerFoT53ClirlInfo(h, what, obj); 16690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1671cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForT53ClirInfo(Handler h) { 167322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForT53ClirInfo(h); 16740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1676cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForT53AudioControlInfo(Handler h, int what, Object obj) { 167822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForT53AudioControlInfo( h, what, obj); 16790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1681cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForT53AudioControlInfo(Handler h) { 168322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForT53AudioControlInfo(h); 16840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1686cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1687cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj){ 16880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 16890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("setOnEcbModeExitResponse"); 16900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1692cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1693cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public void unsetOnEcbModeExitResponse(Handler h){ 16940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 16950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unsetOnEcbModeExitResponse"); 16960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 16970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1698cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 16996bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville public void registerForRadioOffOrNotAvailable(Handler h, int what, Object obj) { 17006bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville mRadioOffOrNotAvailableRegistrants.addUnique(h, what, obj); 17016bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville } 17026bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville 17036bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville @Override 17046bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville public void unregisterForRadioOffOrNotAvailable(Handler h) { 17056bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville mRadioOffOrNotAvailableRegistrants.remove(h); 17066bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville } 17076bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville 17086bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville @Override 17090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String[] getActiveApnTypes() { 1710454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getActiveApnTypes(); 17110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1713cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 171479f9daf3ef1c254439ed0e9a640df214c5f8196dJunda Liu public boolean hasMatchedTetherApnSetting() { 171579f9daf3ef1c254439ed0e9a640df214c5f8196dJunda Liu return mDcTracker.hasMatchedTetherApnSetting(); 171679f9daf3ef1c254439ed0e9a640df214c5f8196dJunda Liu } 171779f9daf3ef1c254439ed0e9a640df214c5f8196dJunda Liu 171879f9daf3ef1c254439ed0e9a640df214c5f8196dJunda Liu @Override 17190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getActiveApnHost(String apnType) { 1720454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getActiveApnString(apnType); 17210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1723cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 17240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public LinkProperties getLinkProperties(String apnType) { 1725454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getLinkProperties(apnType); 17260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1728cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 172996cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt public NetworkCapabilities getNetworkCapabilities(String apnType) { 173096cce86cf08e37e0f09ed5057b1196e26b302743Robert Greenwalt return mDcTracker.getNetworkCapabilities(apnType); 17310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1733cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 17340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDataConnectivityPossible() { 17350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isDataConnectivityPossible(PhoneConstants.APN_TYPE_DEFAULT); 17360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1738cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 17390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDataConnectivityPossible(String apnType) { 1740454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return ((mDcTracker != null) && 1741454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville (mDcTracker.isDataPossible(apnType))); 17420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 17450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify registrants of a new ringing Connection. 17460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 17470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 17480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 174938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen public void notifyNewRingingConnectionP(Connection cn) { 17500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 17510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 17520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, cn, null); 17530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.notifyRegistrants(ar); 17540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 17570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify registrants of a RING event. 17580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 17590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void notifyIncomingRing() { 17600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 17610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 17620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, this, null); 17630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.notifyRegistrants(ar); 17640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 17660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 17670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Send the incoming call Ring notification if conditions are right. 17680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 17690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void sendIncomingCallRingNotification(int token) { 17700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mIsVoiceCapable && !mDoesRilSendMultipleCallRing && 17710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (token == mCallRingContinueToken)) { 1772ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Sending notifyIncomingRing"); 17730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyIncomingRing(); 17740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendMessageDelayed( 17750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville obtainMessage(EVENT_CALL_RING_CONTINUE, token, 0), mCallRingDelay); 17760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1777ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Ignoring ring notification request," 17780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing 17790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " token=" + token 17800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mCallRingContinueToken=" + mCallRingContinueToken 17810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mIsVoiceCapable=" + mIsVoiceCapable); 17820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1785cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 17860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isCspPlmnEnabled() { 17870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class GSMPhone. 17880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Not implemented in CDMAPhone. 17890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedGsmMethodCall("isCspPlmnEnabled"); 17900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 17910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1793cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 17940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IsimRecords getIsimRecords() { 1795ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "getIsimRecords() is only supported on LTE devices"); 17960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 17970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 17980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1799cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 18000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getMsisdn() { 18010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedGsmMethodCall("getMsisdn"); 18020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 18030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 18060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Common error logger method for unexpected calls to CDMA-only methods. 18070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 18080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void logUnexpectedCdmaMethodCall(String name) 18090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 1810ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " + 18110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "called, CDMAPhone inactive."); 18120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1814cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 18150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.DataState getDataConnectionState() { 18160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return getDataConnectionState(PhoneConstants.APN_TYPE_DEFAULT); 18170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 18200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Common error logger method for unexpected calls to GSM/WCDMA-only methods. 18210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 18220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void logUnexpectedGsmMethodCall(String name) { 1823ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " + 18240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "called, GSMPhone inactive."); 18250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Called by SimRecords which is constructed with a PhoneBase instead of a GSMPhone. 18280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyCallForwardingIndicator() { 18290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class GSMPhone. Not implemented in CDMAPhone. 1830ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone."); 18310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnectionFailed(String reason, String apnType) { 18340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnectionFailed(this, reason, apnType); 18350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18370742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela public void notifyPreciseDataConnectionFailed(String reason, String apnType, String apn, 18380742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela String failCause) { 18390742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela mNotifier.notifyPreciseDataConnectionFailed(this, reason, apnType, apn, failCause); 18400742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela } 18410742246233c3f03f864d23e52d89e1845d994701Antonio Marín Cerezuela 18420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 18430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@inheritDoc} 18440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 18450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 18460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getLteOnCdmaMode() { 184722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCi.getLteOnCdmaMode(); 18480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setVoiceMessageWaiting(int line, int countWaiting) { 185126a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa // This function should be overridden by class GSMPhone and CDMAPhone. 185226a4150cfb8cd317eb64994b9d9fd6109bd87ba7Sukanya Rajkhowa Rlog.e(LOG_TAG, "Error! This function should never be executed, inactive Phone."); 18530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 18550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 18560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Gets the USIM service table from the UICC, if present and available. 18570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return an interface to the UsimServiceTable record, or null if not available 18580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 18590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 18600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public UsimServiceTable getUsimServiceTable() { 1861e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1862e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getUsimServiceTable() : null; 18630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 18640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1865a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1866a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Gets the Uicc card corresponding to this phone. 1867a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @return the UiccCard object corresponding to the phone ID. 1868a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 1869a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 1870a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public UiccCard getUiccCard() { 1871a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return mUiccController.getUiccCard(mPhoneId); 1872a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1873a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1874a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1875a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Get P-CSCF address from PCO after data connection is established or modified. 1876bc78e2f9988f380a3b88d4cb4a9c0b80b8f44beeram * @param apnType the apnType, "ims" for IMS APN, "emergency" for EMERGENCY APN 1877a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 1878a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 1879bc78e2f9988f380a3b88d4cb4a9c0b80b8f44beeram public String[] getPcscfAddress(String apnType) { 1880bc78e2f9988f380a3b88d4cb4a9c0b80b8f44beeram return mDcTracker.getPcscfAddress(apnType); 1881a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1882a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1883a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1884a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Set IMS registration state 1885a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 1886a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 1887a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void setImsRegistrationState(boolean registered) { 1888a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville mDcTracker.setImsRegistrationState(registered); 1889a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1890a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1891a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1892a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Return an instance of a IMS phone 1893a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 1894a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 1895888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen public Phone getImsPhone() { 1896888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen return mImsPhone; 1897a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1898a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 189938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen @Override 190038b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen public ImsPhone relinquishOwnershipOfImsPhone() { 190138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen synchronized (mImsLock) { 190238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (mImsPhone == null) 190338b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen return null; 190438b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 190538b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen ImsPhone imsPhone = mImsPhone; 190638b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone = null; 190738b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 190838b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen CallManager.getInstance().unregisterPhone(imsPhone); 190938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen imsPhone.unregisterForSilentRedial(this); 191038b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 191138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen return imsPhone; 191238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen } 191338b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen } 191438b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 191538b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen @Override 191638b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen public void acquireOwnershipOfImsPhone(ImsPhone imsPhone) { 191738b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen synchronized (mImsLock) { 191838b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (imsPhone == null) 191938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen return; 1920a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 192138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (mImsPhone != null) { 192238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen Rlog.e(LOG_TAG, "acquireOwnershipOfImsPhone: non-null mImsPhone." + 192338b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen " Shouldn't happen - but disposing"); 192438b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone.dispose(); 192530862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen // Potential GC issue if someone keeps a reference to ImsPhone. 192630862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen // However: this change will make sure that such a reference does 192730862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen // not access functions through NULL pointer. 192830862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen //mImsPhone.removeReferences(); 192938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen } 193038b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 193138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone = imsPhone; 193238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 193338b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsServiceReady = true; 193438b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone.updateParentPhone(this); 1935888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen CallManager.getInstance().registerPhone(mImsPhone); 1936888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen mImsPhone.registerForSilentRedial( 1937a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville this, EVENT_INITIATE_SILENT_REDIAL, null); 193838b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen } 193938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen } 1940a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 194138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen protected void updateImsPhone() { 194238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen synchronized (mImsLock) { 194338b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen Rlog.d(LOG_TAG, "updateImsPhone" 194438b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen + " mImsServiceReady=" + mImsServiceReady); 194538b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 194638b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (mImsServiceReady && (mImsPhone == null)) { 194738b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone = PhoneFactory.makeImsPhone(mNotifier, this); 194838b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen CallManager.getInstance().registerPhone(mImsPhone); 194938b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone.registerForSilentRedial( 195038b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen this, EVENT_INITIATE_SILENT_REDIAL, null); 195138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen } else if (!mImsServiceReady && (mImsPhone != null)) { 195238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen CallManager.getInstance().unregisterPhone(mImsPhone); 195338b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone.unregisterForSilentRedial(this); 195438b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen 195538b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone.dispose(); 195630862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen // Potential GC issue if someone keeps a reference to ImsPhone. 195730862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen // However: this change will make sure that such a reference does 195830862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen // not access functions through NULL pointer. 195930862cd26cbde4397d984c9afd1780ffbc9adbc2Etan Cohen //mImsPhone.removeReferences(); 196038b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen mImsPhone = null; 196138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen } 1962a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1963a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1964a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 19656bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn /** 19666bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn * Dials a number. 19676bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn * 19686bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn * @param dialString The number to dial. 19696bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn * @param uusInfo The UUSInfo. 19706bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn * @param videoState The video state for the call. 19716bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn * @return The Connection. 19726bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn * @throws CallStateException 19736bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn */ 19746bbcbfd62c9aa5787e7c33936e2246ff05b59d58Tyler Gunn protected Connection dialInternal(String dialString, UUSInfo uusInfo, int videoState) 1975a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville throws CallStateException { 1976a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // dialInternal shall be overriden by GSMPhone and CDMAPhone 1977a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return null; 1978a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1979a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1980a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1981a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Returns the subscription id. 1982a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 1983b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville public int getSubId() { 19846bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville return SubscriptionController.getInstance().getSubIdUsingPhoneId(mPhoneId); 1985a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1986a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1987a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1988a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Returns the phone id. 1989a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 1990a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int getPhoneId() { 1991a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return mPhoneId; 1992a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 1993a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1994a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 1995888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen * Return the service state of mImsPhone if it is STATE_IN_SERVICE 1996a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * otherwise return the current voice service state 1997a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 1998a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville @Override 1999888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohen public int getVoicePhoneServiceState() { 200038b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen ImsPhone imsPhone = mImsPhone; 200138b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen if (imsPhone != null 200238b5fac001d38ad7a4f886ba7fcaf7c417216b01Etan Cohen && imsPhone.getServiceState().getState() == ServiceState.STATE_IN_SERVICE) { 2003a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return ServiceState.STATE_IN_SERVICE; 2004a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 2005a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return getServiceState().getState(); 2006a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 2007b93bb3538c55f173f94a4ee7510d9d1521d8f731Shishir Agrawal 2008b93bb3538c55f173f94a4ee7510d9d1521d8f731Shishir Agrawal @Override 2009279a26768a5fde8f0dd72e4b9e951c1c32265aabShishir Agrawal public boolean setOperatorBrandOverride(String brand) { 2010b93bb3538c55f173f94a4ee7510d9d1521d8f731Shishir Agrawal return false; 2011b93bb3538c55f173f94a4ee7510d9d1521d8f731Shishir Agrawal } 201203586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla 201303586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla @Override 201434057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal public boolean setRoamingOverride(List<String> gsmRoamingList, 201534057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal List<String> gsmNonRoamingList, List<String> cdmaRoamingList, 201634057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal List<String> cdmaNonRoamingList) { 201734057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal String iccId = getIccSerialNumber(); 201834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal if (TextUtils.isEmpty(iccId)) { 201934057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return false; 202034057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 202134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 202234057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal setRoamingOverrideHelper(gsmRoamingList, GSM_ROAMING_LIST_OVERRIDE_PREFIX, iccId); 202334057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal setRoamingOverrideHelper(gsmNonRoamingList, GSM_NON_ROAMING_LIST_OVERRIDE_PREFIX, iccId); 202434057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal setRoamingOverrideHelper(cdmaRoamingList, CDMA_ROAMING_LIST_OVERRIDE_PREFIX, iccId); 202534057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal setRoamingOverrideHelper(cdmaNonRoamingList, CDMA_NON_ROAMING_LIST_OVERRIDE_PREFIX, iccId); 202634057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 202734057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal // Refresh. 202834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal ServiceStateTracker tracker = getServiceStateTracker(); 202934057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal if (tracker != null) { 203034057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal tracker.pollState(); 203134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 203234057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return true; 203334057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 203434057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 203534057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal private void setRoamingOverrideHelper(List<String> list, String prefix, String iccId) { 203634057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal SharedPreferences.Editor spEditor = 203734057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal PreferenceManager.getDefaultSharedPreferences(mContext).edit(); 203834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal String key = prefix + iccId; 203934057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal if (list == null || list.isEmpty()) { 204034057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal spEditor.remove(key).commit(); 204134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } else { 204234057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal spEditor.putStringSet(key, new HashSet<String>(list)).commit(); 204334057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 204434057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 204534057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 204634057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal public boolean isMccMncMarkedAsRoaming(String mccMnc) { 204734057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return getRoamingOverrideHelper(GSM_ROAMING_LIST_OVERRIDE_PREFIX, mccMnc); 204834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 204934057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 205034057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal public boolean isMccMncMarkedAsNonRoaming(String mccMnc) { 205134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return getRoamingOverrideHelper(GSM_NON_ROAMING_LIST_OVERRIDE_PREFIX, mccMnc); 205234057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 205334057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 205434057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal public boolean isSidMarkedAsRoaming(int SID) { 205534057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return getRoamingOverrideHelper(CDMA_ROAMING_LIST_OVERRIDE_PREFIX, 205634057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal Integer.toString(SID)); 205734057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 205834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 205934057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal public boolean isSidMarkedAsNonRoaming(int SID) { 206034057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return getRoamingOverrideHelper(CDMA_NON_ROAMING_LIST_OVERRIDE_PREFIX, 206134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal Integer.toString(SID)); 206234057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 206334057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 2064bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com /** 2065bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com * Get IMS Registration Status 2066bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com */ 2067bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com @Override 2068bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com public boolean isImsRegistered() { 2069bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com ImsPhone imsPhone = mImsPhone; 2070bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com boolean isImsRegistered = false; 2071bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com if (imsPhone != null) { 2072bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com isImsRegistered = imsPhone.isImsRegistered(); 2073bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com } else { 2074bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com ServiceStateTracker sst = getServiceStateTracker(); 2075bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com if (sst != null) { 2076bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com isImsRegistered = sst.isImsRegistered(); 2077bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com } 2078bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com } 2079bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com Rlog.d(LOG_TAG, "isImsRegistered =" + isImsRegistered); 2080bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com return isImsRegistered; 2081bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com } 2082bd4bb4f2250463ba59dc98be649f6aa4df9fb682Libin.Tang@motorola.com 208334057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal private boolean getRoamingOverrideHelper(String prefix, String key) { 208434057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal String iccId = getIccSerialNumber(); 208534057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal if (TextUtils.isEmpty(iccId) || TextUtils.isEmpty(key)) { 208634057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return false; 208734057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 208834057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 208934057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); 209034057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal Set<String> value = sp.getStringSet(prefix + iccId, null); 209134057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal if (value == null) { 209234057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return false; 209334057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 209434057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal return value.contains(key); 209534057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal } 209634057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal 209734057c56c8cb3e3c011a70b2c799c73f15bd4522Shishir Agrawal @Override 209803586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla public boolean isRadioAvailable() { 209903586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla return mCi.getRadioState().isAvailable(); 210003586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla } 210103586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla 210203586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla @Override 210303586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla public void shutdownRadio() { 210403586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla getServiceStateTracker().requestShutdown(); 210503586878fb3d870373f2fdf65afb81cc5ae97067Naveen Kalla } 2106e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 21072b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville @Override 21082b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville public void setRadioCapability(RadioCapability rc, Message response) { 21092b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville mCi.setRadioCapability(rc, response); 21102b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } 21112b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 21122b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville @Override 21132b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville public int getRadioAccessFamily() { 21142b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville return mRadioAccessFamily; 21152b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } 21162b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 21172b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville @Override 21187e7d2b34010bf24a70bbf40303c7a4606c438adaStuart Scott public int getSupportedRadioAccessFamily() { 21197e7d2b34010bf24a70bbf40303c7a4606c438adaStuart Scott return mCi.getSupportedRadioAccessFamily(); 21207e7d2b34010bf24a70bbf40303c7a4606c438adaStuart Scott } 21217e7d2b34010bf24a70bbf40303c7a4606c438adaStuart Scott 21227e7d2b34010bf24a70bbf40303c7a4606c438adaStuart Scott @Override 21232b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville public void registerForRadioCapabilityChanged(Handler h, int what, Object obj) { 21242b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville mCi.registerForRadioCapabilityChanged(h, what, obj); 21252b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } 21262b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 21272b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville @Override 21282b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville public void unregisterForRadioCapabilityChanged(Handler h) { 21292b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville mCi.unregisterForRadioCapabilityChanged(this); 21302b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville } 21312b40e6226b4b71408964bca46f0a9f256cd4f523Wink Saville 2132e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 2133e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("PhoneBase: subId=" + getSubId()); 2134e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mPhoneId=" + mPhoneId); 2135e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mCi=" + mCi); 2136e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mDnsCheckDisabled=" + mDnsCheckDisabled); 2137e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mDcTracker=" + mDcTracker); 2138e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing); 2139e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mCallRingContinueToken=" + mCallRingContinueToken); 2140e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mCallRingDelay=" + mCallRingDelay); 2141e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mIsTheCurrentActivePhone=" + mIsTheCurrentActivePhone); 2142e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mIsVoiceCapable=" + mIsVoiceCapable); 2143e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mIccRecords=" + mIccRecords.get()); 2144e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mUiccApplication=" + mUiccApplication.get()); 2145e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mSmsStorageMonitor=" + mSmsStorageMonitor); 2146e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mSmsUsageMonitor=" + mSmsUsageMonitor); 2147e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 2148e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mLooper=" + mLooper); 2149e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mContext=" + mContext); 2150e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mNotifier=" + mNotifier); 2151e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mSimulatedRadioControl=" + mSimulatedRadioControl); 2152e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" mUnitTestMode=" + mUnitTestMode); 2153e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" isDnsCheckDisabled()=" + isDnsCheckDisabled()); 2154e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getUnitTestMode()=" + getUnitTestMode()); 2155e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getState()=" + getState()); 2156e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getIccSerialNumber()=" + getIccSerialNumber()); 2157e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getIccRecordsLoaded()=" + getIccRecordsLoaded()); 2158e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getMessageWaitingIndicator()=" + getMessageWaitingIndicator()); 2159e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getCallForwardingIndicator()=" + getCallForwardingIndicator()); 2160e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" isInEmergencyCall()=" + isInEmergencyCall()); 2161e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 2162e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" isInEcm()=" + isInEcm()); 2163e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getPhoneName()=" + getPhoneName()); 2164e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getPhoneType()=" + getPhoneType()); 2165e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getVoiceMessageCount()=" + getVoiceMessageCount()); 2166e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" getActiveApnTypes()=" + getActiveApnTypes()); 2167e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" isDataConnectivityPossible()=" + isDataConnectivityPossible()); 2168e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println(" needsOtaServiceProvisioning=" + needsOtaServiceProvisioning()); 2169e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 2170e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 2171e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 2172e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 2173e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville mDcTracker.dump(fd, pw, args); 2174e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 2175e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville e.printStackTrace(); 2176e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 2177e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 2178e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 2179e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 2180e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 2181e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville getServiceStateTracker().dump(fd, pw, args); 2182e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 2183e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville e.printStackTrace(); 2184e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 2185e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 2186e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 2187e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 2188e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 2189e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville getCallTracker().dump(fd, pw, args); 2190e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 2191e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville e.printStackTrace(); 2192e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 2193e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 2194e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 2195e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 2196e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 2197e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville ((RIL)mCi).dump(fd, pw, args); 2198e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 2199e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville e.printStackTrace(); 2200e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 2201e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 2202e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 2203e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 22040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 2205