mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-21 04:29:45 +01:00
Move nick handling out of PeerConnectionWrapper
PeerConnectionWrappers should not be concerned with the nick of participants. Moreover, the nick is included in offers and answers due to legacy reasons and only when the internal signaling server is used. Due to that the nick was moved out of PeerConnectionWrapper; although the handling is now different the end result should be the same (there might be some differences in very specific sequences of events, but in any case all this is just a temporary step and any leftover issue should be addressed once call participants and peer connections are split). As the PeerConnectionWrapper does not keep track of the nick now the nick changed event is always emitted when a nick changed data channel message is received, even if the nick did not actually change. Nevertheless, before it was anyway always emitted if it was for a user and only when it was for a guest it was emitted only on real changes. In any case this is not expected to cause any issue (other than some unneeded view updates, but that will be addressed at a later point by updating the views only when the model actually changed). Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
2eac8c2cba
commit
0dcdd6161f
@ -263,6 +263,8 @@ public class CallActivity extends CallBaseActivity {
|
||||
private InternalSignalingMessageSender internalSignalingMessageSender = new InternalSignalingMessageSender();
|
||||
private SignalingMessageSender signalingMessageSender;
|
||||
|
||||
private Map<String, OfferAnswerNickProvider> offerAnswerNickProviders = new HashMap<>();
|
||||
|
||||
private Map<String, SignalingMessageReceiver.CallParticipantMessageListener> callParticipantMessageListeners =
|
||||
new HashMap<>();
|
||||
|
||||
@ -2007,6 +2009,13 @@ public class CallActivity extends CallBaseActivity {
|
||||
signalingMessageReceiver.addListener(callParticipantMessageListener, sessionId);
|
||||
}
|
||||
|
||||
if (!publisher && !hasExternalSignalingServer && offerAnswerNickProviders.get(sessionId) == null) {
|
||||
OfferAnswerNickProvider offerAnswerNickProvider = new OfferAnswerNickProvider();
|
||||
offerAnswerNickProviders.put(sessionId, offerAnswerNickProvider);
|
||||
signalingMessageReceiver.addListener(offerAnswerNickProvider.getVideoWebRtcMessageListener(), sessionId, "video");
|
||||
signalingMessageReceiver.addListener(offerAnswerNickProvider.getScreenWebRtcMessageListener(), sessionId, "screen");
|
||||
}
|
||||
|
||||
if (publisher) {
|
||||
startSendingNick();
|
||||
}
|
||||
@ -2043,6 +2052,12 @@ public class CallActivity extends CallBaseActivity {
|
||||
if (!justScreen) {
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2264,7 +2279,7 @@ public class CallActivity extends CallBaseActivity {
|
||||
if (hasExternalSignalingServer) {
|
||||
nick = webSocketClient.getDisplayNameForSession(session);
|
||||
} else {
|
||||
nick = peerConnectionWrapper != null ? peerConnectionWrapper.getNick() : "";
|
||||
nick = offerAnswerNickProviders.get(session) != null ? offerAnswerNickProviders.get(session).getNick() : "";
|
||||
}
|
||||
|
||||
String userId4Usage = userId;
|
||||
@ -2561,6 +2576,47 @@ public class CallActivity extends CallBaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private static class OfferAnswerNickProvider {
|
||||
|
||||
private class WebRtcMessageListener implements SignalingMessageReceiver.WebRtcMessageListener {
|
||||
|
||||
@Override
|
||||
public void onOffer(String sdp, String nick) {
|
||||
(OfferAnswerNickProvider.this).nick = nick;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnswer(String sdp, String nick) {
|
||||
(OfferAnswerNickProvider.this).nick = nick;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCandidate(String sdpMid, int sdpMLineIndex, String sdp) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEndOfCandidates() {
|
||||
}
|
||||
}
|
||||
|
||||
private final WebRtcMessageListener videoWebRtcMessageListener = new WebRtcMessageListener();
|
||||
private final WebRtcMessageListener screenWebRtcMessageListener = new WebRtcMessageListener();
|
||||
|
||||
private String nick;
|
||||
|
||||
public WebRtcMessageListener getVideoWebRtcMessageListener() {
|
||||
return videoWebRtcMessageListener;
|
||||
}
|
||||
|
||||
public WebRtcMessageListener getScreenWebRtcMessageListener() {
|
||||
return screenWebRtcMessageListener;
|
||||
}
|
||||
|
||||
public String getNick() {
|
||||
return nick;
|
||||
}
|
||||
}
|
||||
|
||||
private class CallActivityCallParticipantMessageListener implements SignalingMessageReceiver.CallParticipantMessageListener {
|
||||
|
||||
private final String sessionId;
|
||||
|
@ -81,7 +81,6 @@ public class PeerConnectionWrapper {
|
||||
private List<IceCandidate> iceCandidates = new ArrayList<>();
|
||||
private PeerConnection peerConnection;
|
||||
private String sessionId;
|
||||
private String nick;
|
||||
private final MediaConstraints mediaConstraints;
|
||||
private DataChannel dataChannel;
|
||||
private final MagicSdpObserver magicSdpObserver;
|
||||
@ -220,14 +219,6 @@ public class PeerConnectionWrapper {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public String getNick() {
|
||||
return nick;
|
||||
}
|
||||
|
||||
private void setNick(String nick) {
|
||||
this.nick = nick;
|
||||
}
|
||||
|
||||
private void sendInitialMediaStatus() {
|
||||
if (localStream != null) {
|
||||
if (localStream.videoTracks.size() == 1 && localStream.videoTracks.get(0).enabled()) {
|
||||
@ -269,16 +260,14 @@ public class PeerConnectionWrapper {
|
||||
private class WebRtcMessageListener implements SignalingMessageReceiver.WebRtcMessageListener {
|
||||
|
||||
public void onOffer(String sdp, String nick) {
|
||||
onOfferOrAnswer("offer", sdp, nick);
|
||||
onOfferOrAnswer("offer", sdp);
|
||||
}
|
||||
|
||||
public void onAnswer(String sdp, String nick) {
|
||||
onOfferOrAnswer("answer", sdp, nick);
|
||||
onOfferOrAnswer("answer", sdp);
|
||||
}
|
||||
|
||||
private void onOfferOrAnswer(String type, String sdp, String nick) {
|
||||
setNick(nick);
|
||||
|
||||
private void onOfferOrAnswer(String type, String sdp) {
|
||||
SessionDescription sessionDescriptionWithPreferredCodec;
|
||||
|
||||
boolean isAudio = false;
|
||||
@ -334,15 +323,10 @@ public class PeerConnectionWrapper {
|
||||
try {
|
||||
DataChannelMessage dataChannelMessage = LoganSquare.parse(strData, DataChannelMessage.class);
|
||||
|
||||
String internalNick;
|
||||
if ("nickChanged".equals(dataChannelMessage.getType())) {
|
||||
if (dataChannelMessage.getPayload() instanceof String) {
|
||||
internalNick = (String) dataChannelMessage.getPayload();
|
||||
if (!internalNick.equals(nick)) {
|
||||
setNick(internalNick);
|
||||
EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
|
||||
.NICK_CHANGE, sessionId, getNick(), null, videoStreamType));
|
||||
}
|
||||
EventBus.getDefault().post(new PeerConnectionEvent(PeerConnectionEvent.PeerConnectionEventType
|
||||
.NICK_CHANGE, sessionId, (String) dataChannelMessage.getPayload(), null, videoStreamType));
|
||||
} else {
|
||||
if (dataChannelMessage.getPayload() != null) {
|
||||
Map<String, String> payloadMap = (Map<String, String>) dataChannelMessage.getPayload();
|
||||
|
Loading…
Reference in New Issue
Block a user