10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2006 The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville *
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
19cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Savilleimport java.util.ArrayList;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.List;
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Savilleimport android.telephony.Rlog;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@hide}
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic abstract class Call {
2822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    protected final String LOG_TAG = "Call";
2922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* Enums */
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public enum State {
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        IDLE, ACTIVE, HOLDING, DIALING, ALERTING, INCOMING, WAITING, DISCONNECTED, DISCONNECTING;
340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public boolean isAlive() {
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return !(this == IDLE || this == DISCONNECTED || this == DISCONNECTING);
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public boolean isRinging() {
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return this == INCOMING || this == WAITING;
410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        public boolean isDialing() {
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return this == DIALING || this == ALERTING;
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
484be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam    public static State
494be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam    stateFromDCState (DriverCall.State dcState) {
504be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam        switch (dcState) {
514be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam            case ACTIVE:        return State.ACTIVE;
524be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam            case HOLDING:       return State.HOLDING;
534be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam            case DIALING:       return State.DIALING;
544be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam            case ALERTING:      return State.ALERTING;
554be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam            case INCOMING:      return State.INCOMING;
564be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam            case WAITING:       return State.WAITING;
574be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam            default:            throw new RuntimeException ("illegal call state:" + dcState);
584be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam        }
594be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam    }
604be56374921b52d54b80889540d982f39d26e3abUma Maheswari Ramalingam
61a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    public enum SrvccState {
62a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville        NONE, STARTED, COMPLETED, FAILED, CANCELED;
63a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville    }
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* Instance Variables */
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    public State mState = State.IDLE;
680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6922d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    public ArrayList<Connection> mConnections = new ArrayList<Connection>();
700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // Flag to indicate if the current calling/caller information
720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // is accurate. If false the information is known to be accurate.
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    //
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // For CDMA, during call waiting/3 way, there is no network response
750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // if call waiting is answered, network timed out, dropped, 3 way
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    // merged, etc.
7722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville    protected boolean mIsGeneric = false;
780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /* Instance Methods */
800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /** Do not modify the List result!!! This list is not yours to keep
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *  It will change across event loop iterations            top
830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract List<Connection> getConnections();
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract Phone getPhone();
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract boolean isMultiparty();
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public abstract void hangup() throws CallStateException;
890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * hasConnection
930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @param c a Connection object
950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if the call contains the connection object passed in
960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean hasConnection(Connection c) {
980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return c.getCall() == this;
990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * hasConnections
1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if the call contains one or more connections
1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean hasConnections() {
106cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        List<Connection> connections = getConnections();
1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (connections == null) {
1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return false;
1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return connections.size() > 0;
1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * getState
1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return state of class call
1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public State getState() {
12022d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        return mState;
1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * isIdle
1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     *
1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * FIXME rename
1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * @return true if the call contains only disconnected connections (if any)
1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isIdle() {
1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return !getState().isAlive();
1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the Connection associated with this Call that was created
1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * first, or null if there are no Connections in this Call
1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Connection
1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getEarliestConnection() {
139cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        List<Connection> l;
1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        long time = Long.MAX_VALUE;
1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Connection c;
1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Connection earliest = null;
1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        l = getConnections();
1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (l.size() == 0) {
1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return null;
1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = l.size() ; i < s ; i++) {
151cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville            c = l.get(i);
1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            long t;
1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            t = c.getCreateTime();
1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (t < time) {
1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                earliest = c;
1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                time = t;
1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return earliest;
1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public long
1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getEarliestCreateTime() {
167cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        List<Connection> l;
1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        long time = Long.MAX_VALUE;
1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        l = getConnections();
1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (l.size() == 0) {
1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return 0;
1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = l.size() ; i < s ; i++) {
177cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville            Connection c = l.get(i);
1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            long t;
1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            t = c.getCreateTime();
1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            time = t < time ? t : time;
1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return time;
1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public long
1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getEarliestConnectTime() {
1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        long time = Long.MAX_VALUE;
191cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        List<Connection> l = getConnections();
1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (l.size() == 0) {
1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return 0;
1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = l.size() ; i < s ; i++) {
198cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville            Connection c = l.get(i);
1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            long t;
2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            t = c.getConnectTime();
2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            time = t < time ? t : time;
2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return time;
2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean
2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    isDialingOrAlerting() {
2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return getState().isDialing();
2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean
2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    isRinging() {
2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return getState().isRinging();
2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Returns the Connection associated with this Call that was created
2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * last, or null if there are no Connections in this Call
2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public Connection
2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    getLatestConnection() {
226cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville        List<Connection> l = getConnections();
2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (l.size() == 0) {
2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            return null;
2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        long time = 0;
2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        Connection latest = null;
2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        for (int i = 0, s = l.size() ; i < s ; i++) {
234cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville            Connection c = l.get(i);
2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            long t = c.getCreateTime();
2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            if (t > time) {
2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                latest = c;
2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                time = t;
2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        return latest;
2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * To indicate if the connection information is accurate
2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * or not. false means accurate. Only used for CDMA.
2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public boolean isGeneric() {
25122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        return mIsGeneric;
2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Set the generic instance variable
2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void setGeneric(boolean generic) {
25822d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        mIsGeneric = generic;
2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    /**
2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     * Hangup call if it is alive
2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville     */
2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void hangupIfAlive() {
2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (getState().isAlive()) {
2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            try {
2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville                hangup();
2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            } catch (CallStateException ex) {
26999c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville                Rlog.w(LOG_TAG, " hangupIfActive: caught " + ex);
2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            }
2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
274