1ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang/* 2ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * Copyright (C) 2010 The Android Open Source Project 3ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * 4ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * you may not use this file except in compliance with the License. 6ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * You may obtain a copy of the License at 7ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * 8ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * http://www.apache.org/licenses/LICENSE-2.0 9ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * 10ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * Unless required by applicable law or agreed to in writing, software 11ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS, 12ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * See the License for the specific language governing permissions and 14ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * limitations under the License. 15ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang */ 16ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 17ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangpackage com.android.internal.telephony.sip; 18ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 19ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.content.Context; 20ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.os.AsyncResult; 21ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.os.Handler; 22ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.os.Message; 23ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.os.Registrant; 24ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.os.RegistrantList; 25ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.os.SystemProperties; 26ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.telephony.CellLocation; 27ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.telephony.ServiceState; 28ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.telephony.SignalStrength; 29ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport android.util.Log; 30ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 31ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.Call; 32ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.CallStateException; 33ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.Connection; 34ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.DataConnection; 35ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.IccCard; 36ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.IccFileHandler; 37ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.IccPhoneBookInterfaceManager; 38ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.IccSmsInterfaceManager; 39ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.MmiCode; 40ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.Phone; 41ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.PhoneBase; 42ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.PhoneNotifier; 43ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.PhoneSubInfo; 44ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport com.android.internal.telephony.TelephonyProperties; 45ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 46ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport java.util.ArrayList; 47ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangimport java.util.List; 48ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 49ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wangabstract class SipPhoneBase extends PhoneBase { 50306137d97f40a4f807c54a75210343c9262360d1Hung-ying Tyan private static final String LOG_TAG = "SipPhone"; 51ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 52306137d97f40a4f807c54a75210343c9262360d1Hung-ying Tyan private RegistrantList mRingbackRegistrants = new RegistrantList(); 53ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang private State state = State.IDLE; 54ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 55ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public SipPhoneBase(Context context, PhoneNotifier notifier) { 56ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang super(notifier, context, new SipCommandInterface(context), false); 57ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 58ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 59ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public abstract Call getForegroundCall(); 60ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 61ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public abstract Call getBackgroundCall(); 62ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 63ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public abstract Call getRingingCall(); 64ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 65ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void migrateFrom(SipPhoneBase from) { 66ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mRingbackRegistrants, from.mRingbackRegistrants); 67ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mPreciseCallStateRegistrants, from.mPreciseCallStateRegistrants); 68ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mNewRingingConnectionRegistrants, from.mNewRingingConnectionRegistrants); 69ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mIncomingRingRegistrants, from.mIncomingRingRegistrants); 70ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mDisconnectRegistrants, from.mDisconnectRegistrants); 71ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mServiceStateRegistrants, from.mServiceStateRegistrants); 72ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mMmiCompleteRegistrants, from.mMmiCompleteRegistrants); 73ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mMmiRegistrants, from.mMmiRegistrants); 74ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mUnknownConnectionRegistrants, from.mUnknownConnectionRegistrants); 75ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang migrate(mSuppServiceFailedRegistrants, from.mSuppServiceFailedRegistrants); 76ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 77ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 78ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang static void migrate(RegistrantList to, RegistrantList from) { 79ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang from.removeCleared(); 80ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang for (int i = 0, n = from.size(); i < n; i++) { 81ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang to.add((Registrant) from.get(i)); 82ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 83ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 84ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 85ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang @Override 86ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void registerForRingbackTone(Handler h, int what, Object obj) { 87ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mRingbackRegistrants.addUnique(h, what, obj); 88ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 89ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 90ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang @Override 91ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void unregisterForRingbackTone(Handler h) { 92ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mRingbackRegistrants.remove(h); 93ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 94ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 95ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang protected void startRingbackTone() { 96ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang AsyncResult result = new AsyncResult(null, new Boolean(true), null); 97ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mRingbackRegistrants.notifyRegistrants(result); 98ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 99ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 100ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang protected void stopRingbackTone() { 101ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang AsyncResult result = new AsyncResult(null, new Boolean(false), null); 102ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mRingbackRegistrants.notifyRegistrants(result); 103ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 104ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 105ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public ServiceState getServiceState() { 106ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang // FIXME: we may need to provide this when data connectivity is lost 107ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang // or when server is down 108ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang ServiceState s = new ServiceState(); 109ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang s.setState(ServiceState.STATE_IN_SERVICE); 110ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return s; 111ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 112ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 113ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public CellLocation getCellLocation() { 114306137d97f40a4f807c54a75210343c9262360d1Hung-ying Tyan return null; 115ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 116ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 117ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public State getState() { 118ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return state; 119ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 120ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 121ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public int getPhoneType() { 1228744f879852a74885e1c56a65cd65a28b6a5fa7aHung-ying Tyan return Phone.PHONE_TYPE_SIP; 123ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 124ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 125ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public SignalStrength getSignalStrength() { 126ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return new SignalStrength(); 127ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 128ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 129ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean getMessageWaitingIndicator() { 130ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 131ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 132ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 133ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean getCallForwardingIndicator() { 134ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 135ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 136ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 137ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public List<? extends MmiCode> getPendingMmiCodes() { 138ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return new ArrayList<MmiCode>(0); 139ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 140ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 141ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public DataState getDataConnectionState() { 142ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return DataState.DISCONNECTED; 143ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 144ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 145ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public DataState getDataConnectionState(String apnType) { 146ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return DataState.DISCONNECTED; 147ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 148ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 149ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public DataActivityState getDataActivityState() { 150ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return DataActivityState.NONE; 151ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 152ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 153ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang /** 154ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * Notify any interested party of a Phone state change {@link Phone.State} 155ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang */ 156ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void notifyPhoneStateChanged() { 157ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mNotifier.notifyPhoneState(this); 158ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 159ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 160ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang /** 161ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * Notify registrants of a change in the call state. This notifies changes in {@link Call.State} 162ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang * Use this when changes in the precise call state are needed, else use notifyPhoneStateChanged. 163ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang */ 164ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void notifyPreciseCallStateChanged() { 165ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang /* we'd love it if this was package-scoped*/ 166ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang super.notifyPreciseCallStateChangedP(); 167ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 168ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 169ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void notifyNewRingingConnection(Connection c) { 170ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang super.notifyNewRingingConnectionP(c); 171ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 172ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 173ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void notifyDisconnect(Connection cn) { 174ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mDisconnectRegistrants.notifyResult(cn); 175ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 176ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 177ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void notifyUnknownConnection() { 178ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mUnknownConnectionRegistrants.notifyResult(this); 179ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 180ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 181ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void notifySuppServiceFailed(SuppService code) { 182ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mSuppServiceFailedRegistrants.notifyResult(code); 183ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 184ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 185ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void notifyServiceStateChanged(ServiceState ss) { 186ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang super.notifyServiceStateChangedP(ss); 187ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 188ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 189ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void notifyCallForwardingIndicator() { 190ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang mNotifier.notifyCallForwardingChanged(this); 191ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 192ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 193ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean canDial() { 194ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang int serviceState = getServiceState().getState(); 195ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.v(LOG_TAG, "canDial(): serviceState = " + serviceState); 196ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang if (serviceState == ServiceState.STATE_POWER_OFF) return false; 197ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 198ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang String disableCall = SystemProperties.get( 199ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang TelephonyProperties.PROPERTY_DISABLE_CALL, "false"); 200ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.v(LOG_TAG, "canDial(): disableCall = " + disableCall); 201ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang if (disableCall.equals("true")) return false; 202ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 203ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.v(LOG_TAG, "canDial(): ringingCall: " + getRingingCall().getState()); 204ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.v(LOG_TAG, "canDial(): foregndCall: " + getForegroundCall().getState()); 205ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.v(LOG_TAG, "canDial(): backgndCall: " + getBackgroundCall().getState()); 206ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return !getRingingCall().isRinging() 207ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang && (!getForegroundCall().getState().isAlive() 208ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang || !getBackgroundCall().getState().isAlive()); 209ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 210ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 211ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean handleInCallMmiCommands(String dialString) 212ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang throws CallStateException { 213ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 214ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 215ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 216ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang boolean isInCall() { 217ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Call.State foregroundCallState = getForegroundCall().getState(); 218ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Call.State backgroundCallState = getBackgroundCall().getState(); 219ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Call.State ringingCallState = getRingingCall().getState(); 220ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 221ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return (foregroundCallState.isAlive() || backgroundCallState.isAlive() 222ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang || ringingCallState.isAlive()); 223ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 224ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 225ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean handlePinMmi(String dialString) { 226ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 227ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 228ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 229ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void sendUssdResponse(String ussdMessge) { 230ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 231ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 232ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void registerForSuppServiceNotification( 233ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Handler h, int what, Object obj) { 234ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 235ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 236ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void unregisterForSuppServiceNotification(Handler h) { 237ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 238ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 239ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setRadioPower(boolean power) { 240ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 241ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 242ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getVoiceMailNumber() { 243ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 244ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 245ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 246ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getVoiceMailAlphaTag() { 247ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 248ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 249ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 250ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getDeviceId() { 251ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 252ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 253ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 254ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getDeviceSvn() { 255ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 256ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 257ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 258ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getEsn() { 259ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.e(LOG_TAG, "[SipPhone] getEsn() is a CDMA method"); 260ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return "0"; 261ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 262ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 263ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getMeid() { 264ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.e(LOG_TAG, "[SipPhone] getMeid() is a CDMA method"); 265ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return "0"; 266ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 267ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 268ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getSubscriberId() { 269ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 270ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 271ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 272ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getIccSerialNumber() { 273ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 274ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 275ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 276ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getLine1Number() { 277ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 278ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 279ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 280ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public String getLine1AlphaTag() { 281ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 282ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 283ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 284ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setLine1Number(String alphaTag, String number, Message onComplete) { 285ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang // FIXME: what to reply for SIP? 286ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang AsyncResult.forMessage(onComplete, null, null); 287ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang onComplete.sendToTarget(); 288ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 289ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 290ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setVoiceMailNumber(String alphaTag, String voiceMailNumber, 291ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Message onComplete) { 292ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang // FIXME: what to reply for SIP? 293ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang AsyncResult.forMessage(onComplete, null, null); 294ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang onComplete.sendToTarget(); 295ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 296ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 297ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void getCallForwardingOption(int commandInterfaceCFReason, Message onComplete) { 298ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 299ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 300ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setCallForwardingOption(int commandInterfaceCFAction, 301ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang int commandInterfaceCFReason, String dialingNumber, 302ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang int timerSeconds, Message onComplete) { 303ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 304ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 305ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void getOutgoingCallerIdDisplay(Message onComplete) { 306ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang // FIXME: what to reply? 307ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang AsyncResult.forMessage(onComplete, null, null); 308ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang onComplete.sendToTarget(); 309ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 310ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 311ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setOutgoingCallerIdDisplay(int commandInterfaceCLIRMode, 312ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Message onComplete) { 313ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang // FIXME: what's this for SIP? 314ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang AsyncResult.forMessage(onComplete, null, null); 315ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang onComplete.sendToTarget(); 316ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 317ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 318ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void getCallWaiting(Message onComplete) { 319ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang AsyncResult.forMessage(onComplete, null, null); 320ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang onComplete.sendToTarget(); 321ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 322ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 323ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setCallWaiting(boolean enable, Message onComplete) { 324ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.e(LOG_TAG, "call waiting not supported"); 325ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 326ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 327ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean getIccRecordsLoaded() { 328ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 329ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 330ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 331ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public IccCard getIccCard() { 332ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 333ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 334ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 335ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void getAvailableNetworks(Message response) { 336ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 337ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 338ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setNetworkSelectionModeAutomatic(Message response) { 339ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 340ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 341ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void selectNetworkManually( 342ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang com.android.internal.telephony.gsm.NetworkInfo network, 343ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Message response) { 344ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 345ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 346ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void getNeighboringCids(Message response) { 347ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 348ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 349ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setOnPostDialCharacter(Handler h, int what, Object obj) { 350ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 351ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 352ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void getDataCallList(Message response) { 353ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 354ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 355ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public List<DataConnection> getCurrentDataConnectionList () { 356ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 357ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 358ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 359ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void updateServiceLocation() { 360ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 361ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 362ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void enableLocationUpdates() { 363ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 364ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 365ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void disableLocationUpdates() { 366ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 367ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 368ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean getDataRoamingEnabled() { 369ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 370ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 371ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 372ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setDataRoamingEnabled(boolean enable) { 373ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 374ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 375ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean enableDataConnectivity() { 376ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 377ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 378ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 379ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean disableDataConnectivity() { 380ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 381ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 382ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 383ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public boolean isDataConnectivityPossible() { 384ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 385ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 386ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 387ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang boolean updateCurrentCarrierInProvider() { 388ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return false; 389ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 390ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 391ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void saveClirSetting(int commandInterfaceCLIRMode) { 392ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 393ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 394ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public PhoneSubInfo getPhoneSubInfo(){ 395306137d97f40a4f807c54a75210343c9262360d1Hung-ying Tyan return null; 396ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 397ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 398ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public IccSmsInterfaceManager getIccSmsInterfaceManager(){ 399ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 400ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 401ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 402ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public IccPhoneBookInterfaceManager getIccPhoneBookInterfaceManager(){ 403ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 404ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 405ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 406ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public IccFileHandler getIccFileHandler(){ 407ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang return null; 408ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 409ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 410ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void activateCellBroadcastSms(int activate, Message response) { 411ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.e(LOG_TAG, "Error! This functionality is not implemented for SIP."); 412ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 413ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 414ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void getCellBroadcastSmsConfig(Message response) { 415ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.e(LOG_TAG, "Error! This functionality is not implemented for SIP."); 416ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 417ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 418ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang public void setCellBroadcastSmsConfig(int[] configValuesArray, Message response){ 419ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang Log.e(LOG_TAG, "Error! This functionality is not implemented for SIP."); 420ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 421ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 422ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang void updatePhoneState() { 423ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang State oldState = state; 424ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 425ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang if (getRingingCall().isRinging()) { 426ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang state = State.RINGING; 427ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } else if (getForegroundCall().isIdle() 428ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang && getBackgroundCall().isIdle()) { 429ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang state = State.IDLE; 430ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } else { 431ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang state = State.OFFHOOK; 432ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 433ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang 434ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang if (state != oldState) { 435306137d97f40a4f807c54a75210343c9262360d1Hung-ying Tyan Log.d(LOG_TAG, " ^^^ new phone state: " + state); 436ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang notifyPhoneStateChanged(); 437ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 438ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang } 439ccd0b6953f5f77d1da5f540a3ba5ea71116e14f0Chung-yih Wang} 440