From 7b619e5ae9e4500b1e1f95ad83ed61164333c76a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= Date: Wed, 30 Nov 2022 10:08:43 +0100 Subject: [PATCH] Add and remove nick provider listeners based on the peer connections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Although the OfferNickProvider itself is still added and removed based on the call participant the listeners for the video and screen connections are now added and removed based on the actual peer connections that they listen to. Signed-off-by: Daniel Calviño Sánchez --- .../talk/activities/CallActivity.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index 49fcb6d6a..05f678829 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -2013,6 +2013,17 @@ public class CallActivity extends CallBaseActivity { } else { callParticipant.setPeerConnectionWrapper(peerConnectionWrapper); } + + if (!hasExternalSignalingServer) { + OfferAnswerNickProvider offerAnswerNickProvider = offerAnswerNickProviders.get(sessionId); + if ("screen".equals(type)) { + signalingMessageReceiver.addListener(offerAnswerNickProvider.getScreenWebRtcMessageListener(), + sessionId, "screen"); + } else { + signalingMessageReceiver.addListener(offerAnswerNickProvider.getVideoWebRtcMessageListener(), + sessionId, "video"); + } + } } if (publisher) { @@ -2037,8 +2048,6 @@ public class CallActivity extends CallBaseActivity { if (!hasExternalSignalingServer) { OfferAnswerNickProvider offerAnswerNickProvider = new OfferAnswerNickProvider(sessionId); offerAnswerNickProviders.put(sessionId, offerAnswerNickProvider); - signalingMessageReceiver.addListener(offerAnswerNickProvider.getVideoWebRtcMessageListener(), sessionId, "video"); - signalingMessageReceiver.addListener(offerAnswerNickProvider.getScreenWebRtcMessageListener(), sessionId, "screen"); } final CallParticipantModel callParticipantModel = callParticipant.getCallParticipantModel(); @@ -2074,6 +2083,15 @@ public class CallActivity extends CallBaseActivity { } } + if (!hasExternalSignalingServer) { + OfferAnswerNickProvider offerAnswerNickProvider = offerAnswerNickProviders.get(sessionId); + if ("screen".equals(type)) { + signalingMessageReceiver.removeListener(offerAnswerNickProvider.getScreenWebRtcMessageListener()); + } else { + signalingMessageReceiver.removeListener(offerAnswerNickProvider.getVideoWebRtcMessageListener()); + } + } + peerConnectionWrapper.removePeerConnection(); peerConnectionWrapperList.remove(peerConnectionWrapper); } @@ -2093,11 +2111,7 @@ public class CallActivity extends CallBaseActivity { SignalingMessageReceiver.CallParticipantMessageListener listener = callParticipantMessageListeners.remove(sessionId); signalingMessageReceiver.removeListener(listener); - OfferAnswerNickProvider offerAnswerNickProvider = offerAnswerNickProviders.remove(sessionId); - if (offerAnswerNickProvider != null) { - signalingMessageReceiver.removeListener(offerAnswerNickProvider.getVideoWebRtcMessageListener()); - signalingMessageReceiver.removeListener(offerAnswerNickProvider.getScreenWebRtcMessageListener()); - } + offerAnswerNickProviders.remove(sessionId); runOnUiThread(() -> removeParticipantDisplayItem(sessionId, "video")); }