/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * 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 net.java.sip.communicator.service.protocol.event; import java.util.*; import net.java.sip.communicator.service.protocol.*; import org.jitsi.service.neomedia.*; /** * An event class representing that an incoming or an outgoing call has been * created. The event id indicates the exact reason for this event. * * @author Emil Ivov */ public class CallEvent extends EventObject { /** * An event id value indicating that this event has been triggered as a * result of a call being ended (all its peers have left). */ public static final int CALL_ENDED = 3; /** * An event id value indicating that this event has been triggered as a * result of an outgoing call. */ public static final int CALL_INITIATED = 1; /** * An event id value indicating that this event has been triggered as a * result of an incoming call. */ public static final int CALL_RECEIVED = 2; /** * Serial version UID. */ private static final long serialVersionUID = 0L; /** * Determines whether this event has been fired to indicate an incoming or * an outgoing call. */ private final int eventID; /** * The media types supported by this call, if information is * available. */ private final Map mediaDirections; /** * The conference of the call for this event. Must be set when creating this * event, because when a call ends, the call conference may be released just * after creating this event, but its reference will still be necessary in * the futur for the UI (i.e to release the call panel), */ private final CallConference conference; /** * Indicate whether the call is recognized to be video call and * desktop streaming call. */ private boolean isDesktopStreaming = false; /** * Creates an event instance indicating that an incoming/outgoing call * has been created * * @param call the call that triggered this event. * @param eventID determines whether this is an incoming or an outgoing * call. */ public CallEvent(Call call, int eventID) { this(call, eventID, null); } /** * Initializes a new CallEvent instance which is to represent an * event fired by a specific Call as its source. * * @param call the Call which will fire the new instance * @param eventID the indicator which determines whether the new instance * will represent an event notifying that an incoming Call was * received, an outgoing Call was initiated, or a Call * ended * @param mediaDirections */ public CallEvent( Call call, int eventID, Map mediaDirections) { super(call); this.eventID = eventID; /* Make */ Map thisMediaDirections = new HashMap(); if (mediaDirections != null) thisMediaDirections.putAll(mediaDirections); this.mediaDirections = Collections.unmodifiableMap(thisMediaDirections); this.conference = call.getConference(); } /** * Returns an event ID int indicating whether this event was triggered by * an outgoing or an incoming call. * * @return on of the CALL_XXX static member ints. */ public int getEventID() { return this.eventID; } /** * Return the media directions map * @return the supported media direction map of current call. */ public Map getMediaDirections() { return mediaDirections; } /** * Return the media types supported by this call, if information is * available. It can be empty list if information wasn't provided for this * event and call. * @return the supported media types of current call. */ public List getMediaTypes() { return new ArrayList(mediaDirections.keySet()); } /** * Returns the Call that triggered this event. * * @return the Call that triggered this event. */ public Call getSourceCall() { return (Call)getSource(); } /** * Returns the CallConference that triggered this event. * * @return the CallConference that triggered this event. */ public CallConference getCallConference() { return this.conference; } /** * Returns whether or not the call is a video call. * * @return true if the call is a video call, false otherwise */ public boolean isVideoCall() { MediaDirection direction = mediaDirections.get(MediaType.VIDEO); return (direction == null) ? false : (direction == MediaDirection.SENDRECV); } /** * Returns whether the current event is for video call and desktop streaming * one. * @return true if this is video call and desktop streaming one. */ public boolean isDesktopStreaming() { return isDesktopStreaming; } /** * Change the desktop streaming indication for this event. * @param value the new value. */ public void setDesktopStreaming(boolean value) { this.isDesktopStreaming = value; } /** * Returns a String representation of this CallEvent. * * @return A a String representation of this CallEvent. */ @Override public String toString() { return "CallEvent:[ id=" + getEventID() + " Call=" + getSourceCall() + "]"; } }