Package com.avaya.clientservices.call

## Interface Call

-     public interface Call

  The Call class is a facade object that may be used to represent a 2-party or a or a conference call. When a Call instance represents a 2-party call, conference-related methods are unsupported. The client application can call call.getConference() regardless of whether the call is a point to point or a conference call. Calling conference operations on a point-to-point call returns failure. The Call also supports video control methods, which can be applied to either a 2-party or a conference call.
  See Also:
    `createCall.`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface | Description
    --- | --- | ---
    `static class` | `Call.IncomingVideoStatus` | Enum Indicating the video availability in an incoming call.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `accept()` | For an incoming call, requests acceptance of an incoming call.
    `void` | `acceptVideo​(VideoMode videoMode, CallCompletionHandler handler)` | Called to accept incoming video escalation.
    `void` | `addCollaboration​(CallCompletionHandler handler)` | Add a collaboration session to this call.
    `void` | `addListener​(CallListener listener)` | Adds a new listener to the call.
    `void` | `addRemoteAddressDigit​(AddressDigit digit)` | For a call in the off-hook dialing state, adds a digit to the remote address being collected via a dial pad.
    `boolean` | `canAutoAnswer()` |
    `void` | `deny​(CallCompletionHandler handler)` | Denies the incoming call using appropriate reason set via `SIPUserConfiguration.setCallDenialPolicy(CallDenialPolicy)`.
    `void` | `deny​(CallDenialReason denialReason, CallCompletionHandler handler)` | Denies the incoming call for the specified reason regardless of configured `SIPUserConfiguration.mCallDenialPolicy`.
    `void` | `denyVideo​(CallCompletionHandler handler)` | Denies the incoming request to add video.
    `void` | `end()` | Requests termination of the call.
    `int` | `getAbbreviatedDelayedRingCycles()` | Get the abbreviated/delayed alerting ring cycles for incoming call.
    `Capability` | `getAddCollaborationCapability()` | Indicates whether the collaboration can be added to the call.
    `AlertType` | `getAlertType()` |
    `AllowedVideoDirection` | `getAllowedVideoDirection()` |
    `java.lang.String` | `getCallerInformation()` | Get caller information (maximum 16 digits) associated with the call.
    `int` | `getCallId()` | Gets the unique numeric ID for the call.
    `CallType` | `getCallType()` |
    `Conference` | `getConference()` |
    `Capability` | `getDenialCapability()` | Indicates whether the call can be denied.
    `long` | `getEstablishedTimeMillis()` |
    `java.util.Map<java.lang.String,​java.lang.String>` | `getExtraProperties()` | A read-only map of extra call properties the application may be interested in.
    `CallForwardingInformation` | `getForwardingInformation()` | Information about forwarding details of this incoming call.
    `long` | `getHeldTimeMillis()` |
    `Capability` | `getHoldCapability()` | Indicates whether the call can be held.
    `Call.IncomingVideoStatus` | `getIncomingVideoStatus()` | Determine if the incoming call has video.
    `Capability` | `getJoinCapability()` | Indicates whether the call can be joined.
    `int` | `getLineAppearanceId()` |
    `java.lang.String` | `getLineAppearanceOwnerAddress()` |
    `java.lang.String` | `getLineAppearanceOwnerDisplayName()` |
    `RingType` | `getLineAppearanceRingType()` | Gets the Ring type, configured for the line appearance of an incoming call.
    `Capability` | `getMuteCapability()` | Indicates whether the call's audio can be muted.
    `CallPrecedenceLevel` | `getPrecedenceLevel()` |
    `CallPreemptionReason` | `getPreemptionReason()` |
    `java.lang.String` | `getRemoteAddress()` | Gets the remote address for the call.
    `java.lang.String` | `getRemoteDialedNumber()` | Get number dialed by originator of incoming call.
    `java.lang.String` | `getRemoteDisplayName()` |
    `java.lang.String` | `getRemoteNumber()` | Gets the number of remote end for the call.
    `Participant` | `getRemoteParticipant()` |
    `Capability` | `getSendDTMFCapability()` | Indicates whether DTMF tones can be sent over the existing call.
    `Capability` | `getSilenceSpeakerCapability()` | Returns an indication as to whether speaker can be silenced for the call.
    `CallState` | `getState()` |
    `java.lang.String` | `getSubject()` |
    `SupervisorCallType` | `getSupervisorCallType()` |
    `Capability` | `getTransferCapability()` | Returns an indication as to whether unattended transfer operation is allowed on the call, based on the state of the call.
    `Capability` | `getTransferToCapability​(Call call)` | Indicates whether the transfer operation between this and the input call objects are allowed, based on the type and the state of the call specified in the argument.
    `Capability` | `getTransferToVoicemailCapability()` | Returns an indication as to whether unattended transfer to voicemail operation is allowed on the call, based on the state of the call.
    `Capability` | `getUnholdCapability()` | Indicates whether the call can be unheld.
    `Capability` | `getUnmuteCapability()` | Indicates whether the call's audio can be unmuted.
    `Capability` | `getUnsilenceSpeakerCapability()` | Returns an indication as to whether speaker can be unsilenced for the call.
    `Capability` | `getUpdateVideoModeCapability()` | Returns a Capability object describing whether the current video mode of the call can be updated based on the current call state, or capabilities of the call.
    `UserToUserInformation` | `getUserToUserInformation()` |
    `java.lang.String` | `getVectorDirectoryNumberName()` | Get Vector Directory Number (VDN) name.
    `VerificationStatus` | `getVerificationStatus()` | Get the verification status for an incoming call.
    `java.util.List<VideoChannel>` | `getVideoChannels()` | Returns the list of video channel(s) associated with the call.
    `VideoMode` | `getVideoMode()` |
    `void` | `hold​(CallCompletionHandler handler)` | Request to put an active call to hold.
    `void` | `ignore()` | Ignores an incoming call.
    `boolean` | `isAnswered()` | Returns true if the call was ever answered/accepted.
    `boolean` | `isAnswerModeAutoIntercom()` |
    `boolean` | `isAudioMuted()` |
    `boolean` | `isAutoAnswerEnabled()` |
    `boolean` | `isAutomaticCallDistributionCall()` |
    `boolean` | `isCallerIdentityPrivate()` | Returns true if the identity of the user who initiated the call is marked as private.
    `boolean` | `isConference()` |
    `boolean` | `isEmergencyCall()` |
    `boolean` | `isIgnored()` |
    `boolean` | `isIncoming()` |
    `boolean` | `isMissed()` |
    `boolean` | `isPickupCall()` | Returns true if the call is created as a result of invoking the call pickup feature `FeatureType.GROUP_CALL_PICKUP`, `FeatureType.DIRECTED_CALL_PICKUP`, `FeatureType.EXTENDED_GROUP_CALL_PICKUP` or `FeatureType.TEAM_BUTTON` pickup.
    `boolean` | `isPresentationOnlyMode()` |
    `boolean` | `isRecordingActive()` |
    `boolean` | `isRecordingPaused()` |
    `boolean` | `isRemote()` | Returns true if the call is a remote call created on the principal line associated with the local user.
    `boolean` | `isRonaOrRoofRedirection()` |
    `boolean` | `isSecureCall()` |
    `boolean` | `isServiceAvailable()` |
    `boolean` | `isServiceObserving()` |
    `boolean` | `isSpeakerSilenced()` |
    `boolean` | `isTeamButtonCall()` | Returns true if the call is created as a result of invoking the team button feature.
    `boolean` | `isVideoActive()` | A convenience method that returns true if the call has active video session.
    `void` | `join​(CallCompletionHandler handler)` | Request to join a remote call.
    `void` | `muteAudio​(boolean mute, CallCompletionHandler handler)` | Mutes or unmutes the call's audio.
    `void` | `readAudioDetails​(AudioDetailsCompletionHandler handler)` | Reads detailed information about the audio channel associated with the call.
    `void` | `readVideoDetails​(VideoDetailsCompletionHandler handler)` | Return current video details/statistics for this call.
    `void` | `removeListener​(CallListener listener)` | Removes a listener from the call.
    `void` | `sendDTMF​(DTMFType digit)` | Sends the specified DTMF tone.
    `void` | `setReceiveVideoResolutionPreferences​(java.util.List<VideoResolutionPreference> preferences, CallCompletionHandler handler)` | Deprecated. Use `setReceiveVideoResolutionPreferencesForMultiVideoStreaming(List,CallCompletionHandler)` instead.
    `void` | `setReceiveVideoResolutionPreferencesForMultiVideoStreaming​(java.util.List<VideoResolutionPreferenceForMultiVideoStreaming> preferences, CallCompletionHandler handler)` | Used in conjunction with setVideoMode() to set receive video resolutions the client application wants to have for multi video stream calls.
    `void` | `setRemoteAddress​(java.lang.String remoteAddress)` | Sets the remote address to be used by the call.
    `void` | `setSubject​(java.lang.String subject)` | Sets the subject of the call.
    `void` | `setVideoMode​(VideoMode videoMode, CallCompletionHandler handler)` | Sets the overall video status for the call.
    `void` | `setVideoResolutionPreferenceForMainVideoStreaming​(VideoResolutionPreferenceForMainVideoStreaming preference, CallCompletionHandler handler)` | Used in conjunction with setVideoMode() to set the video resolution.
    `void` | `silenceSpeaker​(boolean silence, CallCompletionHandler handler)` | Silences or unsilences speaker for the call.
    `void` | `start()` | Starts an outgoing call to the current remote address.
    `void` | `transfer​(Call callToReplace, TransferCompletionHandler handler)` | Starts an attended transfer.
    `void` | `transfer​(java.lang.String remoteAddress, boolean applyDialingRules, TransferCompletionHandler handler)` | Starts an unattended transfer.
    `void` | `transfer​(java.lang.String remoteAddress, TransferCompletionHandler handler)` | Starts an unattended transfer.
    `void` | `transferToVoicemail​(java.lang.String remoteAddress, boolean applyDialingRules, TransferCompletionHandler handler)` | Starts an unattended transfer to voicemail.
    `void` | `transferToVoicemail​(java.lang.String remoteAddress, TransferCompletionHandler handler)` | Starts an unattended transfer to voicemail.
    `void` | `unhold​(CallCompletionHandler handler)` | Request to unhold the a held call.

