19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.telephony;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List;
20767a662ecde33c3979bf02b793d392aca0403162Wink Saville
213805c7ca324f232972c959e06253de4242f83607John Wangimport android.util.Log;
223805c7ca324f232972c959e06253de4242f83607John Wang
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class Call {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* Enums */
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public enum State {
30e7a9201edbb4d18f12d00ba1b80e2481a5cb446fjsh        IDLE, ACTIVE, HOLDING, DIALING, ALERTING, INCOMING, WAITING, DISCONNECTED, DISCONNECTING;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean isAlive() {
33e7a9201edbb4d18f12d00ba1b80e2481a5cb446fjsh            return !(this == IDLE || this == DISCONNECTED || this == DISCONNECTING);
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean isRinging() {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return this == INCOMING || this == WAITING;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean isDialing() {
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return this == DIALING || this == ALERTING;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
45767a662ecde33c3979bf02b793d392aca0403162Wink Saville
46767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /* Instance Variables */
47767a662ecde33c3979bf02b793d392aca0403162Wink Saville
48767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public State state = State.IDLE;
49767a662ecde33c3979bf02b793d392aca0403162Wink Saville
50767a662ecde33c3979bf02b793d392aca0403162Wink Saville
5122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    // Flag to indicate if the current calling/caller information
5222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    // is accurate. If false the information is known to be accurate.
5322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    //
5422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    // For CDMA, during call waiting/3 way, there is no network response
5522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    // if call waiting is answered, network timed out, dropped, 3 way
5622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    // merged, etc.
5722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    protected boolean isGeneric = false;
58767a662ecde33c3979bf02b793d392aca0403162Wink Saville
593805c7ca324f232972c959e06253de4242f83607John Wang    protected final String LOG_TAG = "Call";
603805c7ca324f232972c959e06253de4242f83607John Wang
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* Instance Methods */
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Do not modify the List result!!! This list is not yours to keep
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *  It will change across event loop iterations            top
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract List<Connection> getConnections();
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public abstract Phone getPhone();
69767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public abstract boolean isMultiparty();
70767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public abstract void hangup() throws CallStateException;
71767a662ecde33c3979bf02b793d392aca0403162Wink Saville
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * hasConnection
75767a662ecde33c3979bf02b793d392aca0403162Wink Saville     *
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param c a Connection object
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true if the call contains the connection object passed in
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasConnection(Connection c) {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return c.getCall() == this;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
82767a662ecde33c3979bf02b793d392aca0403162Wink Saville
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * hasConnections
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true if the call contains one or more connections
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasConnections() {
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        List connections = getConnections();
89767a662ecde33c3979bf02b793d392aca0403162Wink Saville
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (connections == null) {
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
93767a662ecde33c3979bf02b793d392aca0403162Wink Saville
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return connections.size() > 0;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
96767a662ecde33c3979bf02b793d392aca0403162Wink Saville
97767a662ecde33c3979bf02b793d392aca0403162Wink Saville    /**
98767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * getState
99767a662ecde33c3979bf02b793d392aca0403162Wink Saville     * @return state of class call
100767a662ecde33c3979bf02b793d392aca0403162Wink Saville     */
101767a662ecde33c3979bf02b793d392aca0403162Wink Saville    public State getState() {
102767a662ecde33c3979bf02b793d392aca0403162Wink Saville        return state;
103767a662ecde33c3979bf02b793d392aca0403162Wink Saville    }
104767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * isIdle
107767a662ecde33c3979bf02b793d392aca0403162Wink Saville     *
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * FIXME rename
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true if the call contains only disconnected connections (if any)
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isIdle() {
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return !getState().isAlive();
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the Connection associated with this Call that was created
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * first, or null if there are no Connections in this Call
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Connection
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    getEarliestConnection() {
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        List l;
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long time = Long.MAX_VALUE;
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Connection c;
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Connection earliest = null;
125767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        l = getConnections();
127767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (l.size() == 0) {
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
131767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0, s = l.size() ; i < s ; i++) {
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c = (Connection) l.get(i);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            long t;
135767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t = c.getCreateTime();
137767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (t < time) {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                earliest = c;
14022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                time = t;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
143767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return earliest;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
146767a662ecde33c3979bf02b793d392aca0403162Wink Saville
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public long
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    getEarliestCreateTime() {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        List l;
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long time = Long.MAX_VALUE;
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        l = getConnections();
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (l.size() == 0) {
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0, s = l.size() ; i < s ; i++) {
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Connection c = (Connection) l.get(i);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            long t;
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t = c.getCreateTime();
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            time = t < time ? t : time;
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return time;
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public long
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    getEarliestConnectTime() {
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        long time = Long.MAX_VALUE;
17322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        List l = getConnections();
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (l.size() == 0) {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0, s = l.size() ; i < s ; i++) {
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Connection c = (Connection) l.get(i);
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            long t;
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            t = c.getConnectTime();
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            time = t < time ? t : time;
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return time;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    isDialingOrAlerting() {
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getState().isDialing();
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    isRinging() {
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getState().isRinging();
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
20222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    /**
20322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     * Returns the Connection associated with this Call that was created
20422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     * last, or null if there are no Connections in this Call
20522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     */
20622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    public Connection
20722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    getLatestConnection() {
20822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        List l = getConnections();
20922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        if (l.size() == 0) {
21022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            return null;
21122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        }
21222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
21322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        long time = 0;
21422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        Connection latest = null;
21522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        for (int i = 0, s = l.size() ; i < s ; i++) {
21622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            Connection c = (Connection) l.get(i);
21722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            long t = c.getCreateTime();
21822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
21922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            if (t > time) {
22022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                latest = c;
22122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville                time = t;
22222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville            }
22322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        }
22422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
22522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        return latest;
22622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    }
22722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
22822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    /**
22922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     * To indicate if the connection information is accurate
23022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     * or not. false means accurate. Only used for CDMA.
23122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     */
23222ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    public boolean isGeneric() {
23322ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        return isGeneric;
23422ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    }
23522ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville
23622ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    /**
23722ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     * Set the generic instance variable
23822ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville     */
23922ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    public void setGeneric(boolean generic) {
24022ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville        isGeneric = generic;
24122ccaf5321cf9d2df57cf0d686d1abcd74acb193Wink Saville    }
2423805c7ca324f232972c959e06253de4242f83607John Wang
2433805c7ca324f232972c959e06253de4242f83607John Wang    /**
2443805c7ca324f232972c959e06253de4242f83607John Wang     * Hangup call if it is alive
2453805c7ca324f232972c959e06253de4242f83607John Wang     */
2463805c7ca324f232972c959e06253de4242f83607John Wang    public void hangupIfAlive() {
2473805c7ca324f232972c959e06253de4242f83607John Wang        if (getState().isAlive()) {
2483805c7ca324f232972c959e06253de4242f83607John Wang            try {
2493805c7ca324f232972c959e06253de4242f83607John Wang                hangup();
2503805c7ca324f232972c959e06253de4242f83607John Wang            } catch (CallStateException ex) {
2513805c7ca324f232972c959e06253de4242f83607John Wang                Log.w(LOG_TAG, " hangupIfActive: caught " + ex);
2523805c7ca324f232972c959e06253de4242f83607John Wang            }
2533805c7ca324f232972c959e06253de4242f83607John Wang        }
2543805c7ca324f232972c959e06253de4242f83607John Wang    }
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
256