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 com.android.internal.telephony.Call;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.CallStateException;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Connection;
220825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.Phone;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.net.sip.SipManager;
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.ArrayList;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Iterator;
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.List;
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleabstract class SipCallBase extends Call {
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected List<Connection> connections = new ArrayList<Connection>();
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected abstract void setState(State newState);
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public List<Connection> getConnections() {
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        // FIXME should return Collections.unmodifiableList();
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return connections;
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isMultiparty() {
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return connections.size() > 1;
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public String toString() {
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return state.toString() + ":" + super.toString();
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    void clearDisconnected() {
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (Iterator<Connection> it = connections.iterator(); it.hasNext(); ) {
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Connection c = it.next();
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (c.getState() == State.DISCONNECTED) it.remove();
510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (connections.isEmpty()) setState(State.IDLE);
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
56