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.app.ActivityManagerNative; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.app.IActivityManager; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.res.Configuration; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.SharedPreferences; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkCapabilities; 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.wifi.WifiManager; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Looper; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RegistrantList; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.preference.PreferenceManager; 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.provider.Settings; 35ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.CellInfo; 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState; 37ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.SignalStrength; 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.text.TextUtils; 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.Log; 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.R; 42e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenkaimport com.android.internal.telephony.IccCardApplicationStatus.AppState; 43ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenkaimport com.android.internal.telephony.IccCardApplicationStatus.AppType; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.UsimServiceTable; 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.ims.IsimRecords; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.test.SimulatedRadioControl; 47e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenkaimport com.android.internal.telephony.uicc.UiccController; 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.gsm.SIMRecords; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.FileDescriptor; 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.io.PrintWriter; 52ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport java.util.List; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Locale; 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicReference; 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (<em>Not for SDK use</em>) 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * A base implementation for the com.android.internal.telephony.Phone interface. 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Note that implementations of Phone.java are expected to be used 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * from a single application thread. This should be the same thread that 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * originally called PhoneFactory to obtain the interface. 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide} 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic abstract class PhoneBase extends Handler implements Phone { 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final String LOG_TAG = "PHONE"; 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final boolean LOCAL_DEBUG = true; 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read and write the saved network selection numeric value 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String NETWORK_SELECTION_KEY = "network_selection_key"; 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read and write the saved network selection operator name 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String NETWORK_SELECTION_NAME_KEY = "network_selection_name_key"; 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Key used to read/write "disable data connection on boot" pref (used for testing) 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final String DATA_DISABLED_ON_BOOT_KEY = "disabled_on_boot_key"; 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* Event Constants */ 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_AVAILABLE = 1; 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Supplementary Service Notification received. */ 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SSN = 2; 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SIM_RECORDS_LOADED = 3; 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_MMI_DONE = 4; 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_ON = 5; 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_BASEBAND_VERSION_DONE = 6; 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_USSD = 7; 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE = 8; 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_IMEI_DONE = 9; 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_IMEISV_DONE = 10; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_SIM_STATUS_DONE = 11; 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_CALL_FORWARD_DONE = 12; 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_CALL_FORWARD_DONE = 13; 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CALL_RING = 14; 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CALL_RING_CONTINUE = 15; 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Used to intercept the carrier selection calls so that 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // we can save the values. 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_MANUAL_COMPLETE = 16; 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_AUTOMATIC_COMPLETE = 17; 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_CLIR_COMPLETE = 18; 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_REGISTERED_TO_NETWORK = 19; 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_VM_NUMBER_DONE = 20; 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Events for CDMA support 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_GET_DEVICE_IDENTITY_DONE = 21; 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_RUIM_RECORDS_LOADED = 22; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_NV_READY = 23; 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_ENHANCED_VP = 24; 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_EMERGENCY_CALLBACK_MODE_ENTER = 25; 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_EXIT_EMERGENCY_CALLBACK_RESPONSE = 26; 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED = 27; 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // other 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_SET_NETWORK_AUTOMATIC = 28; 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_NEW_ICC_SMS = 29; 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final int EVENT_ICC_RECORD_EVENTS = 30; 119e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected static final int EVENT_ICC_CHANGED = 31; 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 */ 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CommandsInterface mCM; 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mDnsCheckDisabled; 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public DataConnectionTracker mDataConnectionTracker; 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 public SMSDispatcher mSMS; 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set a system property, unless we're in unit test mode 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setSystemProperty(String property, String value) { 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if(getUnitTestMode()) { 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SystemProperties.set(property, value); 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mPreciseCallStateRegistrants 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mNewRingingConnectionRegistrants 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mIncomingRingRegistrants 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mDisconnectRegistrants 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mServiceStateRegistrants 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mMmiCompleteRegistrants 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mMmiRegistrants 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mUnknownConnectionRegistrants 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final RegistrantList mSuppServiceFailedRegistrants 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new RegistrantList(); 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected Looper mLooper; /* to insure registrants are in correct thread*/ 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected final Context mContext; 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * PhoneNotifier is an abstraction for all system-wide 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * state change notification. DefaultPhoneNotifier is 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * used here unless running we're inside a unit test. 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected PhoneNotifier mNotifier; 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected SimulatedRadioControl mSimulatedRadioControl; 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean mUnitTestMode; 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Constructs a PhoneBase in normal (non-unit test) mode. 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param notifier An instance of DefaultPhoneNotifier, 202ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param context Context object from hosting application 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unless unit testing. 204ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param ci the CommandsInterface 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected PhoneBase(PhoneNotifier notifier, Context context, CommandsInterface ci) { 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this(notifier, context, ci, false); 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Constructs a PhoneBase in normal (non-unit test) mode. 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param notifier An instance of DefaultPhoneNotifier, 214ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param context Context object from hosting application 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unless unit testing. 216ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @param ci is CommandsInterface 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param unitTestMode when true, prevents notifications 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * of state change events 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected PhoneBase(PhoneNotifier notifier, Context context, CommandsInterface ci, 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean unitTestMode) { 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.mNotifier = notifier; 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville this.mContext = context; 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLooper = Looper.myLooper(); 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM = ci; 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setPropertiesByCarrier(); 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville setUnitTestMode(unitTestMode); 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDnsCheckDisabled = sp.getBoolean(DNS_SERVER_CHECK_DISABLED_KEY, false); 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setOnCallRing(this, EVENT_CALL_RING, null); 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* "Voice capable" means that this device supports circuit-switched 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * (i.e. voice) phone calls over the telephony network, and is allowed 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to display the in-call UI while a cellular voice call is active. 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * This will be false on "data only" devices which can't make voice 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * calls and don't support any in-call UI. 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsVoiceCapable = mContext.getResources().getBoolean( 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville com.android.internal.R.bool.config_voice_capable); 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Some RIL's don't always send RIL_UNSOL_CALL_RING so it needs 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to be generated locally. Ideally all ring tones should be loops 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * and this wouldn't be necessary. But to minimize changes to upper 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * layers it is requested that it be generated by lower layers. 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * By default old phones won't have the property set but do generate 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the RIL_UNSOL_CALL_RING so the default if there is no property is 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * true. 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDoesRilSendMultipleCallRing = SystemProperties.getBoolean( 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_RIL_SENDS_MULTIPLE_CALL_RING, true); 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing); 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCallRingDelay = SystemProperties.getInt( 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_CALL_RING_DELAY, 3000); 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "mCallRingDelay=" + mCallRingDelay); 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Initialize device storage and outgoing SMS usage monitors for SMSDispatchers. 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor = new SmsStorageMonitor(this); 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor = new SmsUsageMonitor(context); 265e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccController = UiccController.getInstance(); 266e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null); 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dispose() { 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville synchronized(PhoneProxy.lockForRadioTechnologyChange) { 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unSetOnCallRing(this); 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Must cleanup all connectionS and needs to use sendMessage! 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDataConnectionTracker.cleanUpAllConnections(null); 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIsTheCurrentActivePhone = false; 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Dispose the SMS usage and storage monitors 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor.dispose(); 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor.dispose(); 278e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController.unregisterForIccChanged(this); 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void removeReferences() { 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsStorageMonitor = null; 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSmsUsageMonitor = null; 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSMS = null; 286e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mIccRecords.set(null); 287e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka mUiccApplication.set(null); 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDataConnectionTracker = null; 289e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka mUiccController = null; 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * When overridden the derived class needs to call 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * super.handleMessage(msg) so this method has a 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a chance to process the message. 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param msg 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void handleMessage(Message msg) { 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar; 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch(msg.what) { 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_CALL_RING: 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "Event EVENT_CALL_RING Received state=" + getState()); 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ar = (AsyncResult)msg.obj; 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ar.exception == null) { 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.State state = getState(); 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((!mDoesRilSendMultipleCallRing) 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville && ((state == PhoneConstants.State.RINGING) || 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (state == PhoneConstants.State.IDLE))) { 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCallRingContinueToken += 1; 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendIncomingCallRingNotification(mCallRingContinueToken); 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyIncomingRing(); 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case EVENT_CALL_RING_CONTINUE: 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "Event EVENT_CALL_RING_CONTINUE Received stat=" + getState()); 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (getState() == PhoneConstants.State.RINGING) { 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendIncomingCallRingNotification(msg.arg1); 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 327e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka case EVENT_ICC_CHANGED: 328e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka onUpdateIccAvailability(); 329e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka break; 330e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new RuntimeException("unexpected event not handled"); 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Context getContext() { 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mContext; 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 341e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka // Will be called when icc changed 342e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected abstract void onUpdateIccAvailability(); 343e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Disables the DNS check (i.e., allows "0.0.0.0"). 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Useful for lab testing environment. 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param b true disables the check, false enables. 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void disableDnsCheck(boolean b) { 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDnsCheckDisabled = b; 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences.Editor editor = sp.edit(); 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.putBoolean(DNS_SERVER_CHECK_DISABLED_KEY, b); 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville editor.apply(); 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if the DNS check is currently disabled. 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDnsCheckDisabled() { 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDnsCheckDisabled; 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForPreciseCallStateChanged(Handler h, int what, Object obj) { 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.addUnique(h, what, obj); 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForPreciseCallStateChanged(Handler h) { 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.remove(h); 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyPreciseCallStateChangedP() { 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, this, null); 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPreciseCallStateRegistrants.notifyRegistrants(ar); 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForUnknownConnection(Handler h, int what, Object obj) { 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.addUnique(h, what, obj); 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForUnknownConnection(Handler h) { 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.remove(h); 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForNewRingingConnection( 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.addUnique(h, what, obj); 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForNewRingingConnection(Handler h) { 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.remove(h); 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj){ 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForInCallVoicePrivacyOn(h,what,obj); 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForInCallVoicePrivacyOn(Handler h){ 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForInCallVoicePrivacyOn(h); 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj){ 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForInCallVoicePrivacyOff(h,what,obj); 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForInCallVoicePrivacyOff(Handler h){ 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForInCallVoicePrivacyOff(h); 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForIncomingRing( 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.addUnique(h, what, obj); 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForIncomingRing(Handler h) { 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.remove(h); 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForDisconnect(Handler h, int what, Object obj) { 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.addUnique(h, what, obj); 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForDisconnect(Handler h) { 4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.remove(h); 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSuppServiceFailed(Handler h, int what, Object obj) { 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSuppServiceFailedRegistrants.addUnique(h, what, obj); 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSuppServiceFailed(Handler h) { 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSuppServiceFailedRegistrants.remove(h); 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForMmiInitiate(Handler h, int what, Object obj) { 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiRegistrants.addUnique(h, what, obj); 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForMmiInitiate(Handler h) { 4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiRegistrants.remove(h); 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForMmiComplete(Handler h, int what, Object obj) { 4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiCompleteRegistrants.addUnique(h, what, obj); 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForMmiComplete(Handler h) { 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMmiCompleteRegistrants.remove(h); 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Method to retrieve the saved operator id from the Shared Preferences 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private String getSavedNetworkSelection() { 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // open the shared preferences and search with our key. 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sp.getString(NETWORK_SELECTION_KEY, ""); 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Method to restore the previously saved operator id, or reset to 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * automatic selection, all depending upon the value in the shared 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * preferences. 5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void restoreSavedNetworkSelection(Message response) { 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // retrieve the operator id 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String networkSelection = getSavedNetworkSelection(); 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set to auto if the id is empty, otherwise select the network. 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (TextUtils.isEmpty(networkSelection)) { 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setNetworkSelectionModeAutomatic(response); 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setNetworkSelectionModeManual(networkSelection, response); 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setUnitTestMode(boolean f) { 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnitTestMode = f; 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getUnitTestMode() { 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mUnitTestMode; 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * To be invoked when a voice call Connection disconnects. 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyDisconnectP(Connection cn) { 5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, cn, null); 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.notifyRegistrants(ar); 5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForServiceStateChanged( 5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville checkCorrectThread(h); 5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.add(h, what, obj); 5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForServiceStateChanged(Handler h) { 5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.remove(h); 5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForRingbackTone(Handler h, int what, Object obj) { 5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForRingbackTone(h,what,obj); 5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForRingbackTone(Handler h) { 5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForRingbackTone(h); 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForResendIncallMute(Handler h, int what, Object obj) { 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForResendIncallMute(h,what,obj); 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForResendIncallMute(Handler h) { 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForResendIncallMute(h); 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setEchoSuppressionEnabled(boolean enabled) { 5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // no need for regular phone 5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyServiceStateChangedP(ServiceState ss) { 5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, ss, null); 5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceStateRegistrants.notifyRegistrants(ar); 5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyServiceState(this); 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Inherited documentation suffices. 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SimulatedRadioControl getSimulatedRadioControl() { 5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSimulatedRadioControl; 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Verifies the current thread is the same as the thread originally 5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * used in the initialization of this instance. Throws RuntimeException 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * if not. 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @exception RuntimeException if the current thread is not 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the thread that originally obtained this PhoneBase instance. 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void checkCorrectThread(Handler h) { 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (h.getLooper() != mLooper) { 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new RuntimeException( 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "com.android.internal.telephony.Phone must be used from within one thread"); 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the properties by matching the carrier string in 6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a string-array resource 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void setPropertiesByCarrier() { 6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String carrier = SystemProperties.get("ro.carrier"); 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (null == carrier || 0 == carrier.length() || "unknown".equals(carrier)) { 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CharSequence[] carrierLocales = mContext. 6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville getResources().getTextArray(R.array.carrier_properties); 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0; i < carrierLocales.length; i+=3) { 6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String c = carrierLocales[i].toString(); 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (carrier.equals(c)) { 6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String l = carrierLocales[i+1].toString(); 6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String language = l.substring(0, 2); 6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String country = ""; 6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (l.length() >=5) { 6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville country = l.substring(3, 5); 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville MccTable.setSystemLocale(mContext, language, country); 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!country.isEmpty()) { 6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 636b8d0e5993929ca9ecd29f406ae5f39a3e450e89bJeff Brown Settings.Global.getInt(mContext.getContentResolver(), 637b8d0e5993929ca9ecd29f406ae5f39a3e450e89bJeff Brown Settings.Global.WIFI_COUNTRY_CODE); 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (Settings.SettingNotFoundException e) { 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // note this is not persisting 6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville WifiManager wM = (WifiManager) 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mContext.getSystemService(Context.WIFI_SERVICE); 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville wM.setCountryCode(country, false); 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get state 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract PhoneConstants.State getState(); 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the IccFileHandler of the Phone instance 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccFileHandler getIccFileHandler(){ 659e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka UiccCardApplication uiccApplication = mUiccApplication.get(); 660e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka if (uiccApplication == null) return null; 661e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka return uiccApplication.getIccFileHandler(); 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* 6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the Handler of the Phone instance 6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Handler getHandler() { 6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return this; 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Retrieves the ServiceStateTracker of the phone instance. 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public ServiceStateTracker getServiceStateTracker() { 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get call tracker 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CallTracker getCallTracker() { 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 685ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka public AppType getCurrentUiccAppType() { 686ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka UiccCardApplication currentApp = mUiccApplication.get(); 687ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka if (currentApp != null) { 688ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka return currentApp.getType(); 689ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka } 690ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka return AppType.APPTYPE_UNKNOWN; 691ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka } 692ba06d1becedde6ee94229154b2e493d6d4a3ad53Alex Yakavenka 6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccCard getIccCard() { 695e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka return null; 696e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka //throw new Exception("getIccCard Shouldn't be called from PhoneBase"); 6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getIccSerialNumber() { 701e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 702e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.iccid : ""; 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getIccRecordsLoaded() { 707e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 708e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getRecordsLoaded() : false; 7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 711ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville /** 712ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @return all available cell information or null if none. 713ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville */ 714ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville @Override 715ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public List<CellInfo> getAllCellInfo() { 716ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return getServiceStateTracker().getAllCellInfo(); 717ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 718ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getMessageWaitingIndicator() { 721e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 722e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getVoiceMessageWaiting() : false; 7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getCallForwardingIndicator() { 727e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 728e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getVoiceCallForwardingFlag() : false; 7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Query the status of the CDMA roaming preference 7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryCdmaRoamingPreference(Message response) { 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.queryCdmaRoamingPreference(response); 7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 739ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * Get the signal strength 740ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville */ 741ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville @Override 742ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public SignalStrength getSignalStrength() { 743ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville ServiceStateTracker sst = getServiceStateTracker(); 744ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville if (sst == null) { 745ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return new SignalStrength(); 746ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } else { 747ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return sst.getSignalStrength(); 748ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 749ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 750ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 751ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville /** 7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the status of the CDMA roaming preference 7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) { 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setCdmaRoamingPreference(cdmaRoamingType, response); 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the status of the CDMA subscription mode 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCdmaSubscription(int cdmaSubscriptionType, Message response) { 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setCdmaSubscriptionSource(cdmaSubscriptionType, response); 7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Set the preferred Network Type: Global, CDMA only or GSM/UMTS only 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setPreferredNetworkType(int networkType, Message response) { 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setPreferredNetworkType(networkType, response); 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getPreferredNetworkType(Message response) { 7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.getPreferredNetworkType(response); 7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getSmscAddress(Message result) { 7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.getSmscAddress(result); 7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setSmscAddress(String address, Message result) { 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setSmscAddress(address, result); 7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setTTYMode(int ttyMode, Message onComplete) { 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setTTYMode(ttyMode, onComplete); 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryTTYMode(Message onComplete) { 7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.queryTTYMode(onComplete); 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void enableEnhancedVoicePrivacy(boolean enable, Message onComplete) { 7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("enableEnhancedVoicePrivacy"); 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getEnhancedVoicePrivacy(Message onComplete) { 7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getEnhancedVoicePrivacy"); 8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setBandMode(int bandMode, Message response) { 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.setBandMode(bandMode, response); 8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void queryAvailableBandMode(Message response) { 8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.queryAvailableBandMode(response); 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void invokeOemRilRequestRaw(byte[] data, Message response) { 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.invokeOemRilRequestRaw(data, response); 8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void invokeOemRilRequestStrings(String[] strings, Message response) { 8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.invokeOemRilRequestStrings(strings, response); 8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataActivity() { 8190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataActivity(this); 8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyMessageWaitingIndicator() { 8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Do not notify voice mail waiting if device doesn't support voice 8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 8250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function is added to send the notification to DefaultPhoneNotifier. 8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyMessageWaitingChanged(this); 8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason, String apnType, 8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.DataState state) { 8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, state); 8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason, String apnType) { 8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType)); 8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnection(String reason) { 8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String types[] = getActiveApnTypes(); 8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (String apnType : types) { 8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnection(this, reason, apnType, getDataConnectionState(apnType)); 8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyOtaspChanged(int otaspMode) { 8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyOtaspChanged(this, otaspMode); 8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 851ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public void notifySignalStrength() { 852ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville mNotifier.notifySignalStrength(this); 853ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 854ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 855ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public void notifyCellInfo(List<CellInfo> cellInfo) { 856ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville mNotifier.notifyCellInfo(this, cellInfo); 857ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 858ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if a mobile originating emergency call is active 8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEmergencyCall() { 8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if we are in the emergency call back mode. This is a period where 8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the phone should be using as little power as possible and be ready to receive an 8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * incoming call from the emergency operator. 8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isInEcm() { 8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract String getPhoneName(); 8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract int getPhoneType(); 8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** @hide */ 8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getVoiceMessageCount(){ 8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return 0; 8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI icon index to display 8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconIndex() { 8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriIconIndex"); 8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return -1; 8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI icon mode, 8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 0 - ON 8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1 - FLASHING 8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getCdmaEriIconMode() { 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriIconMode"); 8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return -1; 9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns the CDMA ERI text, 9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaEriText() { 9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaEriText"); 9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "GSM nw, no ERI"; 9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaMin() { 9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaMin"); 9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isMinInfoReady() { 9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("isMinInfoReady"); 9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getCdmaPrlVersion(){ 9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("getCdmaPrlVersion"); 9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void sendBurstDtmf(String dtmfString, int on, int off, Message onComplete) { 9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("sendBurstDtmf"); 9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void exitEmergencyCallbackMode() { 9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("exitEmergencyCallbackMode"); 9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj) { 9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForCdmaOtaStatusChange"); 9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCdmaOtaStatusChange(Handler h) { 9440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForCdmaOtaStatusChange"); 9460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSubscriptionInfoReady(Handler h, int what, Object obj) { 9490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForSubscriptionInfoReady"); 9510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSubscriptionInfoReady(Handler h) { 9540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForSubscriptionInfoReady"); 9560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 9590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Returns true if OTA Service Provisioning needs to be performed. 9600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If not overridden return false. 9610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean needsOtaServiceProvisioning() { 9630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 9640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 9670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return true if number is an OTASP number. 9680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If not overridden return false. 9690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 9700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isOtaSpNumber(String dialStr) { 9710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 9720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForCallWaiting(Handler h, int what, Object obj){ 9750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForCallWaiting"); 9770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForCallWaiting(Handler h){ 9800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForCallWaiting"); 9820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForEcmTimerReset(Handler h, int what, Object obj) { 9850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("registerForEcmTimerReset"); 9870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForEcmTimerReset(Handler h) { 9900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 9910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unregisterForEcmTimerReset"); 9920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSignalInfo(Handler h, int what, Object obj) { 9950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForSignalInfo(h, what, obj); 9960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSignalInfo(Handler h) { 9990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForSignalInfo(h); 10000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForDisplayInfo(Handler h, int what, Object obj) { 10030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForDisplayInfo(h, what, obj); 10040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForDisplayInfo(Handler h) { 10070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForDisplayInfo(h); 10080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForNumberInfo(Handler h, int what, Object obj) { 10110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForNumberInfo(h, what, obj); 10120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForNumberInfo(Handler h) { 10150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForNumberInfo(h); 10160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForRedirectedNumberInfo(Handler h, int what, Object obj) { 10190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForRedirectedNumberInfo(h, what, obj); 10200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForRedirectedNumberInfo(Handler h) { 10230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForRedirectedNumberInfo(h); 10240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForLineControlInfo(Handler h, int what, Object obj) { 10270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForLineControlInfo( h, what, obj); 10280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForLineControlInfo(Handler h) { 10310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForLineControlInfo(h); 10320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerFoT53ClirlInfo(Handler h, int what, Object obj) { 10350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerFoT53ClirlInfo(h, what, obj); 10360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForT53ClirInfo(Handler h) { 10390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForT53ClirInfo(h); 10400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForT53AudioControlInfo(Handler h, int what, Object obj) { 10430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.registerForT53AudioControlInfo( h, what, obj); 10440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForT53AudioControlInfo(Handler h) { 10470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCM.unregisterForT53AudioControlInfo(h); 10480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setOnEcbModeExitResponse(Handler h, int what, Object obj){ 10510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("setOnEcbModeExitResponse"); 10530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unsetOnEcbModeExitResponse(Handler h){ 10560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class CDMAPhone. Not implemented in GSMPhone. 10570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedCdmaMethodCall("unsetOnEcbModeExitResponse"); 10580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String[] getActiveApnTypes() { 10610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDataConnectionTracker.getActiveApnTypes(); 10620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getActiveApnHost(String apnType) { 10650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDataConnectionTracker.getActiveApnString(apnType); 10660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public LinkProperties getLinkProperties(String apnType) { 10690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDataConnectionTracker.getLinkProperties(apnType); 10700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public LinkCapabilities getLinkCapabilities(String apnType) { 10730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDataConnectionTracker.getLinkCapabilities(apnType); 10740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int enableApnType(String type) { 10770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDataConnectionTracker.enableApnType(type); 10780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int disableApnType(String type) { 10810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mDataConnectionTracker.disableApnType(type); 10820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDataConnectivityPossible() { 10850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return isDataConnectivityPossible(PhoneConstants.APN_TYPE_DEFAULT); 10860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDataConnectivityPossible(String apnType) { 10890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ((mDataConnectionTracker != null) && 10900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (mDataConnectionTracker.isDataPossible(apnType))); 10910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 10920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 10930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 10940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify registrants of a new ringing Connection. 10950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Subclasses of Phone probably want to replace this with a 10960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * version scoped to their packages 10970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 10980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void notifyNewRingingConnectionP(Connection cn) { 10990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 11000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 11010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, cn, null); 11020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNewRingingConnectionRegistrants.notifyRegistrants(ar); 11030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify registrants of a RING event. 11070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void notifyIncomingRing() { 11090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!mIsVoiceCapable) 11100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 11110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult ar = new AsyncResult(null, this, null); 11120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIncomingRingRegistrants.notifyRegistrants(ar); 11130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Send the incoming call Ring notification if conditions are right. 11170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void sendIncomingCallRingNotification(int token) { 11190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mIsVoiceCapable && !mDoesRilSendMultipleCallRing && 11200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville (token == mCallRingContinueToken)) { 11210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "Sending notifyIncomingRing"); 11220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyIncomingRing(); 11230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendMessageDelayed( 11240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville obtainMessage(EVENT_CALL_RING_CONTINUE, token, 0), mCallRingDelay); 11250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 11260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, "Ignoring ring notification request," 11270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing 11280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " token=" + token 11290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mCallRingContinueToken=" + mCallRingContinueToken 11300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + " mIsVoiceCapable=" + mIsVoiceCapable); 11310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isCspPlmnEnabled() { 11350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class GSMPhone. 11360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Not implemented in CDMAPhone. 11370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedGsmMethodCall("isCspPlmnEnabled"); 11380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 11390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IsimRecords getIsimRecords() { 11420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "getIsimRecords() is only supported on LTE devices"); 11430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 11440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void requestIsimAuthentication(String nonce, Message result) { 11470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "requestIsimAuthentication() is only supported on LTE devices"); 11480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getMsisdn() { 11510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville logUnexpectedGsmMethodCall("getMsisdn"); 11520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 11530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Common error logger method for unexpected calls to CDMA-only methods. 11570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void logUnexpectedCdmaMethodCall(String name) 11590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville { 11600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " + 11610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "called, CDMAPhone inactive."); 11620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.DataState getDataConnectionState() { 11650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return getDataConnectionState(PhoneConstants.APN_TYPE_DEFAULT); 11660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Common error logger method for unexpected calls to GSM/WCDMA-only methods. 11700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static void logUnexpectedGsmMethodCall(String name) { 11720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Error! " + name + "() in PhoneBase should not be " + 11730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "called, GSMPhone inactive."); 11740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Called by SimRecords which is constructed with a PhoneBase instead of a GSMPhone. 11770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyCallForwardingIndicator() { 11780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This function should be overridden by the class GSMPhone. Not implemented in CDMAPhone. 11790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Error! This function should never be executed, inactive CDMAPhone."); 11800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyDataConnectionFailed(String reason, String apnType) { 11830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyDataConnectionFailed(this, reason, apnType); 11840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@inheritDoc} 11880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 11890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 11900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getLteOnCdmaMode() { 11910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mCM.getLteOnCdmaMode(); 11920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 11930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 11940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 11950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Sets the SIM voice message waiting indicator records. 11960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param line GSM Subscriber Profile Number, one-based. Only '1' is supported 11970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param countWaiting The number of messages waiting, if known. Use 11980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * -1 to indicate that an unknown number of 11990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * messages are waiting 12000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 12010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 12020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setVoiceMessageWaiting(int line, int countWaiting) { 1203e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1204e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka if (r != null) { 1205e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka r.setVoiceMessageWaiting(line, countWaiting); 1206e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 12070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 12100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Gets the USIM service table from the UICC, if present and available. 12110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return an interface to the UsimServiceTable record, or null if not available 12120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 12130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 12140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public UsimServiceTable getUsimServiceTable() { 1215e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka IccRecords r = mIccRecords.get(); 1216e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka return (r != null) ? r.getUsimServiceTable() : null; 12170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 12190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 12200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println("PhoneBase:"); 12210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCM=" + mCM); 12220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mDnsCheckDisabled=" + mDnsCheckDisabled); 12230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mDataConnectionTracker=" + mDataConnectionTracker); 12240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mDoesRilSendMultipleCallRing=" + mDoesRilSendMultipleCallRing); 12250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCallRingContinueToken=" + mCallRingContinueToken); 12260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mCallRingDelay=" + mCallRingDelay); 12270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mIsTheCurrentActivePhone=" + mIsTheCurrentActivePhone); 12280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mIsVoiceCapable=" + mIsVoiceCapable); 1229e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka pw.println(" mIccRecords=" + mIccRecords.get()); 1230e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka pw.println(" mUiccApplication=" + mUiccApplication.get()); 12310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSmsStorageMonitor=" + mSmsStorageMonitor); 12320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSmsUsageMonitor=" + mSmsUsageMonitor); 12330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSMS=" + mSMS); 12340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.flush(); 12350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mLooper=" + mLooper); 12360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mContext=" + mContext); 12370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mNotifier=" + mNotifier); 12380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mSimulatedRadioControl=" + mSimulatedRadioControl); 12390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" mUnitTestMode=" + mUnitTestMode); 12400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isDnsCheckDisabled()=" + isDnsCheckDisabled()); 12410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getUnitTestMode()=" + getUnitTestMode()); 12420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getState()=" + getState()); 12430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getIccSerialNumber()=" + getIccSerialNumber()); 12440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getIccRecordsLoaded()=" + getIccRecordsLoaded()); 12450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getMessageWaitingIndicator()=" + getMessageWaitingIndicator()); 12460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getCallForwardingIndicator()=" + getCallForwardingIndicator()); 12470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isInEmergencyCall()=" + isInEmergencyCall()); 12480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.flush(); 12490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isInEcm()=" + isInEcm()); 12500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getPhoneName()=" + getPhoneName()); 12510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getPhoneType()=" + getPhoneType()); 12520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getVoiceMessageCount()=" + getVoiceMessageCount()); 12530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" getActiveApnTypes()=" + getActiveApnTypes()); 12540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" isDataConnectivityPossible()=" + isDataConnectivityPossible()); 12550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville pw.println(" needsOtaServiceProvisioning=" + needsOtaServiceProvisioning()); 12560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 12570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 1258