| /* |
| * Copyright (C) 2006 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.internal.telephony; |
| |
| import java.util.List; |
| |
| /** |
| * {@hide} |
| */ |
| public abstract class Call { |
| /* Enums */ |
| |
| public enum State { |
| IDLE, ACTIVE, HOLDING, DIALING, ALERTING, INCOMING, WAITING, DISCONNECTED; |
| |
| public boolean isAlive() { |
| return !(this == IDLE || this == DISCONNECTED); |
| } |
| |
| public boolean isRinging() { |
| return this == INCOMING || this == WAITING; |
| } |
| |
| public boolean isDialing() { |
| return this == DIALING || this == ALERTING; |
| } |
| } |
| |
| |
| /* Instance Variables */ |
| |
| public State state = State.IDLE; |
| |
| |
| |
| /* Instance Methods */ |
| |
| /** Do not modify the List result!!! This list is not yours to keep |
| * It will change across event loop iterations top |
| */ |
| |
| public abstract List<Connection> getConnections(); |
| public abstract Phone getPhone(); |
| public abstract boolean isMultiparty(); |
| public abstract void hangup() throws CallStateException; |
| |
| |
| /** |
| * hasConnection |
| * |
| * @param c a Connection object |
| * @return true if the call contains the connection object passed in |
| */ |
| public boolean hasConnection(Connection c) { |
| return c.getCall() == this; |
| } |
| |
| /** |
| * hasConnections |
| * @return true if the call contains one or more connections |
| */ |
| public boolean hasConnections() { |
| List connections = getConnections(); |
| |
| if (connections == null) { |
| return false; |
| } |
| |
| return connections.size() > 0; |
| } |
| |
| /** |
| * getState |
| * @return state of class call |
| */ |
| public State getState() { |
| return state; |
| } |
| |
| /** |
| * isIdle |
| * |
| * FIXME rename |
| * @return true if the call contains only disconnected connections (if any) |
| */ |
| public boolean isIdle() { |
| return !getState().isAlive(); |
| } |
| |
| /** |
| * Returns the Connection associated with this Call that was created |
| * first, or null if there are no Connections in this Call |
| */ |
| public Connection |
| getEarliestConnection() { |
| List l; |
| long time = Long.MAX_VALUE; |
| Connection c; |
| Connection earliest = null; |
| |
| l = getConnections(); |
| |
| if (l.size() == 0) { |
| return null; |
| } |
| |
| for (int i = 0, s = l.size() ; i < s ; i++) { |
| c = (Connection) l.get(i); |
| long t; |
| |
| t = c.getCreateTime(); |
| |
| if (t < time) { |
| earliest = c; |
| } |
| } |
| |
| return earliest; |
| } |
| |
| public long |
| getEarliestCreateTime() { |
| List l; |
| long time = Long.MAX_VALUE; |
| |
| l = getConnections(); |
| |
| if (l.size() == 0) { |
| return 0; |
| } |
| |
| for (int i = 0, s = l.size() ; i < s ; i++) { |
| Connection c = (Connection) l.get(i); |
| long t; |
| |
| t = c.getCreateTime(); |
| |
| time = t < time ? t : time; |
| } |
| |
| return time; |
| } |
| |
| public long |
| getEarliestConnectTime() { |
| List l; |
| long time = Long.MAX_VALUE; |
| |
| l = getConnections(); |
| |
| if (l.size() == 0) { |
| return 0; |
| } |
| |
| for (int i = 0, s = l.size() ; i < s ; i++) { |
| Connection c = (Connection) l.get(i); |
| long t; |
| |
| t = c.getConnectTime(); |
| |
| time = t < time ? t : time; |
| } |
| |
| return time; |
| } |
| |
| |
| public boolean |
| isDialingOrAlerting() { |
| return getState().isDialing(); |
| } |
| |
| public boolean |
| isRinging() { |
| return getState().isRinging(); |
| } |
| |
| } |