mirror of
https://github.com/element-hq/element-android
synced 2024-11-28 05:31:21 +03:00
Asserted identity: process event
This commit is contained in:
parent
c90717a2c8
commit
0098d435b3
6 changed files with 59 additions and 8 deletions
|
@ -17,6 +17,7 @@
|
|||
package org.matrix.android.sdk.api.session.call
|
||||
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAnswerContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAssertedIdentityContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallCandidatesContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent
|
||||
|
@ -61,4 +62,11 @@ interface CallListener {
|
|||
* Called when the call has been managed by an other session
|
||||
*/
|
||||
fun onCallManagedByOtherSession(callId: String)
|
||||
|
||||
/**
|
||||
* Called when an asserted identity event is received
|
||||
*/
|
||||
fun onCallAssertedIdentityReceived(callAssertedIdentityContent: CallAssertedIdentityContent)
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -37,7 +37,9 @@ internal class CallEventProcessor @Inject constructor(private val callSignalingH
|
|||
EventType.CALL_CANDIDATES,
|
||||
EventType.CALL_INVITE,
|
||||
EventType.CALL_HANGUP,
|
||||
EventType.ENCRYPTED
|
||||
EventType.ENCRYPTED,
|
||||
EventType.CALL_ASSERTED_IDENTITY,
|
||||
EventType.CALL_ASSERTED_IDENTITY_PREFIX
|
||||
)
|
||||
|
||||
private val eventsToPostProcess = mutableListOf<Event>()
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.matrix.android.sdk.api.extensions.tryOrNull
|
|||
import org.matrix.android.sdk.api.session.call.CallListener
|
||||
import org.matrix.android.sdk.api.session.call.MxCall
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAnswerContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAssertedIdentityContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallCandidatesContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent
|
||||
|
@ -64,6 +65,10 @@ internal class CallListenersDispatcher(private val listeners: Set<CallListener>)
|
|||
it.onCallNegotiateReceived(callNegotiateContent)
|
||||
}
|
||||
|
||||
override fun onCallAssertedIdentityReceived(callAssertedIdentityContent: CallAssertedIdentityContent) = dispatch {
|
||||
it.onCallAssertedIdentityReceived(callAssertedIdentityContent)
|
||||
}
|
||||
|
||||
private fun dispatch(lambda: (CallListener) -> Unit) {
|
||||
listeners.toList().forEach {
|
||||
tryOrNull {
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.matrix.android.sdk.api.session.events.model.Event
|
|||
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAnswerContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAssertedIdentityContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallCandidatesContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent
|
||||
|
@ -53,30 +54,44 @@ internal class CallSignalingHandler @Inject constructor(private val activeCallHa
|
|||
|
||||
fun onCallEvent(event: Event) {
|
||||
when (event.getClearType()) {
|
||||
EventType.CALL_ANSWER -> {
|
||||
EventType.CALL_ANSWER -> {
|
||||
handleCallAnswerEvent(event)
|
||||
}
|
||||
EventType.CALL_INVITE -> {
|
||||
EventType.CALL_INVITE -> {
|
||||
handleCallInviteEvent(event)
|
||||
}
|
||||
EventType.CALL_HANGUP -> {
|
||||
EventType.CALL_HANGUP -> {
|
||||
handleCallHangupEvent(event)
|
||||
}
|
||||
EventType.CALL_REJECT -> {
|
||||
EventType.CALL_REJECT -> {
|
||||
handleCallRejectEvent(event)
|
||||
}
|
||||
EventType.CALL_CANDIDATES -> {
|
||||
EventType.CALL_CANDIDATES -> {
|
||||
handleCallCandidatesEvent(event)
|
||||
}
|
||||
EventType.CALL_SELECT_ANSWER -> {
|
||||
EventType.CALL_SELECT_ANSWER -> {
|
||||
handleCallSelectAnswerEvent(event)
|
||||
}
|
||||
EventType.CALL_NEGOTIATE -> {
|
||||
EventType.CALL_NEGOTIATE -> {
|
||||
handleCallNegotiateEvent(event)
|
||||
}
|
||||
EventType.CALL_ASSERTED_IDENTITY,
|
||||
EventType.CALL_ASSERTED_IDENTITY_PREFIX -> {
|
||||
handleCallAssertedIdentityEvent(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCallAssertedIdentityEvent(event: Event) {
|
||||
val content = event.getClearContent().toModel<CallAssertedIdentityContent>() ?: return
|
||||
val call = content.getCall() ?: return
|
||||
if (call.ourPartyId == content.partyId) {
|
||||
// Ignore remote echo (not that we send asserted identity, but still...)
|
||||
return
|
||||
}
|
||||
callListenersDispatcher.onCallAssertedIdentityReceived(content)
|
||||
}
|
||||
|
||||
private fun handleCallNegotiateEvent(event: Event) {
|
||||
val content = event.getClearContent().toModel<CallNegotiateContent>() ?: return
|
||||
val call = content.getCall() ?: return
|
||||
|
|
|
@ -51,6 +51,7 @@ import org.matrix.android.sdk.api.session.call.MxCall
|
|||
import org.matrix.android.sdk.api.session.call.MxPeerConnectionState
|
||||
import org.matrix.android.sdk.api.session.call.TurnServerResponse
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAnswerContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAssertedIdentityContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallCandidatesContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent
|
||||
|
@ -104,6 +105,7 @@ class WebRtcCall(
|
|||
fun onCaptureStateChanged() {}
|
||||
fun onCameraChanged() {}
|
||||
fun onHoldUnhold() {}
|
||||
fun assertedIdentityChanged() {}
|
||||
fun onTick(formattedDuration: String) {}
|
||||
override fun onStateUpdate(call: MxCall) {}
|
||||
}
|
||||
|
@ -168,6 +170,8 @@ class WebRtcCall(
|
|||
|
||||
// This value is used to track localOnHold when changing remoteOnHold value
|
||||
private var wasLocalOnHold = false
|
||||
var remoteAssertedIdentity: CallAssertedIdentityContent.AssertedIdentity? = null
|
||||
private set
|
||||
|
||||
var offerSdp: CallInviteContent.Offer? = null
|
||||
|
||||
|
@ -877,6 +881,14 @@ class WebRtcCall(
|
|||
}
|
||||
}
|
||||
|
||||
fun onCallAssertedIdentityReceived(callAssertedIdentityContent: CallAssertedIdentityContent) {
|
||||
if (callAssertedIdentityContent.assertedIdentity == null) return
|
||||
remoteAssertedIdentity = callAssertedIdentityContent.assertedIdentity
|
||||
listeners.forEach {
|
||||
tryOrNull { it.assertedIdentityChanged() }
|
||||
}
|
||||
}
|
||||
|
||||
// MxCall.StateListener
|
||||
|
||||
override fun onStateUpdate(call: MxCall) {
|
||||
|
|
|
@ -37,6 +37,7 @@ import org.matrix.android.sdk.api.session.call.CallListener
|
|||
import org.matrix.android.sdk.api.session.call.CallState
|
||||
import org.matrix.android.sdk.api.session.call.MxCall
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAnswerContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallAssertedIdentityContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallCandidatesContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
||||
import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent
|
||||
|
@ -420,4 +421,12 @@ class WebRtcCallManager @Inject constructor(
|
|||
Timber.v("## VOIP onCallManagedByOtherSession: $callId")
|
||||
onCallEnded(callId)
|
||||
}
|
||||
|
||||
override fun onCallAssertedIdentityReceived(callAssertedIdentityContent: CallAssertedIdentityContent) {
|
||||
val call = callsByCallId[callAssertedIdentityContent.callId]
|
||||
?: return Unit.also {
|
||||
Timber.w("onCallAssertedIdentityReceived for non active call? ${callAssertedIdentityContent.callId}")
|
||||
}
|
||||
call.onCallAssertedIdentityReceived(callAssertedIdentityContent)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue