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