10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2010 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.sip; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.content.Context; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.LinkProperties; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.AsyncResult; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Registrant; 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.RegistrantList; 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.SystemProperties; 27ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Savilleimport android.telephony.CellInfo; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.CellLocation; 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.ServiceState; 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.telephony.SignalStrength; 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.util.Log; 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Call; 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CallStateException; 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Connection; 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.DataConnection; 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccCard; 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccFileHandler; 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccSmsInterfaceManager; 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.MmiCode; 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.OperatorInfo; 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Phone; 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneBase; 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneConstants; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneNotifier; 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.PhoneSubInfo; 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.TelephonyProperties; 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.UUSInfo; 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList; 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.List; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleabstract class SipPhoneBase extends PhoneBase { 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static final String LOG_TAG = "SipPhone"; 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private RegistrantList mRingbackRegistrants = new RegistrantList(); 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private PhoneConstants.State state = PhoneConstants.State.IDLE; 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SipPhoneBase(Context context, PhoneNotifier notifier) { 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super(notifier, context, new SipCommandInterface(context), false); 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract Call getForegroundCall(); 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract Call getBackgroundCall(); 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public abstract Call getRingingCall(); 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public Connection dial(String dialString, UUSInfo uusInfo) 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throws CallStateException { 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // ignore UUSInfo 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return dial(dialString); 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void migrateFrom(SipPhoneBase from) { 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mRingbackRegistrants, from.mRingbackRegistrants); 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mPreciseCallStateRegistrants, from.mPreciseCallStateRegistrants); 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mNewRingingConnectionRegistrants, from.mNewRingingConnectionRegistrants); 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mIncomingRingRegistrants, from.mIncomingRingRegistrants); 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mDisconnectRegistrants, from.mDisconnectRegistrants); 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mServiceStateRegistrants, from.mServiceStateRegistrants); 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mMmiCompleteRegistrants, from.mMmiCompleteRegistrants); 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mMmiRegistrants, from.mMmiRegistrants); 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mUnknownConnectionRegistrants, from.mUnknownConnectionRegistrants); 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville migrate(mSuppServiceFailedRegistrants, from.mSuppServiceFailedRegistrants); 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static void migrate(RegistrantList to, RegistrantList from) { 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville from.removeCleared(); 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (int i = 0, n = from.size(); i < n; i++) { 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville to.add((Registrant) from.get(i)); 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForRingbackTone(Handler h, int what, Object obj) { 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRingbackRegistrants.addUnique(h, what, obj); 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForRingbackTone(Handler h) { 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRingbackRegistrants.remove(h); 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void startRingbackTone() { 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult result = new AsyncResult(null, Boolean.TRUE, null); 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRingbackRegistrants.notifyRegistrants(result); 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected void stopRingbackTone() { 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult result = new AsyncResult(null, Boolean.FALSE, null); 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mRingbackRegistrants.notifyRegistrants(result); 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public ServiceState getServiceState() { 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // FIXME: we may need to provide this when data connectivity is lost 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // or when server is down 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ServiceState s = new ServiceState(); 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville s.setState(ServiceState.STATE_IN_SERVICE); 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return s; 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 124ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville /** 125ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville * @return all available cell information or null if none. 126ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville */ 127ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville @Override 128ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville public List<CellInfo> getAllCellInfo() { 129ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville return getServiceStateTracker().getAllCellInfo(); 130ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville } 131ef1d4bff9bbf7d967dbcace73f08910e14e367d0Wink Saville 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public CellLocation getCellLocation() { 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.State getState() { 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return state; 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getPhoneType() { 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.PHONE_TYPE_SIP; 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SignalStrength getSignalStrength() { 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new SignalStrength(); 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getMessageWaitingIndicator() { 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getCallForwardingIndicator() { 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public List<? extends MmiCode> getPendingMmiCodes() { 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new ArrayList<MmiCode>(0); 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.DataState getDataConnectionState() { 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.DataState.DISCONNECTED; 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneConstants.DataState getDataConnectionState(String apnType) { 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return PhoneConstants.DataState.DISCONNECTED; 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public DataActivityState getDataActivityState() { 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return DataActivityState.NONE; 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify any interested party of a Phone state change {@link Phone.State} 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyPhoneStateChanged() { 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyPhoneState(this); 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyPreciseCallStateChanged() { 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /* we'd love it if this was package-scoped*/ 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.notifyPreciseCallStateChangedP(); 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyNewRingingConnection(Connection c) { 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.notifyNewRingingConnectionP(c); 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyDisconnect(Connection cn) { 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mDisconnectRegistrants.notifyResult(cn); 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyUnknownConnection() { 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mUnknownConnectionRegistrants.notifyResult(this); 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifySuppServiceFailed(SuppService code) { 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSuppServiceFailedRegistrants.notifyResult(code); 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void notifyServiceStateChanged(ServiceState ss) { 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville super.notifyServiceStateChangedP(ss); 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void notifyCallForwardingIndicator() { 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mNotifier.notifyCallForwardingChanged(this); 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean canDial() { 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int serviceState = getServiceState().getState(); 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.v(LOG_TAG, "canDial(): serviceState = " + serviceState); 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (serviceState == ServiceState.STATE_POWER_OFF) return false; 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String disableCall = SystemProperties.get( 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TelephonyProperties.PROPERTY_DISABLE_CALL, "false"); 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.v(LOG_TAG, "canDial(): disableCall = " + disableCall); 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (disableCall.equals("true")) return false; 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.v(LOG_TAG, "canDial(): ringingCall: " + getRingingCall().getState()); 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.v(LOG_TAG, "canDial(): foregndCall: " + getForegroundCall().getState()); 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.v(LOG_TAG, "canDial(): backgndCall: " + getBackgroundCall().getState()); 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return !getRingingCall().isRinging() 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville && (!getForegroundCall().getState().isAlive() 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville || !getBackgroundCall().getState().isAlive()); 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean handleInCallMmiCommands(String dialString) 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throws CallStateException { 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean isInCall() { 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Call.State foregroundCallState = getForegroundCall().getState(); 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Call.State backgroundCallState = getBackgroundCall().getState(); 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Call.State ringingCallState = getRingingCall().getState(); 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return (foregroundCallState.isAlive() || backgroundCallState.isAlive() 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville || ringingCallState.isAlive()); 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean handlePinMmi(String dialString) { 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void sendUssdResponse(String ussdMessge) { 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void registerForSuppServiceNotification( 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Handler h, int what, Object obj) { 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void unregisterForSuppServiceNotification(Handler h) { 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setRadioPower(boolean power) { 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getVoiceMailNumber() { 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getVoiceMailAlphaTag() { 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getDeviceId() { 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getDeviceSvn() { 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getImei() { 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getEsn() { 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "[SipPhone] getEsn() is a CDMA method"); 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "0"; 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getMeid() { 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "[SipPhone] getMeid() is a CDMA method"); 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "0"; 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getSubscriberId() { 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getIccSerialNumber() { 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getLine1Number() { 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getLine1AlphaTag() { 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setLine1Number(String alphaTag, String number, Message onComplete) { 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // FIXME: what to reply for SIP? 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(onComplete, null, null); 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onComplete.sendToTarget(); 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setVoiceMailNumber(String alphaTag, String voiceMailNumber, 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message onComplete) { 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // FIXME: what to reply for SIP? 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(onComplete, null, null); 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onComplete.sendToTarget(); 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCallForwardingOption(int commandInterfaceCFAction, 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int commandInterfaceCFReason, String dialingNumber, 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int timerSeconds, Message onComplete) { 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getOutgoingCallerIdDisplay(Message onComplete) { 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // FIXME: what to reply? 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(onComplete, null, null); 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onComplete.sendToTarget(); 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message onComplete) { 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // FIXME: what's this for SIP? 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(onComplete, null, null); 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onComplete.sendToTarget(); 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getCallWaiting(Message onComplete) { 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AsyncResult.forMessage(onComplete, null, null); 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville onComplete.sendToTarget(); 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCallWaiting(boolean enable, Message onComplete) { 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "call waiting not supported"); 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getIccRecordsLoaded() { 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccCard getIccCard() { 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getAvailableNetworks(Message response) { 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setNetworkSelectionModeAutomatic(Message response) { 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void selectNetworkManually( 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville OperatorInfo network, 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Message response) { 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getNeighboringCids(Message response) { 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setOnPostDialCharacter(Handler h, int what, Object obj) { 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getDataCallList(Message response) { 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public List<DataConnection> getCurrentDataConnectionList () { 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void updateServiceLocation() { 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void enableLocationUpdates() { 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void disableLocationUpdates() { 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean getDataRoamingEnabled() { 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setDataRoamingEnabled(boolean enable) { 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean enableDataConnectivity() { 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean disableDataConnectivity() { 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isDataConnectivityPossible() { 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean updateCurrentCarrierInProvider() { 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void saveClirSetting(int commandInterfaceCLIRMode) { 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public PhoneSubInfo getPhoneSubInfo(){ 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccSmsInterfaceManager getIccSmsInterfaceManager(){ 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager(){ 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public IccFileHandler getIccFileHandler(){ 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void activateCellBroadcastSms(int activate, Message response) { 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Error! This functionality is not implemented for SIP."); 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void getCellBroadcastSmsConfig(Message response) { 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Error! This functionality is not implemented for SIP."); 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response){ 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.e(LOG_TAG, "Error! This functionality is not implemented for SIP."); 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //@Override 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean needsOtaServiceProvisioning() { 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // FIXME: what's this for SIP? 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville //@Override 4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public LinkProperties getLinkProperties(String apnType) { 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // FIXME: what's this for SIP? 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void updatePhoneState() { 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville PhoneConstants.State oldState = state; 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (getRingingCall().isRinging()) { 4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville state = PhoneConstants.State.RINGING; 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else if (getForegroundCall().isIdle() 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville && getBackgroundCall().isIdle()) { 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville state = PhoneConstants.State.IDLE; 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville state = PhoneConstants.State.OFFHOOK; 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (state != oldState) { 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Log.d(LOG_TAG, " ^^^ new phone state: " + state); 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville notifyPhoneStateChanged(); 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 474e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka 475e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka @Override 476e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka protected void onUpdateIccAvailability() { 477e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka } 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 479