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 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.SharedPreferences; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkCapabilities; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.wifi.WifiManager; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 252cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Savilleimport android.os.Build; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RegistrantList; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.preference.PreferenceManager; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.provider.Settings; 33ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.CellIdentityCdma; 34ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.CellInfo; 35ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.CellInfoCdma; 36ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport android.telephony.Rlog; 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState; 38ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.SignalStrength; 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils; 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.R; 42454b1dfd508844b42eb775e4ab2359be74d3672bWink Savilleimport com.android.internal.telephony.dataconnection.DcTrackerBase; 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.test.SimulatedRadioControl; 44d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType; 45d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccFileHandler; 46d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccRecords; 47d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IsimRecords; 48d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccCardApplication; 49e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccController; 50d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.UsimServiceTable; 51ffe6e68213ae3220497188fed814e271b472292aJake Hamby 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter; 54ffe6e68213ae3220497188fed814e271b472292aJake Hambyimport java.util.ArrayList; 55ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport java.util.List; 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicReference; 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (<em>Not for SDK use</em>) 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * A base implementation for the com.android.internal.telephony.Phone interface. 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Note that implementations of Phone.java are expected to be used 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * from a single application thread. This should be the same thread that 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * originally called PhoneFactory to obtain the interface. 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic abstract class PhoneBase extends Handler implements Phone { 72cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville private static final String LOG_TAG = "PhoneBase"; 73ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read and write the saved network selection numeric value 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String NETWORK_SELECTION_KEY = "network_selection_key"; 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read and write the saved network selection operator name 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String NETWORK_SELECTION_NAME_KEY = "network_selection_name_key"; 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read/write "disable data connection on boot" pref (used for testing) 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String DATA_DISABLED_ON_BOOT_KEY = "disabled_on_boot_key"; 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* Event Constants */ 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_AVAILABLE = 1; 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Supplementary Service Notification received. */ 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SSN = 2; 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SIM_RECORDS_LOADED = 3; 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_MMI_DONE = 4; 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_ON = 5; 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_BASEBAND_VERSION_DONE = 6; 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_USSD = 7; 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE = 8; 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_IMEI_DONE = 9; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_IMEISV_DONE = 10; 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_SIM_STATUS_DONE = 11; 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_CALL_FORWARD_DONE = 12; 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_CALL_FORWARD_DONE = 13; 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CALL_RING = 14; 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CALL_RING_CONTINUE = 15; 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Used to intercept the carrier selection calls so that 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // we can save the values. 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_MANUAL_COMPLETE = 16; 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_AUTOMATIC_COMPLETE = 17; 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_CLIR_COMPLETE = 18; 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_REGISTERED_TO_NETWORK = 19; 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_VM_NUMBER_DONE = 20; 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Events for CDMA support 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_DEVICE_IDENTITY_DONE = 21; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RUIM_RECORDS_LOADED = 22; 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_NV_READY = 23; 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_ENHANCED_VP = 24; 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_EMERGENCY_CALLBACK_MODE_ENTER = 25; 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE = 26; 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED = 27; 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // other 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_AUTOMATIC = 28; 1181260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected static final int EVENT_ICC_RECORD_EVENTS = 29; 1191260f1c6c909f2940989b72afe1b91fd83845eaaSukanya Rajkhowa protected static final int EVENT_ICC_CHANGED = 30; 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read/write current CLIR setting 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String CLIR_KEY = "clir_key"; 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read/write "disable DNS server check" pref (used for testing) 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String DNS_SERVER_CHECK_DISABLED_KEY = "dns_server_check_disabled_key"; 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* Instance Variables */ 12822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville public CommandsInterface mCi; 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mDnsCheckDisabled; 130454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville public DcTrackerBase mDcTracker; 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mDoesRilSendMultipleCallRing; 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mCallRingContinueToken; 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int mCallRingDelay; 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean mIsTheCurrentActivePhone = true; 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mIsVoiceCapable = true; 136e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected UiccController mUiccController = null; 137e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka public AtomicReference<IccRecords> mIccRecords = new AtomicReference<IccRecords>(); 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsStorageMonitor mSmsStorageMonitor; 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsUsageMonitor mSmsUsageMonitor; 140e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka protected AtomicReference<UiccCardApplication> mUiccApplication = 141e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka new AtomicReference<UiccCardApplication>(); 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 143ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private TelephonyTester mTelephonyTester; 144ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String mName; 145ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String mActionDetached; 146ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville private final String mActionAttached; 147ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 148ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville @Override 149ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public String getPhoneName() { 150ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville return mName; 151ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 152ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 153ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville /** 154ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Return the ActionDetached string. When this action is received by components 155ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * they are to simulate detaching from the network. 156ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * 157ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * @return com.android.internal.telephony.{mName}.action_detached 158ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * {mName} is GSM, CDMA ... 159ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */ 160ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public String getActionDetached() { 161ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville return mActionDetached; 162ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 163ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 164ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville /** 165ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * Return the ActionAttached string. When this action is received by components 166ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * they are to simulate attaching to the network. 167ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * 168ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * @return com.android.internal.telephony.{mName}.action_detached 169ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville * {mName} is GSM, CDMA ... 170ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville */ 171ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public String getActionAttached() { 172ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville return mActionAttached; 173ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 174ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set a system property, unless we're in unit test mode 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 178ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville public void setSystemProperty(String property, String value) { 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if(getUnitTestMode()) { 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SystemProperties.set(property, value); 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mPreciseCallStateRegistrants 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mNewRingingConnectionRegistrants 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mIncomingRingRegistrants 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mDisconnectRegistrants 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mServiceStateRegistrants 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mMmiCompleteRegistrants 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mMmiRegistrants 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mUnknownConnectionRegistrants 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mSuppServiceFailedRegistrants 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected Looper mLooper; /* to insure registrants are in correct thread*/ 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final Context mContext; 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * PhoneNotifier is an abstraction for all system-wide 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * state change notification. DefaultPhoneNotifier is 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * used here unless running we're inside a unit test. 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected PhoneNotifier mNotifier; 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected SimulatedRadioControl mSimulatedRadioControl; 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mUnitTestMode; 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Constructs a PhoneBase in normal (non-unit test) mode. 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param notifier An instance of DefaultPhoneNotifier, 232ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param context Context object from hosting application 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unless unit testing. 234ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param ci the CommandsInterface 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 236ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville protected PhoneBase(String name, PhoneNotifier notifier, Context context, CommandsInterface ci) { 237ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville this(name, notifier, context, ci, false); 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Constructs a PhoneBase in normal (non-unit test) mode. 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param notifier An instance of DefaultPhoneNotifier, 244ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param context Context object from hosting application 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unless unit testing. 246ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param ci is CommandsInterface 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param unitTestMode when true, prevents notifications 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * of state change events 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 250ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville protected PhoneBase(String name, PhoneNotifier notifier, Context context, CommandsInterface ci, 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean unitTestMode) { 252ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mName = name; 25322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mNotifier = notifier; 25422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mContext = context; 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLooper = Looper.myLooper(); 25622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi = ci; 257ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mActionDetached = this.getClass().getPackage().getName() + ".action_detached"; 258ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mActionAttached = this.getClass().getPackage().getName() + ".action_attached"; 259ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 2602cc8c148fa4cb6cba5deac6b011268b4174a0b02Wink Saville if (Build.IS_DEBUGGABLE) { 261ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mTelephonyTester = new TelephonyTester(this); 262ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setPropertiesByCarrier(); 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setUnitTestMode(unitTestMode); 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDnsCheckDisabled = sp.getBoolean(DNS_SERVER_CHECK_DISABLED_KEY, false); 27022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setOnCallRing(this, EVENT_CALL_RING, null); 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* "Voice capable" means that this device supports circuit-switched 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (i.e. voice) phone calls over the telephony network, and is allowed 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to display the in-call UI while a cellular voice call is active. 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This will be false on "data only" devices which can't make voice 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * calls and don't support any in-call UI. 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsVoiceCapable = mContext.getResources().getBoolean( 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville com.android.internal.R.bool.config_voice_capable); 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Some RIL's don't always send RIL_UNSOL_CALL_RING so it needs 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to be generated locally. Ideally all ring tones should be loops 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * and this wouldn't be necessary. But to minimize changes to upper 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * layers it is requested that it be generated by lower layers. 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * By default old phones won't have the property set but do generate 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the RIL_UNSOL_CALL_RING so the default if there is no property is 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * true. 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDoesRilSendMultipleCallRing = SystemProperties.getBoolean( 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_RIL_SENDS_MULTIPLE_CALL_RING, true); 293ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing); 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCallRingDelay = SystemProperties.getInt( 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_CALL_RING_DELAY, 3000); 297ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "mCallRingDelay=" + mCallRingDelay); 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Initialize device storage and outgoing SMS usage monitors for SMSDispatchers. 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor = new SmsStorageMonitor(this); 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor = new SmsUsageMonitor(context); 302e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccController = UiccController.getInstance(); 303e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null); 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 306cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dispose() { 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 30922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unSetOnCallRing(this); 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Must cleanup all connectionS and needs to use sendMessage! 311454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker.cleanUpAllConnections(null); 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsTheCurrentActivePhone = false; 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Dispose the SMS usage and storage monitors 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor.dispose(); 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor.dispose(); 316e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController.unregisterForIccChanged(this); 317ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville 318ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville if (mTelephonyTester != null) { 319ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville mTelephonyTester.dispose(); 320ff4e317d24f0d23bdc0f306d53ddc51f2f1ecf6aWink Saville } 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 324cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void removeReferences() { 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor = null; 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor = null; 328e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mIccRecords.set(null); 329e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccApplication.set(null); 330454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville mDcTracker = null; 331e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController = null; 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * When overridden the derived class needs to call 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * super.handleMessage(msg) so this method has a 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a chance to process the message. 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param msg 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void handleMessage(Message msg) { 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3455e2000b856a7959609e8f15148a3584ec372f865Wink Saville if (!mIsTheCurrentActivePhone) { 3465e2000b856a7959609e8f15148a3584ec372f865Wink Saville Rlog.e(LOG_TAG, "Received message " + msg + 3475e2000b856a7959609e8f15148a3584ec372f865Wink Saville "[" + msg.what + "] while being destroyed. Ignoring."); 3485e2000b856a7959609e8f15148a3584ec372f865Wink Saville return; 3495e2000b856a7959609e8f15148a3584ec372f865Wink Saville } 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch(msg.what) { 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_CALL_RING: 352ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Event EVENT_CALL_RING Received state=" + getState()); 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult)msg.obj; 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ar.exception == null) { 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.State state = getState(); 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((!mDoesRilSendMultipleCallRing) 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville && ((state == PhoneConstants.State.RINGING) || 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (state == PhoneConstants.State.IDLE))) { 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCallRingContinueToken += 1; 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendIncomingCallRingNotification(mCallRingContinueToken); 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyIncomingRing(); 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_CALL_RING_CONTINUE: 368ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Event EVENT_CALL_RING_CONTINUE Received stat=" + getState()); 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (getState() == PhoneConstants.State.RINGING) { 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendIncomingCallRingNotification(msg.arg1); 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 374e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka case EVENT_ICC_CHANGED: 375e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka onUpdateIccAvailability(); 376e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka break; 377e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new RuntimeException("unexpected event not handled"); 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 384cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Context getContext() { 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mContext; 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 389e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka // Will be called when icc changed 390e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected abstract void onUpdateIccAvailability(); 391e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Disables the DNS check (i.e., allows "0.0.0.0"). 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Useful for lab testing environment. 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param b true disables the check, false enables. 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 397cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void disableDnsCheck(boolean b) { 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDnsCheckDisabled = b; 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences.Editor editor = sp.edit(); 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.putBoolean(DNS_SERVER_CHECK_DISABLED_KEY, b); 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.apply(); 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if the DNS check is currently disabled. 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 409cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDnsCheckDisabled() { 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDnsCheckDisabled; 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 415cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForPreciseCallStateChanged(Handler h, int what, Object obj) { 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.addUnique(h, what, obj); 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 423cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForPreciseCallStateChanged(Handler h) { 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.remove(h); 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyPreciseCallStateChangedP() { 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, this, null); 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.notifyRegistrants(ar); 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 438cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForUnknownConnection(Handler h, int what, Object obj) { 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.addUnique(h, what, obj); 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 446cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForUnknownConnection(Handler h) { 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.remove(h); 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 452cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForNewRingingConnection( 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.addUnique(h, what, obj); 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 461cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForNewRingingConnection(Handler h) { 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.remove(h); 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 467cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj){ 46922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForInCallVoicePrivacyOn(h,what,obj); 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 473cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForInCallVoicePrivacyOn(Handler h){ 47522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForInCallVoicePrivacyOn(h); 4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 479cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj){ 48122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForInCallVoicePrivacyOff(h,what,obj); 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 485cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForInCallVoicePrivacyOff(Handler h){ 48722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForInCallVoicePrivacyOff(h); 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 491cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForIncomingRing( 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.addUnique(h, what, obj); 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 500cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForIncomingRing(Handler h) { 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.remove(h); 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 506cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForDisconnect(Handler h, int what, Object obj) { 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.addUnique(h, what, obj); 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 514cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForDisconnect(Handler h) { 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.remove(h); 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 520cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSuppServiceFailed(Handler h, int what, Object obj) { 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSuppServiceFailedRegistrants.addUnique(h, what, obj); 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 528cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSuppServiceFailed(Handler h) { 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSuppServiceFailedRegistrants.remove(h); 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 534cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForMmiInitiate(Handler h, int what, Object obj) { 5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiRegistrants.addUnique(h, what, obj); 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 542cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForMmiInitiate(Handler h) { 5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiRegistrants.remove(h); 5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 548cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForMmiComplete(Handler h, int what, Object obj) { 5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiCompleteRegistrants.addUnique(h, what, obj); 5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 556cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForMmiComplete(Handler h) { 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiCompleteRegistrants.remove(h); 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Method to retrieve the saved operator id from the Shared Preferences 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private String getSavedNetworkSelection() { 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // open the shared preferences and search with our key. 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sp.getString(NETWORK_SELECTION_KEY, ""); 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Method to restore the previously saved operator id, or reset to 5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * automatic selection, all depending upon the value in the shared 5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * preferences. 5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void restoreSavedNetworkSelection(Message response) { 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // retrieve the operator id 5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String networkSelection = getSavedNetworkSelection(); 5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set to auto if the id is empty, otherwise select the network. 5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (TextUtils.isEmpty(networkSelection)) { 58322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setNetworkSelectionModeAutomatic(response); 5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 58522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setNetworkSelectionModeManual(networkSelection, response); 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 590cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setUnitTestMode(boolean f) { 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnitTestMode = f; 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 596cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getUnitTestMode() { 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mUnitTestMode; 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * To be invoked when a voice call Connection disconnects. 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyDisconnectP(Connection cn) { 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, cn, null); 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.notifyRegistrants(ar); 6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 613cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForServiceStateChanged( 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.add(h, what, obj); 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 622cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForServiceStateChanged(Handler h) { 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.remove(h); 6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 628cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForRingbackTone(Handler h, int what, Object obj) { 63022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForRingbackTone(h,what,obj); 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 634cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForRingbackTone(Handler h) { 63622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForRingbackTone(h); 6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 640cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForResendIncallMute(Handler h, int what, Object obj) { 64222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForResendIncallMute(h,what,obj); 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 646cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForResendIncallMute(Handler h) { 64822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForResendIncallMute(h); 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 651cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setEchoSuppressionEnabled(boolean enabled) { 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // no need for regular phone 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyServiceStateChangedP(ServiceState ss) { 6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, ss, null); 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.notifyRegistrants(ar); 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyServiceState(this); 6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 668cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SimulatedRadioControl getSimulatedRadioControl() { 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSimulatedRadioControl; 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Verifies the current thread is the same as the thread originally 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * used in the initialization of this instance. Throws RuntimeException 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * if not. 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @exception RuntimeException if the current thread is not 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the thread that originally obtained this PhoneBase instance. 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void checkCorrectThread(Handler h) { 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (h.getLooper() != mLooper) { 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new RuntimeException( 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "com.android.internal.telephony.Phone must be used from within one thread"); 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the properties by matching the carrier string in 6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a string-array resource 6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void setPropertiesByCarrier() { 6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String carrier = SystemProperties.get("ro.carrier"); 6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (null == carrier || 0 == carrier.length() || "unknown".equals(carrier)) { 6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CharSequence[] carrierLocales = mContext. 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getResources().getTextArray(R.array.carrier_properties); 7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < carrierLocales.length; i+=3) { 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String c = carrierLocales[i].toString(); 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (carrier.equals(c)) { 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String l = carrierLocales[i+1].toString(); 7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String language = l.substring(0, 2); 7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String country = ""; 7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (l.length() >=5) { 7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville country = l.substring(3, 5); 7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccTable.setSystemLocale(mContext, language, country); 713e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt 714e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt if (!country.isEmpty()) { 715e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt try { 716e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt Settings.Global.getInt(mContext.getContentResolver(), 717e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt Settings.Global.WIFI_COUNTRY_CODE); 718e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt } catch (Settings.SettingNotFoundException e) { 719e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt // note this is not persisting 720e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt WifiManager wM = (WifiManager) 721e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt mContext.getSystemService(Context.WIFI_SERVICE); 722e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt wM.setCountryCode(country, false); 723e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt } 724e0695876e8a7084cf4eaa8e6c71808f238a853a7Robert Greenwalt } 7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get state 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 733cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract PhoneConstants.State getState(); 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the IccFileHandler of the Phone instance 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccFileHandler getIccFileHandler(){ 740e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka UiccCardApplication uiccApplication = mUiccApplication.get(); 741e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka if (uiccApplication == null) return null; 742e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka return uiccApplication.getIccFileHandler(); 7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the Handler of the Phone instance 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Handler getHandler() { 7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return this; 7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 752b54cd09892e0676d719e6df00e60c77b663f993cWink Saville @Override 753b54cd09892e0676d719e6df00e60c77b663f993cWink Saville public void updatePhoneObject(int voiceRadioTech) { 754b54cd09892e0676d719e6df00e60c77b663f993cWink Saville // Only the PhoneProxy can update the phone object. 755b54cd09892e0676d719e6df00e60c77b663f993cWink Saville PhoneFactory.getDefaultPhone().updatePhoneObject(voiceRadioTech); 756b54cd09892e0676d719e6df00e60c77b663f993cWink Saville } 757b54cd09892e0676d719e6df00e60c77b663f993cWink Saville 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the ServiceStateTracker of the phone instance. 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public ServiceStateTracker getServiceStateTracker() { 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get call tracker 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CallTracker getCallTracker() { 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 772ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka public AppType getCurrentUiccAppType() { 773ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka UiccCardApplication currentApp = mUiccApplication.get(); 774ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka if (currentApp != null) { 775ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka return currentApp.getType(); 776ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka } 777ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka return AppType.APPTYPE_UNKNOWN; 778ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka } 779ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka 7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccCard getIccCard() { 782e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka return null; 783e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka //throw new Exception("getIccCard Shouldn't be called from PhoneBase"); 7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getIccSerialNumber() { 788e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 7893c6bdec23af42aba1168303cdefc20525b0ec1d0Ajay Nambi return (r != null) ? r.getIccId() : null; 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getIccRecordsLoaded() { 794e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 795e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getRecordsLoaded() : false; 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 798ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville /** 799ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @return all available cell information or null if none. 800ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville */ 801ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville @Override 802ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public List<CellInfo> getAllCellInfo() { 803ffe6e68213ae3220497188fed814e271b472292aJake Hamby List<CellInfo> cellInfoList = getServiceStateTracker().getAllCellInfo(); 804ffe6e68213ae3220497188fed814e271b472292aJake Hamby return privatizeCellInfoList(cellInfoList); 805ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 806ffe6e68213ae3220497188fed814e271b472292aJake Hamby 807ffe6e68213ae3220497188fed814e271b472292aJake Hamby /** 808ffe6e68213ae3220497188fed814e271b472292aJake Hamby * Clear CDMA base station lat/long values if location setting is disabled. 809ffe6e68213ae3220497188fed814e271b472292aJake Hamby * @param cellInfoList the original cell info list from the RIL 810ffe6e68213ae3220497188fed814e271b472292aJake Hamby * @return the original list with CDMA lat/long cleared if necessary 811ffe6e68213ae3220497188fed814e271b472292aJake Hamby */ 812ffe6e68213ae3220497188fed814e271b472292aJake Hamby private List<CellInfo> privatizeCellInfoList(List<CellInfo> cellInfoList) { 813ffe6e68213ae3220497188fed814e271b472292aJake Hamby int mode = Settings.Secure.getInt(getContext().getContentResolver(), 814ffe6e68213ae3220497188fed814e271b472292aJake Hamby Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); 815ffe6e68213ae3220497188fed814e271b472292aJake Hamby if (mode == Settings.Secure.LOCATION_MODE_OFF) { 816ffe6e68213ae3220497188fed814e271b472292aJake Hamby ArrayList<CellInfo> privateCellInfoList = new ArrayList<CellInfo>(cellInfoList.size()); 817ffe6e68213ae3220497188fed814e271b472292aJake Hamby // clear lat/lon values for location privacy 818ffe6e68213ae3220497188fed814e271b472292aJake Hamby for (CellInfo c : cellInfoList) { 819ffe6e68213ae3220497188fed814e271b472292aJake Hamby if (c instanceof CellInfoCdma) { 820ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellInfoCdma cellInfoCdma = (CellInfoCdma) c; 821ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellIdentityCdma cellIdentity = cellInfoCdma.getCellIdentity(); 822ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellIdentityCdma maskedCellIdentity = new CellIdentityCdma( 823ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellIdentity.getNetworkId(), 824ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellIdentity.getSystemId(), 825ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellIdentity.getBasestationId(), 826ffe6e68213ae3220497188fed814e271b472292aJake Hamby Integer.MAX_VALUE, Integer.MAX_VALUE); 827ffe6e68213ae3220497188fed814e271b472292aJake Hamby CellInfoCdma privateCellInfoCdma = new CellInfoCdma(cellInfoCdma); 828ffe6e68213ae3220497188fed814e271b472292aJake Hamby privateCellInfoCdma.setCellIdentity(maskedCellIdentity); 829ffe6e68213ae3220497188fed814e271b472292aJake Hamby privateCellInfoList.add(privateCellInfoCdma); 830ffe6e68213ae3220497188fed814e271b472292aJake Hamby } else { 831ffe6e68213ae3220497188fed814e271b472292aJake Hamby privateCellInfoList.add(c); 832ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 833ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 834ffe6e68213ae3220497188fed814e271b472292aJake Hamby cellInfoList = privateCellInfoList; 835ffe6e68213ae3220497188fed814e271b472292aJake Hamby } 836ffe6e68213ae3220497188fed814e271b472292aJake Hamby return cellInfoList; 837ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 838ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 8395fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville /** 8405fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville * {@inheritDoc} 8415fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville */ 8425fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville @Override 8435fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville public void setCellInfoListRate(int rateInMillis) { 8445fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville mCi.setCellInfoListRate(rateInMillis, null); 8455fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville } 8465fb811ff076aa6b4a9ceca6edaf504a4c6d9ad20Wink Saville 8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getMessageWaitingIndicator() { 849e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 850e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getVoiceMessageWaiting() : false; 8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getCallForwardingIndicator() { 855e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 856e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getVoiceCallForwardingFlag() : false; 8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Query the status of the CDMA roaming preference 8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 862cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryCdmaRoamingPreference(Message response) { 86422d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.queryCdmaRoamingPreference(response); 8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 868ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * Get the signal strength 869ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville */ 870ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville @Override 871ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public SignalStrength getSignalStrength() { 872ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville ServiceStateTracker sst = getServiceStateTracker(); 873ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville if (sst == null) { 874ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return new SignalStrength(); 875ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } else { 876ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return sst.getSignalStrength(); 877ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 878ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 879ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 880ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville /** 8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the status of the CDMA roaming preference 8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 883cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) { 88522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setCdmaRoamingPreference(cdmaRoamingType, response); 8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the status of the CDMA subscription mode 8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 891cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCdmaSubscription(int cdmaSubscriptionType, Message response) { 89322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setCdmaSubscriptionSource(cdmaSubscriptionType, response); 8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the preferred Network Type: Global, CDMA only or GSM/UMTS only 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 899cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setPreferredNetworkType(int networkType, Message response) { 90122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setPreferredNetworkType(networkType, response); 9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 904cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getPreferredNetworkType(Message response) { 90622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getPreferredNetworkType(response); 9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 909cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getSmscAddress(Message result) { 91122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.getSmscAddress(result); 9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 914cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setSmscAddress(String address, Message result) { 91622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setSmscAddress(address, result); 9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 919cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setTTYMode(int ttyMode, Message onComplete) { 92122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setTTYMode(ttyMode, onComplete); 9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 924cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryTTYMode(Message onComplete) { 92622d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.queryTTYMode(onComplete); 9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 929cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("enableEnhancedVoicePrivacy"); 9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 935cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getEnhancedVoicePrivacy"); 9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 941cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setBandMode(int bandMode, Message response) { 94322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.setBandMode(bandMode, response); 9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 946cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryAvailableBandMode(Message response) { 94822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.queryAvailableBandMode(response); 9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 951cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void invokeOemRilRequestRaw(byte[] data, Message response) { 95322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.invokeOemRilRequestRaw(data, response); 9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 956cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void invokeOemRilRequestStrings(String[] strings, Message response) { 95822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.invokeOemRilRequestStrings(strings, response); 9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 961cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataActivity() { 9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataActivity(this); 9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyMessageWaitingIndicator() { 9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Do not notify voice mail waiting if device doesn't support voice 9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function is added to send the notification to DefaultPhoneNotifier. 9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyMessageWaitingChanged(this); 9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason, String apnType, 9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.DataState state) { 9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, state); 9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason, String apnType) { 9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType)); 9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason) { 9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String types[] = getActiveApnTypes(); 9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String apnType : types) { 9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType)); 9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyOtaspChanged(int otaspMode) { 9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyOtaspChanged(this, otaspMode); 9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 995ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public void notifySignalStrength() { 996ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville mNotifier.notifySignalStrength(this); 997ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 998ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 999ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public void notifyCellInfo(List<CellInfo> cellInfo) { 1000ffe6e68213ae3220497188fed814e271b472292aJake Hamby mNotifier.notifyCellInfo(this, privatizeCellInfoList(cellInfo)); 1001ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 1002ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if a mobile originating emergency call is active 10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEmergencyCall() { 10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 10080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if we are in the emergency call back mode. This is a period where 10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the phone should be using as little power as possible and be ready to receive an 10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * incoming call from the emergency operator. 10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEcm() { 10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1019cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract int getPhoneType(); 10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** @hide */ 1023cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getVoiceMessageCount(){ 10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return 0; 10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI icon index to display 10300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1031cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconIndex() { 10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriIconIndex"); 10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return -1; 10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI icon mode, 10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 0 - ON 10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1 - FLASHING 10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1042cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconMode() { 10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriIconMode"); 10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return -1; 10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI text, 10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1051cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaEriText() { 10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriText"); 10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "GSM nw, no ERI"; 10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1057cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaMin() { 10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaMin"); 10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1064cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isMinInfoReady() { 10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("isMinInfoReady"); 10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 10690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1071cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaPrlVersion(){ 10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaPrlVersion"); 10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1078cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("sendBurstDtmf"); 10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1084cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void exitEmergencyCallbackMode() { 10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("exitEmergencyCallbackMode"); 10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1090cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForCdmaOtaStatusChange"); 10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1096cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForCdmaOtaStatusChange"); 11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1102cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForSubscriptionInfoReady"); 11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1108cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSubscriptionInfoReady(Handler h) { 11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForSubscriptionInfoReady"); 11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if OTA Service Provisioning needs to be performed. 11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If not overridden return false. 11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1118cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean needsOtaServiceProvisioning() { 11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return true if number is an OTASP number. 11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If not overridden return false. 11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1127cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isOtaSpNumber(String dialStr) { 11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1132cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj){ 11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForCallWaiting"); 11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1138cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCallWaiting(Handler h){ 11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForCallWaiting"); 11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1144cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForEcmTimerReset"); 11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1150cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForEcmTimerReset(Handler h) { 11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForEcmTimerReset"); 11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1156cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSignalInfo(Handler h, int what, Object obj) { 115822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForSignalInfo(h, what, obj); 11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1161cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSignalInfo(Handler h) { 116322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForSignalInfo(h); 11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1166cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForDisplayInfo(Handler h, int what, Object obj) { 116822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForDisplayInfo(h, what, obj); 11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1171cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1172cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public void unregisterForDisplayInfo(Handler h) { 117322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForDisplayInfo(h); 11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1176cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForNumberInfo(Handler h, int what, Object obj) { 117822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForNumberInfo(h, what, obj); 11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1181cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForNumberInfo(Handler h) { 118322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForNumberInfo(h); 11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1186cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForRedirectedNumberInfo(Handler h, int what, Object obj) { 118822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForRedirectedNumberInfo(h, what, obj); 11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1191cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForRedirectedNumberInfo(Handler h) { 119322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForRedirectedNumberInfo(h); 11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1196cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForLineControlInfo(Handler h, int what, Object obj) { 119822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForLineControlInfo( h, what, obj); 11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1201cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForLineControlInfo(Handler h) { 120322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForLineControlInfo(h); 12040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1206cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerFoT53ClirlInfo(Handler h, int what, Object obj) { 120822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerFoT53ClirlInfo(h, what, obj); 12090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1211cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForT53ClirInfo(Handler h) { 121322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForT53ClirInfo(h); 12140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1216cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForT53AudioControlInfo(Handler h, int what, Object obj) { 121822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.registerForT53AudioControlInfo( h, what, obj); 12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1221cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForT53AudioControlInfo(Handler h) { 122322d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville mCi.unregisterForT53AudioControlInfo(h); 12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1226cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1227cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj){ 12280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 12290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("setOnEcbModeExitResponse"); 12300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1232cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 1233cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville public void unsetOnEcbModeExitResponse(Handler h){ 12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unsetOnEcbModeExitResponse"); 12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1238cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String[] getActiveApnTypes() { 1240454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getActiveApnTypes(); 12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1243cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getActiveApnHost(String apnType) { 1245454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getActiveApnString(apnType); 12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1248cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public LinkProperties getLinkProperties(String apnType) { 1250454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getLinkProperties(apnType); 12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1253cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public LinkCapabilities getLinkCapabilities(String apnType) { 1255454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.getLinkCapabilities(apnType); 12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1258cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int enableApnType(String type) { 1260454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.enableApnType(type); 12610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1263cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int disableApnType(String type) { 1265454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return mDcTracker.disableApnType(type); 12660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1268cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDataConnectivityPossible() { 12700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isDataConnectivityPossible(PhoneConstants.APN_TYPE_DEFAULT); 12710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1273cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 12740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDataConnectivityPossible(String apnType) { 1275454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville return ((mDcTracker != null) && 1276454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville (mDcTracker.isDataPossible(apnType))); 12770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify registrants of a new ringing Connection. 12810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 12820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 12830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 12840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyNewRingingConnectionP(Connection cn) { 12850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 12860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 12870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, cn, null); 12880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.notifyRegistrants(ar); 12890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify registrants of a RING event. 12930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 12940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void notifyIncomingRing() { 12950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 12960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 12970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, this, null); 12980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.notifyRegistrants(ar); 12990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Send the incoming call Ring notification if conditions are right. 13030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void sendIncomingCallRingNotification(int token) { 13050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mIsVoiceCapable && !mDoesRilSendMultipleCallRing && 13060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (token == mCallRingContinueToken)) { 1307ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Sending notifyIncomingRing"); 13080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyIncomingRing(); 13090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendMessageDelayed( 13100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville obtainMessage(EVENT_CALL_RING_CONTINUE, token, 0), mCallRingDelay); 13110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 1312ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.d(LOG_TAG, "Ignoring ring notification request," 13130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing 13140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " token=" + token 13150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mCallRingContinueToken=" + mCallRingContinueToken 13160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mIsVoiceCapable=" + mIsVoiceCapable); 13170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1320cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isCspPlmnEnabled() { 13220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class GSMPhone. 13230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Not implemented in CDMAPhone. 13240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedGsmMethodCall("isCspPlmnEnabled"); 13250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 13260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1328cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IsimRecords getIsimRecords() { 1330ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "getIsimRecords() is only supported on LTE devices"); 13310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 13320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1334cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void requestIsimAuthentication(String nonce, Message result) { 1336ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "requestIsimAuthentication() is only supported on LTE devices"); 13370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1339cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getMsisdn() { 13410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedGsmMethodCall("getMsisdn"); 13420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 13430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Common error logger method for unexpected calls to CDMA-only methods. 13470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void logUnexpectedCdmaMethodCall(String name) 13490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 1350ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " + 13510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "called, CDMAPhone inactive."); 13520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1354cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville @Override 13550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.DataState getDataConnectionState() { 13560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return getDataConnectionState(PhoneConstants.APN_TYPE_DEFAULT); 13570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Common error logger method for unexpected calls to GSM/WCDMA-only methods. 13610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void logUnexpectedGsmMethodCall(String name) { 1363ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " + 13640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "called, GSMPhone inactive."); 13650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Called by SimRecords which is constructed with a PhoneBase instead of a GSMPhone. 13680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyCallForwardingIndicator() { 13690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class GSMPhone. Not implemented in CDMAPhone. 1370ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville Rlog.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone."); 13710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnectionFailed(String reason, String apnType) { 13740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnectionFailed(this, reason, apnType); 13750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@inheritDoc} 13790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 13810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getLteOnCdmaMode() { 138222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville return mCi.getLteOnCdmaMode(); 13830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 13850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 13860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Sets the SIM voice message waiting indicator records. 13870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported 13880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param countWaiting The number of messages waiting, if known. Use 13890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * -1 to indicate that an unknown number of 13900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * messages are waiting 13910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 13920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 13930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setVoiceMessageWaiting(int line, int countWaiting) { 1394e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1395e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka if (r != null) { 1396e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka r.setVoiceMessageWaiting(line, countWaiting); 1397e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 13980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 13990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 14010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Gets the USIM service table from the UICC, if present and available. 14020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return an interface to the UsimServiceTable record, or null if not available 14030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 14040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 14050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public UsimServiceTable getUsimServiceTable() { 1406e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1407e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getUsimServiceTable() : null; 14080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 14100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 14110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println("PhoneBase:"); 141222d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville pw.println(" mCi=" + mCi); 14130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mDnsCheckDisabled=" + mDnsCheckDisabled); 1414454b1dfd508844b42eb775e4ab2359be74d3672bWink Saville pw.println(" mDcTracker=" + mDcTracker); 14150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing); 14160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCallRingContinueToken=" + mCallRingContinueToken); 14170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCallRingDelay=" + mCallRingDelay); 14180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mIsTheCurrentActivePhone=" + mIsTheCurrentActivePhone); 14190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mIsVoiceCapable=" + mIsVoiceCapable); 1420e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka pw.println(" mIccRecords=" + mIccRecords.get()); 1421e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka pw.println(" mUiccApplication=" + mUiccApplication.get()); 14220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSmsStorageMonitor=" + mSmsStorageMonitor); 14230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSmsUsageMonitor=" + mSmsUsageMonitor); 14240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.flush(); 14250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mLooper=" + mLooper); 14260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mContext=" + mContext); 14270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mNotifier=" + mNotifier); 14280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSimulatedRadioControl=" + mSimulatedRadioControl); 14290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mUnitTestMode=" + mUnitTestMode); 14300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isDnsCheckDisabled()=" + isDnsCheckDisabled()); 14310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getUnitTestMode()=" + getUnitTestMode()); 14320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getState()=" + getState()); 14330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getIccSerialNumber()=" + getIccSerialNumber()); 14340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getIccRecordsLoaded()=" + getIccRecordsLoaded()); 14350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getMessageWaitingIndicator()=" + getMessageWaitingIndicator()); 14360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getCallForwardingIndicator()=" + getCallForwardingIndicator()); 14370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isInEmergencyCall()=" + isInEmergencyCall()); 14380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.flush(); 14390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isInEcm()=" + isInEcm()); 14400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getPhoneName()=" + getPhoneName()); 14410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getPhoneType()=" + getPhoneType()); 14420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getVoiceMessageCount()=" + getVoiceMessageCount()); 14430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getActiveApnTypes()=" + getActiveApnTypes()); 14440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isDataConnectivityPossible()=" + isDataConnectivityPossible()); 14450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" needsOtaServiceProvisioning=" + needsOtaServiceProvisioning()); 14460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 14470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 1448