/*
* 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;
/**
* The CallPeerState class reflects the current state of a call
* peer. In other words when you start calling your grand mother she will
* be in a INITIATING_CALL state, when her phone rings her state will change to
* ALERTING_REMOTE_SIDE, and when she replies she will enter a CONNCECTED state.
*
* <p>Though not mandatory CallPeerState would generally have one of the
* following life cycles
*
* <p> In the case with your grand mother that we just described we have:
* <br>INITIATING_CALL -> CONNECTING -> ALERTING_REMOTE_USER -> CONNECTED -> DISCONNECTED
*
* <p> If your granny was already on the phone we have:
* <br>INITIATING_CALL -> CONNECTING -> BUSY -> DISCONNECTED
*
* <p>Whenever someone tries to reach you:
* <br>INCOMING_CALL -> CONNECTED -> DISCONNECTED
*
* <p>A FAILED state is prone to appear at any place in the above diagram and is
* generally followed by a disconnected state.
*
* <p>Information on call peer is shown in the phone user interface until
* they enter the DISCONNECTED state. At that point call peer information
* is automatically removed from the user interface and the call is considered
* terminated.
*
* @author Emil Ivov
* @author Lubomir Marinov
* @author Yana Stamcheva
*/
public class CallPeerState
{
/**
* This constant value indicates a String representation of the UNKNOWN
* call state.
* <br>This constant has the String value "Unknown".
*/
public static final String _UNKNOWN = "Unknown";
/**
* This constant value indicates that the state of the call peer is
* is UNKNOWN - which means that there is no information on the state for
* the time being (this constant should be used as a default value for
* newly created call peer that don't yet have an attributed call
* state.
*/
public static final CallPeerState UNKNOWN
= new CallPeerState(_UNKNOWN,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.UNKNOWN_STATUS"));
/**
* This constant value indicates a String representation of the
* INITIATING_CALL call state.
* <br>This constant has the String value "Initiating Call".
*/
public static final String _INITIATING_CALL = "Initiating Call";
/**
* This constant value indicates that the state of the call peer is
* is INITIATING_CALL - which means that we're currently trying to open a
* socket and send our request. In the case of SIP for example we will leave
* this state the moment we receive a "100 Trying" request from a proxy or
* the remote side.
*/
public static final CallPeerState INITIATING_CALL
= new CallPeerState(_INITIATING_CALL,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.INITIATING_CALL_STATUS"));
/**
* This constant value indicates a String representation of the CONNECTING
* call state.
* <br>This constant has the String value "Connecting".
*/
public static final String _CONNECTING = "Connecting";
/**
* This constant value indicates that the state of the call peer is
* CONNECTING - which means that a network connection to that peer
* is currently being established.
*/
public static final CallPeerState CONNECTING
= new CallPeerState(_CONNECTING,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.CONNECTING_STATUS"));
/**
* This constant value indicates a String representation of the CONNECTING
* call state but in cases where early media is being exchanged.
* <br>This constant has the String value "Connecting".
*/
public static final String _CONNECTING_WITH_EARLY_MEDIA = "Connecting*";
/**
* This constant value indicates that the state of the call peer is
* CONNECTING - which means that a network connection to that peer
* is currently being established.
*/
public static final CallPeerState CONNECTING_WITH_EARLY_MEDIA
= new CallPeerState( _CONNECTING_WITH_EARLY_MEDIA,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.CONNECTING_EARLY_MEDIA_STATUS"));
/**
* This constant value indicates that the state of the incoming call peer
* is CONNECTING - which means that a network connection to that peer
* is currently being established.
*/
public static final CallPeerState CONNECTING_INCOMING_CALL
= new CallPeerState( _CONNECTING_WITH_EARLY_MEDIA,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.CONNECTING_STATUS"));
/**
* This constant value indicates that the state of the incoming call peer
* is CONNECTING - which means that a network connection to that peer
* is currently being established and during the process before hearing
* the other peer we can still can hear media coming from the
* server for example.
*/
public static final CallPeerState CONNECTING_INCOMING_CALL_WITH_MEDIA
= new CallPeerState( _CONNECTING_WITH_EARLY_MEDIA,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.CONNECTING_EARLY_MEDIA_STATUS"));
/**
* This constant value indicates a String representation of the
* ALERTING_REMOTE_SIDE call state.
* <br>This constant has the String value "Alerting Remote User".
*/
public static final String _ALERTING_REMOTE_SIDE
= "Alerting Remote User (Ringing)";
/**
* This constant value indicates that the state of the call peer is
* is ALERTING_REMOTE_SIDE - which means that a network connection to that
* peer has been established and peer's phone is currently alerting the
* remote user of the current call.
*/
public static final CallPeerState ALERTING_REMOTE_SIDE
= new CallPeerState(_ALERTING_REMOTE_SIDE,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.RINGING_STATUS"));
/**
* This constant value indicates a String representation of the
* INCOMING_CALL call state.
* <br>This constant has the String value "Incoming Call".
*/
public static final String _INCOMING_CALL = "Incoming Call";
/**
* This constant value indicates that the state of the call peer is
* is INCOMING_CALL - which means that the peer is willing to start
* a call with us. At that point local side should be playing a sound or a
* graphical alert (the phone is ringing).
*/
public static final CallPeerState INCOMING_CALL
= new CallPeerState(_INCOMING_CALL,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.INCOMING_CALL_STATUS"));
/**
* This constant value indicates a String representation of the CONNECTED
* call state.
* <br>This constant has the String value "Connected".
*/
public static final String _CONNECTED = "Connected";
/**
* This constant value indicates that the state of the call peer is
* is CONNECTED - which means that there is an ongoing call with that
* peer.
*/
public static final CallPeerState CONNECTED
= new CallPeerState(_CONNECTED,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.CONNECTED_STATUS"));
/**
* This constant value indicates a String representation of the DISCONNECTED
* call state.
* <br>This constant has the String value "Disconnected".
*/
public static final String _DISCONNECTED = "Disconnected";
/**
* This constant value indicates that the state of the call peer is
* is DISCONNECTED - which means that this peer is not participating :)
* in the call any more.
*/
public static final CallPeerState DISCONNECTED
= new CallPeerState(_DISCONNECTED,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.DISCONNECTED_STATUS"));
/**
* This constant value indicates a String representation of the REFERRED
* call state.
* <br>This constant has the String value "Referred".
*/
public static final String _REFERRED = "Referred";
/**
* This constant value indicates that the state of the call peer is
* is REFERRED - which means that this peer has transfered us to another
* peer.
*/
public static final CallPeerState REFERRED
= new CallPeerState(_REFERRED,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.REFERRED_STATUS"));
/**
* This constant value indicates a String representation of the BUSY
* call state.
* <br>This constant has the String value "Busy".
*/
public static final String _BUSY = "Busy";
/**
* This constant value indicates that the state of the call peer is
* is BUSY - which means that an attempt to establish a call with that
* peer has been made and that it has been turned down by them (e.g.
* because they were already in a call).
*/
public static final CallPeerState BUSY
= new CallPeerState(_BUSY,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.BUSY_STATUS"));
/**
* This constant value indicates a String representation of the FAILED
* call state.
* <br>This constant has the String value "Failed".
*/
public static final String _FAILED = "Failed";
/**
* This constant value indicates that the state of the call peer is
* is ON_HOLD - which means that an attempt to establish a call with that
* peer has failed for an unexpected reason.
*/
public static final CallPeerState FAILED
= new CallPeerState(_FAILED,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.FAILED_STATUS"));
/**
* The constant value being a String representation of the ON_HOLD_LOCALLY
* call peer state.
* <p>
* This constant has the String value "Locally On Hold".
* </p>
*/
public static final String _ON_HOLD_LOCALLY = "Locally On Hold";
/**
* The constant value indicating that the state of a call peer is
* locally put on hold.
*/
public static final CallPeerState ON_HOLD_LOCALLY
= new CallPeerState(_ON_HOLD_LOCALLY,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.LOCALLY_ON_HOLD_STATUS"));
/**
* The constant value being a String representation of the ON_HOLD_MUTUALLY
* call peer state.
* <p>
* This constant has the String value "Mutually On Hold".
* </p>
*/
public static final String _ON_HOLD_MUTUALLY = "Mutually On Hold";
/**
* The constant value indicating that the state of a call peer is
* mutually - locally and remotely - put on hold.
*/
public static final CallPeerState ON_HOLD_MUTUALLY
= new CallPeerState(_ON_HOLD_MUTUALLY,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.MUTUALLY_ON_HOLD_STATUS"));
/**
* The constant value being a String representation of the ON_HOLD_REMOTELY
* call peer state.
* <p>
* This constant has the String value "Remotely On Hold".
* </p>
*/
public static final String _ON_HOLD_REMOTELY = "Remotely On Hold";
/**
* The constant value indicating that the state of a call peer is
* remotely put on hold.
*/
public static final CallPeerState ON_HOLD_REMOTELY
= new CallPeerState(_ON_HOLD_REMOTELY,
ProtocolProviderActivator.getResourceService().getI18NString(
"service.gui.REMOTELY_ON_HOLD_STATUS"));
/**
* Determines whether a specific <tt>CallPeerState</tt> value
* signal a call hold regardless of the issuer (which may be local and/or
* remote).
*
* @param state
* the <tt>CallPeerState</tt> value to be checked
* whether it signals a call hold
* @return <tt>true</tt> if the specified <tt>state</tt> signals a call
* hold; <tt>false</tt>, otherwise
*/
public static final boolean isOnHold(CallPeerState state)
{
return CallPeerState.ON_HOLD_LOCALLY.equals(state)
|| CallPeerState.ON_HOLD_MUTUALLY.equals(state)
|| CallPeerState.ON_HOLD_REMOTELY.equals(state);
}
/**
* A string representation of this peer's Call State. Could be
* _CONNECTED, _FAILED, _CALLING and etc.
*/
private String callStateStr;
/**
* A localized string representation of this peer's Call State.
*/
private String callStateLocalizedStr;
/**
* Create a peer call state object with a value corresponding to the
* specified string.
* @param callPeerState a string representation of the state.
* @param callStateLocalizedStr the localized string representing this state
*/
private CallPeerState( String callPeerState,
String callStateLocalizedStr)
{
this.callStateStr = callPeerState;
this.callStateLocalizedStr = callStateLocalizedStr;
}
/**
* Returns a String representation of the CallPeerState.
*
* @return A string value (one of the _BUSY, _CALLING, _CONNECTED,
* _CONNECTING, _DISCONNECTED, _FAILED, _RINGING constants) representing
* this call peer state).
*/
public String getStateString()
{
return callStateStr;
}
/**
* Returns a localized String representation of the CallPeerState.
*
* @return a localized String representation of the CallPeerState
*/
public String getLocalizedStateString()
{
return callStateLocalizedStr;
}
/**
* Returns a string representation of this call state. Strings returned
* by this method have the following format:
* CallPeerState:<STATE_STRING>
* and are meant to be used for logging/debugging purposes.
* @return a string representation of this object.
*/
@Override
public String toString()
{
return getClass().getName()+":"+getStateString();
}
}