- - ### Method Detail

    - #### addListener

          void addListener​(CallListener listener)

      Adds a new listener to the call.
      Parameters:
        `listener` - Listener instance that will be added to call.

    - #### removeListener

          void removeListener​(CallListener listener)

      Removes a listener from the call.
      Parameters:
        `listener` - Listener instance that is removed from the call.

    - #### getCallId

          int getCallId()

      Gets the unique numeric ID for the call.
      Returns:
        the call Id

    - #### getCallType

          CallType getCallType()

      Returns:
        The CallType enum value indicating whether this is default registered service (SIP call through Aura) or MeetMe call through ServiceGateway.

    - #### isPresentationOnlyMode

          boolean isPresentationOnlyMode()

      Returns:
        The presentation only mode flag.

    - #### getRemoteAddress

          java.lang.String getRemoteAddress()

      Gets the remote address for the call. For SIP this is the unescaped URI of the remote end of the call.
      Returns:
        the remote address for the call.

    - #### setRemoteAddress

          void setRemoteAddress​(java.lang.String remoteAddress)

      Sets the remote address to be used by the call.
      Parameters:
        `remoteAddress` - the remote address to be used by the call.

    - #### addRemoteAddressDigit

          void addRemoteAddressDigit​(AddressDigit digit)

      For a call in the off-hook dialing state, adds a digit to the remote address being collected via a dial pad. When a match is found in the dial plan the call will automatically be initiated and `onCallDigitCollectionCompleted` will be called. During digit collection the dial plan may indicate that dial tone should be played, this will be indicated via `onCallDigitCollectionPlayDialTone`
      Parameters:
        `digit` - The digit to be appended to the remote address.

    - #### getRemoteNumber

          java.lang.String getRemoteNumber()

      Gets the number of remote end for the call.
      Returns:
        the number for the remote end of the call. For outgoing calls, it's the post dialing rules string. For incoming SIP calls, it's the user part of the URI.

    - #### getRemoteDisplayName

          java.lang.String getRemoteDisplayName()

      Returns:
        the display name of the remote party.

    - #### getRemoteParticipant

          Participant getRemoteParticipant()

      Returns:
        the information about the remote participant connected to the call. The information in Participant can be empty if call is not connected OR the details are not available for remote party.

    - #### getExtraProperties

          java.util.Map<java.lang.String,​java.lang.String> getExtraProperties()

      A read-only map of extra call properties the application may be interested in. For SIP-based calls, the map contains the list of SIP headers that are unknown to the SDK. SIP header name is used as the map key, and the header content is used as to the value of the map entry. During the lifetime of a call session, the extra properties of the call may be updated based on the information received from the network. The extra properties field tracks cumulative list of properties added to the call. For instance, an unknown SIP header of the form "header1: content1" is received, it is added to the map (key = "header1", value ="content1") A subsequent SIP message carrying two unknown headers "header1: contentA" and "header2: content2" will result in the update of the existing property as well as addition of a new map entry, as follows: (key = "header1", value ="contentA") (key = "header2", value ="content2") If there are multiple occurrences of an unknown SIP header, a unique map entry is created for each occurrence by appending a unique integer to the header name. For instance, if a SIP message contains two occurrences of an unknown SIP header, "unknownHeader:content1" and "unknownHeader:content2", then two separate map entries are created: (key="unknownHeader1", value ="content1") (key="unknownHeader2", value ="content2") Av-Phone-Global-Session-ID Header will be available in computer and shared control modes. In case of computer mode, there will be an entry in the map as follows:
      (key = ”Av-Phone-Global-Session-ID”, value = ”Global Session ID of the incoming call received from far end.”)
      In case of shared control, there will be an entry in the map as follows:
      (key = ”Av-Phone-Global-Session-ID”, value = ”Global Session ID of the incoming call received from controllable endpoint.”)
      `onCallExtraPropertiesChanged`
      Returns:
        the extra call properties map.

    - #### getSubject

          java.lang.String getSubject()

      Returns:
        subject line associated with the call, if any.

    - #### getVectorDirectoryNumberName

          java.lang.String getVectorDirectoryNumberName()

      Get Vector Directory Number (VDN) name. Agent may need to know which VDN the call has arrived from in order to get prepared. For example, agent may consult for sales and for technical support questions. And voice menu have the VDNs for sales and technical support. Once call is ringing, agent can see the VDN name and get prepared to talk on the particular subject.
      Returns:
        The Vector Directory Number name.

    - #### getRemoteDialedNumber

          java.lang.String getRemoteDialedNumber()

      Get number dialed by originator of incoming call.
      Returns:
        The dialed number of incoming call. For outgoing calls empty string is returned.

    - #### getUserToUserInformation

          UserToUserInformation getUserToUserInformation()

      Returns:
        User-to-User Information (UUI) associated with the call. `UserToUserInformation`

    - #### setSubject

          void setSubject​(java.lang.String subject)

      Sets the subject of the call.
      Parameters:
        `subject` - the subject of the call.

    - #### getAlertType

          AlertType getAlertType()

      Returns:
        the alert type of an incoming call.
      See Also:
        `AlertType`

    - #### getPrecedenceLevel

          CallPrecedenceLevel getPrecedenceLevel()

      Returns:
        the precedence level of call.
      See Also:
        `CallPrecedenceLevel`

    - #### getPreemptionReason

          CallPreemptionReason getPreemptionReason()

      Returns:
        the reason why this call was preempted.
      See Also:
        `CallPreemptionReason`

    - #### getState

          CallState getState()

      Returns:
        the current call state.
      See Also:
        `CallState`

    - #### isIncoming

          boolean isIncoming()

      Returns:
        indication as to whether the call is an incoming call.

    - #### canAutoAnswer

          boolean canAutoAnswer()

      Returns:
        indication as to whether the incoming call can be answered automatically. Auto answer is not allowed when: - Avaya Communication Manager does not allow answering it automatically, as well as - there is another live call, as well as - the desktop screen is locked, as well as - the desktop screen saver is active, as well as - the presence state is set to Do-Not-Disturb (DND)

    - #### isAutoAnswerEnabled

          boolean isAutoAnswerEnabled()

      Returns:
        indication as to whether Avaya Communication Manager allows answering the incoming call automatically.

    - #### isAnswerModeAutoIntercom

          boolean isAnswerModeAutoIntercom()

      Returns:
        indication as to whether the incoming call is intercom call which should be answered automatically with local audio muted.

    - #### isServiceObserving

          boolean isServiceObserving()

      Returns:
        indication as to whether the call is a service observing call

    - #### isRonaOrRoofRedirection

          boolean isRonaOrRoofRedirection()

      Returns:
        indication whether the incoming call was redirected by Redirection on no answer(RONA) or Redirection on Off-PBX Telephone (ROOF) integration and Mobility (OPTIM) failure. Flag is only for these RONA and ROOF redirections. Redirections due to forwarding, not available or other has no influence on this flag.

    - #### isIgnored

          boolean isIgnored()

      Returns:
        indication as to whether the call is an ignored call.

    - #### isCallerIdentityPrivate

          boolean isCallerIdentityPrivate()

      Returns true if the identity of the user who initiated the call is marked as private. For an incoming call, the method returns true if the remote user's address is private. For an outgoing call, the method returns true if the local user's address is private (i.e., local user chooses to make a private call).
      Returns:
        indication as to whether the user ID is private or not.

    - #### isRemote

          boolean isRemote()

      Returns true if the call is a remote call created on the principal line associated with the local user. A remote call is one that does not exist on the local device but the user is aware of, such as a call on a bridged line appearance.
      Returns:
        indication as to whether the call is remote.

    - #### isPickupCall

          boolean isPickupCall()

      Returns true if the call is created as a result of invoking the call pickup feature `FeatureType.GROUP_CALL_PICKUP`, `FeatureType.DIRECTED_CALL_PICKUP`, `FeatureType.EXTENDED_GROUP_CALL_PICKUP` or `FeatureType.TEAM_BUTTON` pickup.
      Returns:
        indication as to whether the call is pickup call.

    - #### isTeamButtonCall

          boolean isTeamButtonCall()

      Returns true if the call is created as a result of invoking the team button feature.
      Returns:
        indication whether the call is a team button call.

    - #### isMissed

          boolean isMissed()

      Returns:
        returns true if the call was missed, false if not for an incoming call.

    - #### isAnswered

          boolean isAnswered()

      Returns true if the call was ever answered/accepted.
      Returns:
        A flag indicating if this call ever answered by the device. Once true, always returns true irrespective of call's state. hold, end, failed etc

    - #### getEstablishedTimeMillis

          long getEstablishedTimeMillis()

      Returns:
        the system time in milliseconds at which the call was established.

    - #### getHeldTimeMillis

          long getHeldTimeMillis()

      Returns:
        the system time in milliseconds at which the call was last held.

    - #### getForwardingInformation

          CallForwardingInformation getForwardingInformation()

      Information about forwarding details of this incoming call.
      Returns:
        Information can be null if this call was not forwarded.

    - #### start

          void start()

      Starts an outgoing call to the current remote address. Usage in Shared Control mode: UI should call this function only for outgoing calls initiated from UC client. In all other call cases do not invoke the Start function for any call or conference because calls are initiated from the desk phone.

    - #### end

          void end()

      Requests termination of the call.

    - #### accept

          void accept()

      For an incoming call, requests acceptance of an incoming call.

    - #### ignore

          void ignore()

      Ignores an incoming call. The call is not ended, to the remote it will seem as if the call is still alerting. The application can use this method to silent the ringing of call without rejecting it. The call can still be accepted or rejected after it is ignored.

    - #### getDenialCapability

          Capability getDenialCapability()

      Indicates whether the call can be denied. The call denial policy is set using `SIPUserConfiguration.setCallDenialPolicy(CallDenialPolicy)`. The capability is not allowed if the policy is set to disabled The capability is allowed only for incoming Point-to-Point and ad hoc conferencing calls if the policy is set to Busy or Decline. The capability is not allowed for incoming answered or outgoing calls irrespective of the call denial policy. The capability is not allowed for calls on bridge line appearances irrespective of the call denial policy.
      Returns:
        Capability object describing whether the call can be denied.

    - #### deny

          void deny​(CallDenialReason denialReason,
                    CallCompletionHandler handler)

      Denies the incoming call for the specified reason regardless of configured `SIPUserConfiguration.mCallDenialPolicy`.
      Parameters:
        `denialReason` - The reason for the denial.
        `handler` - Object that wants to learn about the result of the deny operation, i.e., whether it was successful.

    - #### deny

          void deny​(CallCompletionHandler handler)

      Denies the incoming call using appropriate reason set via `SIPUserConfiguration.setCallDenialPolicy(CallDenialPolicy)`. The default denial reason is busy.
      Parameters:
        `handler` - Object that wants to learn about the result of the deny operation, i.e., whether it was successful.

    - #### getHoldCapability

          Capability getHoldCapability()

      Indicates whether the call can be held.
      Returns:
        Capability object describing whether the call can be held.

    - #### hold

          void hold​(CallCompletionHandler handler)

      Request to put an active call to hold. If the hold is successful, all CallListener are informed of the hold state change. If it fails, the CompletionHandler is informed of the failure. If the hold operation fails, the call state returns to 'established' state, and any media channels previously ended to handle hold request are resumed.
      Parameters:
        `handler` - Object that wants to learn about the result of the hold operation, i.e., whether it was successful.

    - #### getUnholdCapability

          Capability getUnholdCapability()

      Indicates whether the call can be unheld.
      Returns:
        Capability object describing whether the call can be unheld.

    - #### unhold

          void unhold​(CallCompletionHandler handler)

      Request to unhold the a held call. if unhold is successful, The call transition to 'established' state, and its media channel(s) are restored. If unhold fails, the call stays in 'held' state, and its media channel(s) are not restored.
      Parameters:
        `handler` - Object that wants to learn about the result of the unhold operation, i.e., whether it was successful.

    - #### getJoinCapability

          Capability getJoinCapability()

      Indicates whether the call can be joined.
      Returns:
        Capability object describing whether the call can be joined. NOTE: The remote call may have exclusion turned on, in which case the local user will not be allowed to join.

    - #### join

          void join​(CallCompletionHandler handler)

      Request to join a remote call. The existing call object becomes a local call if join is successful. This can be verified by querying isRemote(), which returns false when the join is successful. If the join operation fails, the call continues representing a remote call. In this case, isRemote() returns true. The result of the join operation is provided via the callbacks defined by the input CompletionHandler.
      Parameters:
        `handler` - Object that wants to learn about the result of the join operation, i.e., whether it was successful.
      See Also:
        `isRemote.`

    - #### getTransferCapability

          Capability getTransferCapability()

      Returns an indication as to whether unattended transfer operation is allowed on the call, based on the state of the call.
      Returns:
        Capability object describing whether the unattended transfer can be performed for the call.

    - #### getTransferToCapability

          Capability getTransferToCapability​(Call call)

      Indicates whether the transfer operation between this and the input call objects are allowed, based on the type and the state of the call specified in the argument. For instance, if the input call is an HTTP call whereas the current call is SIP, transfer is not allowed.
      Parameters:
        `call` - Call object to which whether transfer is allowed.
      Returns:
        Capability object describing whether the call can be transferred.

    - #### transfer

          void transfer​(java.lang.String remoteAddress,
                        TransferCompletionHandler handler)

      Starts an unattended transfer. When the transfer operation successfully completes, the CallListeners are notified that the call has ended via CallListener.onCallEnded(). The result of the transfer operation is reported to the CompletionHandler that is provided as input argument.

      If dialing rules have been configured via `UserConfiguration.setDialingRulesConfiguration(DialingRulesConfiguration)` they will be applied to the remote address. To control whether dialing rules are applied use `transfer(String, boolean, TransferCompletionHandler)` instead.

      Parameters:
        `remoteAddress` - The remote address of transfer target.
        `handler` - Object that wants to learn about the result of the transfer operation, i.e., whether it was successful.

    - #### transfer

          void transfer​(java.lang.String remoteAddress,
                        boolean applyDialingRules,
                        TransferCompletionHandler handler)

      Starts an unattended transfer. When the transfer operation successfully completes, the CallListeners are notified that the call has ended via CallListener.onCallEnded(). The result of the transfer operation is reported to the CompletionHandler that is provided as input argument.
      Parameters:
        `remoteAddress` - The remote address of transfer target.
        `applyDialingRules` - Controls whether any configured dialing rules will be applied to the remote address.
        `handler` - Object that wants to learn about the result of the transfer operation, i.e., whether it was successful.
      See Also:
        `UserConfiguration.getDialingRulesConfiguration()`

    - #### transfer

          void transfer​(Call callToReplace,
                        TransferCompletionHandler handler)

      Starts an attended transfer. When the transfer operation successfully completes, the CallListeners are notified that the call has ended via CallListener.onCallEnded(). The result of the transfer operation is reported to the CompletionHandler that is provided as input argument. In SIP, transfer operation is implemented using delegation technique where transferor delegates transferee to reach out to transfer target in order to complete the transfer operation. While the transfer is in progress, the transferor receives feedback from the transferee about the status of the transfer. If a failure is reported by the transferee, on the transferor's is notified of the error via the CompletionHandler that was provided as input argument and the call between transferee and transferor comes back to previous state.
      Parameters:
        `callToReplace` - The existing call to transfer the call to i.e target call.
        `handler` - Object that wants to learn about the result of the transfer operation, i.e., whether it was successful.

    - #### getSendDTMFCapability

          Capability getSendDTMFCapability()

      Indicates whether DTMF tones can be sent over the existing call. For example, the capability is denied, if the call is in ringing state without early media (VoIP).
      Returns:
        Capability object describing whether DTMF can be sent over the call.

    - #### sendDTMF

          void sendDTMF​(DTMFType digit)

      Sends the specified DTMF tone.
      Parameters:
        `digit` - The DTMF tone to send.

    - #### getMuteCapability

          Capability getMuteCapability()

      Indicates whether the call's audio can be muted.
      Returns:
        Capability object describing whether the call can be muted.

    - #### getUnmuteCapability

          Capability getUnmuteCapability()

      Indicates whether the call's audio can be unmuted.
      Returns:
        Capability object describing whether the call can be unmuted.

    - #### muteAudio

          void muteAudio​(boolean mute,
                         CallCompletionHandler handler)

      Mutes or unmutes the call's audio.
      Parameters:
        `mute` - true to mute audio; false to unmute.
        `handler` - Object that wants to learn about the result of the mute audio operation, i.e., whether it was successful.

    - #### isAudioMuted

          boolean isAudioMuted()

      Returns:
        true if the call's audio is muted, false if unmuted. This does not reflect device-level mute state that may affect this call, but only the call-specific mute state controlled via `muteAudio`

    - #### getSilenceSpeakerCapability

          Capability getSilenceSpeakerCapability()

      Returns an indication as to whether speaker can be silenced for the call.
      Returns:
        Capability object describing whether speaker can be silenced for the call.

    - #### getUnsilenceSpeakerCapability

          Capability getUnsilenceSpeakerCapability()

      Returns an indication as to whether speaker can be unsilenced for the call.
      Returns:
        Capability object describing whether speaker can be unsilenced for the call.

    - #### silenceSpeaker

          void silenceSpeaker​(boolean silence,
                              CallCompletionHandler handler)

      Silences or unsilences speaker for the call.
      Parameters:
        `silence` - true to silence speaker; false to unsilence.
        `handler` - Object that wants to learn about the result of the silence speaker operation, i.e., whether it was successful.

    - #### isSpeakerSilenced

          boolean isSpeakerSilenced()

      Returns:
        true if speaker is silenced for the call, false if unsilenced. This does not reflect device-level speaker silence state that may affect this call, but only the call-specific speaker silence state controlled via `silenceSpeaker`

    - #### readAudioDetails

          void readAudioDetails​(AudioDetailsCompletionHandler handler)

      Reads detailed information about the audio channel associated with the call. If the audio channel has ended the audio details contain the information received from the channel just before it was ended.
      Parameters:
        `handler` - Object that wants to read the result of the audio details operation.

    - #### getIncomingVideoStatus

          Call.IncomingVideoStatus getIncomingVideoStatus()

      Determine if the incoming call has video.
      Returns:
        IncomingVideoStatus indicating the video availability in an incoming call.

    - #### getUpdateVideoModeCapability

          Capability getUpdateVideoModeCapability()

      Returns a Capability object describing whether the current video mode of the call can be updated based on the current call state, or capabilities of the call. The capability object indicates an error(denial) if the current call state does not allow video mode update, or if local video is disabled, e.g., due to video licensing or local platform's configuration.
      Returns:
        Capability object indicating whether the current video mode of the call can be updated.

    - #### setVideoMode

          void setVideoMode​(VideoMode videoMode,
                            CallCompletionHandler handler)

      Sets the overall video status for the call. This method can be used to enable bidirectional or unidirectional video, or disable video.
      Parameters:
        `videoMode` - Desired video status for the call.
        `handler` - Object that wants to learn about the result of the set video mode operation, i.e., whether it was successful.
      See Also:
        `CallListener`

    - #### getVideoMode

          VideoMode getVideoMode()

      Returns:
        the current video mode of the call, that is, whether video is enabled or disabled, and if enabled, what is the video direction.

    - #### getAllowedVideoDirection

          AllowedVideoDirection getAllowedVideoDirection()

      Returns:
        allowed video direction for the call based on its state, type and network availability.

    - #### setReceiveVideoResolutionPreferences

          @Deprecated
          void setReceiveVideoResolutionPreferences​(java.util.List<VideoResolutionPreference> preferences,
                                                    CallCompletionHandler handler)

      Deprecated.
      Use `setReceiveVideoResolutionPreferencesForMultiVideoStreaming(List,CallCompletionHandler)` instead.
      Used in conjunction with setVideoMode() to set receive video resolutions the client application wants to have for multi video stream calls. Calling this method is optional. If this method is not called and the local user wants to receive video, for a multi video stream conference call the Client SDK negotiates the maximum number of video streams that can be supported with the server, subject to the limitations of the local CPU/host capabilities and the locally provisioned video-related bandwidth and resolution settings. If this method is called, the number of video streams negotiated with the conference server and their resolution will be the lesser of the information passed in the method and the maximum number of video streams that can be supported subject to the limitations of the conference server's ability to multiple video streams, the local CPU/platform limitations, and the locally provisioned video bandwidth and resolution settings. For example, the conference server may be capable of sending up to nine 180p video streams, but the local platform may only be able to decode up to one 360p and four 180p video streams. If this method is not called, when the server escalates the single video stream call to multi stream video, the SDK negotiates one 360p stream and four 180p video streams with the server. Depending on the number of video participants on the call and the capabilities of the media server, the local SDK may receive anywhere from a single 360p video stream up to four 180p video streams. In the same example, if the local application called this method to view up to three video streams, then only three video streams are negotiated with the conference server. If the application sets a lesser number of video streams to render than what can be supported maximum, some of the video channel instances that can be supported but not requested by the application for rendering are marked as disabled, and reported with disabled reason of "layout selection". It should be noted that calling this method on a call that does not support multiple video channels has no effect. But in this case successful response would be provided through completion handler. However, a call normally starts as a point to point call, and is later escalated to have multi video channels. In this case, any preference setting provided prior to the multiple video channels escalation is used during processing of an incoming escalation request. This method may be called mid-call.
      Parameters:
        `preferences` - The list of video resolution preferences requested by the application.
        `handler` - Object that wants to learn about the result of the set receive video resolution preferences operation, i.e., whether it was successful.

    - #### setReceiveVideoResolutionPreferencesForMultiVideoStreaming

          void setReceiveVideoResolutionPreferencesForMultiVideoStreaming​(java.util.List<VideoResolutionPreferenceForMultiVideoStreaming> preferences,
                                                                          CallCompletionHandler handler)

      Used in conjunction with setVideoMode() to set receive video resolutions the client application wants to have for multi video stream calls. Calling this method is optional. If this method is not called and the local user wants to receive video, for a multi video stream conference call the Client SDK negotiates the maximum number of video streams that can be supported with the server, subject to the limitations of the local CPU/host capabilities and the locally provisioned video-related bandwidth and resolution settings. If this method is called, the number of video streams negotiated with the conference server and their resolution will be the lesser of the information passed in the method and the maximum number of video streams that can be supported subject to the limitations of the conference server's ability to multiple video streams, the local CPU/platform limitations, and the locally provisioned video bandwidth and resolution settings. For example, the conference server may be capable of sending up to nine 180p video streams, but the local platform may only be able to decode up to one 360p and four 180p video streams. If this method is not called, when the server escalates the single video stream call to multi stream video, the SDK negotiates one 360p stream and four 180p video streams with the server. Depending on the number of video participants on the call and the capabilities of the media server, the local SDK may receive anywhere from a single 360p video stream up to four 180p video streams. In the same example, if the local application called this method to view up to three video streams, then only three video streams are negotiated with the conference server. If the application sets a lesser number of video streams to render than what can be supported maximum, some of the video channel instances that can be supported but not requested by the application for rendering are marked as disabled, and reported with disabled reason of "layout selection". It should be noted that calling this method on a call that does not support multiple video channels has no effect. But in this case successful response would be provided through completion handler. However, a call normally starts as a point to point call, and is later escalated to have multi video channels. In this case, any preference setting provided prior to the multiple video channels escalation is used during processing of an incoming escalation request. This method may be called mid-call.
      Parameters:
        `preferences` - The list of video resolution preferences requested by the application.
        `handler` - Object that wants to learn about the result of the set receive video resolution preferences operation, i.e., whether it was successful.

    - #### setVideoResolutionPreferenceForMainVideoStreaming

          void setVideoResolutionPreferenceForMainVideoStreaming​(VideoResolutionPreferenceForMainVideoStreaming preference,
                                                                 CallCompletionHandler handler)

      Used in conjunction with setVideoMode() to set the video resolution. The actual resolution can be lower than the specified preference. It is subjected to negotiation result, configuration limits, and hardware capability. Calling this method is optional. This method may be called mid-call. Note: This API adjusts the encoder and decoder resolution. It does not affect the video capture resolution. Refer to the media engine documentation to adjust the video capture resolution.
      Parameters:
        `preference` - The video resolution preference requested by the application.
        `handler` - Object that wants to learn about the result of the set receive video resolution preference operation, i.e., whether it was successful.

    - #### acceptVideo

          void acceptVideo​(VideoMode videoMode,
                           CallCompletionHandler handler)

      Called to accept incoming video escalation. The video can be accepted to be bidirectional or unidirectional.
      Parameters:
        `videoMode` - Desired video status for the call.
        `handler` - Object that wants to learn about the result of the accept video operation, i.e., whether it was successful.

    - #### denyVideo

          void denyVideo​(CallCompletionHandler handler)

      Denies the incoming request to add video.
      Parameters:
        `handler` - Object that wants to learn about the result of the deny video operation, i.e. whether it was successful.

    - #### getVideoChannels

          java.util.List<VideoChannel> getVideoChannels()

      Returns the list of video channel(s) associated with the call.
      Returns:
        List of video channel(s) if this is a video call; null, otherwise.

    - #### isVideoActive

          boolean isVideoActive()

      A convenience method that returns true if the call has active video session. The method returns true if there is at least one video channel that is enabled, and has a negotiated media direction of send-receive, receive-only or send-only.
      Returns:
        true if the call has active video; false otherwise.

    - #### readVideoDetails

          void readVideoDetails​(VideoDetailsCompletionHandler handler)

      Return current video details/statistics for this call. If the video channel has ended the video details contain the information received from the channel just before it was ended.
      Parameters:
        `handler` - Object that wants to read the result of the video details operation.

    - #### isConference

          boolean isConference()

      Returns:
        Returns whether the call is a conference call.

    - #### getConference

          Conference getConference()

      Returns:
        Reference to the Conference object associated with the call. The Conference object is returned regardless of whether the call is a conference call or not. Invoking methods on the Conference object returns an error if the call is not a conference call.

    - #### isServiceAvailable

          boolean isServiceAvailable()

      Returns:
        true if the call has an active signaling path, false otherwise.

    - #### getAddCollaborationCapability

          Capability getAddCollaborationCapability()

      Indicates whether the collaboration can be added to the call.
      Returns:
        Capability object indicating whether the collaboration can be added to the call.

    - #### addCollaboration

          void addCollaboration​(CallCompletionHandler handler)

      Add a collaboration session to this call. If the call is a two-party call, the call becomes a conference. If the call is already a conference, the call is not modified.
      Parameters:
        `handler` - Object that wants to learn about the result of the add collaboration operation, i.e. whether it was successful.

    - #### getLineAppearanceOwnerAddress

          java.lang.String getLineAppearanceOwnerAddress()

      Returns:
        The remote call owner address.
      See Also:
        `isRemote.`

    - #### getLineAppearanceOwnerDisplayName

          java.lang.String getLineAppearanceOwnerDisplayName()

      Returns:
        The remote call owner display name.
      See Also:
        `isRemote.`

    - #### getLineAppearanceId

          int getLineAppearanceId()

      Returns:
        The line id for the remote call.
      See Also:
        `isRemote`

    - #### isEmergencyCall

          boolean isEmergencyCall()

      Returns:
        whether the call is an emergency call.

    - #### getLineAppearanceRingType

          RingType getLineAppearanceRingType()

      Gets the Ring type, configured for the line appearance of an incoming call. For a call appearance button a client shall use the cadence specified by the Alert type `getAlertType` and shall apply audible ringer based on the value of Ring type. A subsequent call arriving on a station (while another call is active) shall honor the Ring type for call appearance button. If the Ring type is not specified for call appearance, then client shall use the cadence (internal, external, priority, no-ring) provided by the Alert type. A subsequent call arriving on a station (while another call is active) shall ring once and transition from audible ring to no-ring. For a bridge appearance button a client shall use the cadence specified by the Alert type `getAlertType` and shall apply audible ringer based on the value of Rring type. A subsequent call arriving on a station (while another call is active) shall honor the Ring type for bridge appearance button. If the Ring type is not specified for the bridge appearance, then a client shall use the cadence (internal, external, priority, no-ring) provided by the Alert type. A subsequent call arriving on a station (while another call is active) shall ring once and transition from audible ring to no-ring.
      Returns:
        the ring type, configured for the line appearance of an incoming call.
      See Also:
        `RingType`, `AlertType`

    - #### getAbbreviatedDelayedRingCycles

          int getAbbreviatedDelayedRingCycles()

      Get the abbreviated/delayed alerting ring cycles for incoming call.
      Returns:
        Returns the abbreviated/delayed alerting ring cycles for incoming call.

    - #### getTransferToVoicemailCapability

          Capability getTransferToVoicemailCapability()

      Returns an indication as to whether unattended transfer to voicemail operation is allowed on the call, based on the state of the call.
      Returns:
        Capability object describing whether the unattended transfer to voicemail can be performed for the call. If voicemail transfer is not enabled, returns eCAPABILITY_NOT_SUPPORTED.

    - #### transferToVoicemail

          void transferToVoicemail​(java.lang.String remoteAddress,
                                   TransferCompletionHandler handler)

      Starts an unattended transfer to voicemail. When the transfer operation successfully completes, the CallListeners are notified that the call has ended via CallListener.onCallEnded(). The result of the transfer operation is reported to the CompletionHandler that is provided as input argument.

      If dialing rules have been configured via `UserConfiguration.setDialingRulesConfiguration(DialingRulesConfiguration)` they will be applied to the remote address. To control whether dialing rules are applied use `transferToVoicemail(String, boolean, TransferCompletionHandler)` instead.

      Parameters:
        `remoteAddress` - The remote address whose voicemail transfer the call to.
        `handler` - Object that wants to learn about the result of the transfer operation, i.e., whether it was successful. Invocation is same as that of unattended transfer.

    - #### transferToVoicemail

          void transferToVoicemail​(java.lang.String remoteAddress,
                                   boolean applyDialingRules,
                                   TransferCompletionHandler handler)

      Starts an unattended transfer to voicemail. When the transfer operation successfully completes, the CallListeners are notified that the call has ended via CallListener.onCallEnded(). The result of the transfer operation is reported to the CompletionHandler that is provided as input argument.
      Parameters:
        `remoteAddress` - The remote address whose voicemail transfer the call to.
        `applyDialingRules` - Controls whether any configured dialing rules will be applied to the remote address.
        `handler` - Object that wants to learn about the result of the transfer operation, i.e., whether it was successful. Invocation is same as that of unattended transfer.
      See Also:
        `UserConfiguration.getDialingRulesConfiguration()`

    - #### getCallerInformation

          java.lang.String getCallerInformation()

      Get caller information (maximum 16 digits) associated with the call. The collected digits information neither change during the life of the call nor it can be updated during the life of a call. In case of transfer of call caller information associated with the call is also transferred.
      Collected digits which are sent as part of call establishment will be provided to the sip application in a new sip header Avaya-user-data. Avaya-User-Data:45676;purpose=collected-digits;content=digits;encoding=text

      Example: Collect 4 digits after announcement 3502 (Thank you for calling the Widget Company. If you know your party's 4-digit extension, please dial it now or stay on the line for the operator.)

      Returns:
        Returns the collected digits information associated with the call otherwise an empty string if call does not have digit information.

    - #### isAutomaticCallDistributionCall

          boolean isAutomaticCallDistributionCall()

      Returns:
        true if the call sent from from Vector (Automatic Call Distribution).

    - #### getSupervisorCallType

          SupervisorCallType getSupervisorCallType()

      Returns:
        enum indicating supervisor call type.

    - #### isRecordingActive

          boolean isRecordingActive()

      Returns:
        true if the call is being recorded, false otherwise.

    - #### isRecordingPaused

          boolean isRecordingPaused()

      Returns:
        true if the call recording is paused, false otherwise.

    - #### isSecureCall

          boolean isSecureCall()

      Returns:
        true if the call is secure, false otherwise.

    - #### getVerificationStatus

          VerificationStatus getVerificationStatus()

      Get the verification status for an incoming call.

      In the STIR/SHAKEN enabled environment, the recipient of a call can determine if the caller ID has been verified even before answering the call. It helps users avoid answering or accepting calls from spoofed caller IDs.

      The incoming calls will have the 'verstat'(verification Status) parameter inserted by the server in the INVITE request indicating if the call verification was passed, failed, or not verified.

      Returns:
        An enumeration indicating value whether the call verification passed, failed or could not be verified.
      See Also:
        `VerificationStatus`