diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java index f300d47e0..d750e8375 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -1283,7 +1283,7 @@ public class CallController extends BaseController { if (ncSignalingMessage.getRoomType().equals("video") || ncSignalingMessage.getRoomType().equals("screen")) { MagicPeerConnectionWrapper magicPeerConnectionWrapper = getPeerConnectionWrapperForSessionIdAndType(ncSignalingMessage.getFrom(), - ncSignalingMessage.getRoomType(),false); + ncSignalingMessage.getRoomType(), false); String type = null; if (ncSignalingMessage.getPayload() != null && ncSignalingMessage.getPayload().getType() != null) { @@ -1505,7 +1505,7 @@ public class CallController extends BaseController { hasMCU = hasExternalSignalingServer && webSocketClient != null && webSocketClient.hasMCU(); for (String sessionId : newSessions) { - getPeerConnectionWrapperForSessionIdAndType(sessionId, "video",hasMCU && sessionId.equals(webSocketClient.getSessionId())); + getPeerConnectionWrapperForSessionIdAndType(sessionId, "video", hasMCU && sessionId.equals(webSocketClient.getSessionId())); } for (String sessionId : oldSesssions) { @@ -1600,17 +1600,12 @@ public class CallController extends BaseController { private void endPeerConnection(String sessionId, boolean justScreen) { List magicPeerConnectionWrappers; MagicPeerConnectionWrapper magicPeerConnectionWrapper; - if (!(magicPeerConnectionWrappers = getPeerConnectionWrapperListForSessionId(sessionId)).isEmpty() && getActivity() - != null) { + if (!(magicPeerConnectionWrappers = getPeerConnectionWrapperListForSessionId(sessionId)).isEmpty() + && getActivity() != null) { for (int i = 0; i < magicPeerConnectionWrappers.size(); i++) { magicPeerConnectionWrapper = magicPeerConnectionWrappers.get(i); if (magicPeerConnectionWrapper.getSessionId().equals(sessionId)) { - if (magicPeerConnectionWrapper.getVideoStreamType().equals("screen")) { - MagicPeerConnectionWrapper finalMagicPeerConnectionWrapper = magicPeerConnectionWrapper; - getActivity().runOnUiThread(() -> removeMediaStream(sessionId + "+" + - finalMagicPeerConnectionWrapper.getVideoStreamType())); - deleteMagicPeerConnection(magicPeerConnectionWrapper); - } else if (!justScreen) { + if (magicPeerConnectionWrapper.getVideoStreamType().equals("screen") || !justScreen) { MagicPeerConnectionWrapper finalMagicPeerConnectionWrapper = magicPeerConnectionWrapper; getActivity().runOnUiThread(() -> removeMediaStream(sessionId + "+" + finalMagicPeerConnectionWrapper.getVideoStreamType())); @@ -1650,7 +1645,7 @@ public class CallController extends BaseController { public void onMessageEvent(PeerConnectionEvent peerConnectionEvent) { if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent.PeerConnectionEventType .PEER_CLOSED)) { - endPeerConnection(peerConnectionEvent.getSessionId(), false); + endPeerConnection(peerConnectionEvent.getSessionId(), peerConnectionEvent.getVideoStreamType().equals("screen")); } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent .PeerConnectionEventType.SENSOR_FAR) || peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent @@ -1667,7 +1662,7 @@ public class CallController extends BaseController { } } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent .PeerConnectionEventType.NICK_CHANGE)) { - gotNick(peerConnectionEvent.getSessionId() + "+" + peerConnectionEvent.getVideoStreamType(), peerConnectionEvent.getNick(), true); + gotNick(peerConnectionEvent.getSessionId(), peerConnectionEvent.getNick(), true, peerConnectionEvent.getVideoStreamType()); } else if (peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent .PeerConnectionEventType.VIDEO_CHANGE) && !isVoiceOnlyCall) { gotAudioOrVideoChange(true, peerConnectionEvent.getSessionId() + "+" + peerConnectionEvent.getVideoStreamType(), @@ -1906,9 +1901,9 @@ public class CallController extends BaseController { surfaceViewRenderer.setOnClickListener(videoOnClickListener); remoteRenderersLayout.addView(relativeLayout); if (hasExternalSignalingServer) { - gotNick(session + "+" + type, webSocketClient.getDisplayNameForSession(session), false); + gotNick(session, webSocketClient.getDisplayNameForSession(session), false, type); } else { - gotNick(session + "+" + type, getPeerConnectionWrapperForSessionIdAndType(session, "video", false).getNick(), false); + gotNick(session, getPeerConnectionWrapperForSessionIdAndType(session, type, false).getNick(), false, type); } if ("video".equals(type)) { @@ -1920,12 +1915,14 @@ public class CallController extends BaseController { } } - private void gotNick(String sessionOrUserId, String nick, boolean isFromAnEvent) { + private void gotNick(String sessionOrUserId, String nick, boolean isFromAnEvent, String type) { if (isFromAnEvent && hasExternalSignalingServer) { // get session based on userId sessionOrUserId = webSocketClient.getSessionForUserId(sessionOrUserId); } + sessionOrUserId += "+" + type; + if (relativeLayout != null) { RelativeLayout relativeLayout = remoteRenderersLayout.findViewWithTag(sessionOrUserId); TextView textView = relativeLayout.findViewById(R.id.peer_nick_text_view); diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java index f88ed99dc..83f2eaf43 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java @@ -29,6 +29,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.events.WebSocketCommunicationEvent; import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.signaling.NCMessageWrapper; +import com.nextcloud.talk.models.json.signaling.NCSignalingMessage; import com.nextcloud.talk.models.json.websocket.BaseWebSocketMessage; import com.nextcloud.talk.models.json.websocket.ByeWebSocketMessage; import com.nextcloud.talk.models.json.websocket.CallOverallWebSocketMessage; @@ -201,9 +202,14 @@ public class MagicWebSocketInstance extends WebSocketListener { break; case "message": CallOverallWebSocketMessage callOverallWebSocketMessage = LoganSquare.parse(text, CallOverallWebSocketMessage.class); - if (callOverallWebSocketMessage.getCallWebSocketMessage().getNcSignalingMessage().getFrom() != null) { + NCSignalingMessage ncSignalingMessage = callOverallWebSocketMessage.getCallWebSocketMessage().getNcSignalingMessage(); + if (TextUtils.isEmpty(ncSignalingMessage.getFrom()) && callOverallWebSocketMessage.getCallWebSocketMessage().getSenderWebSocketMessage() != null) { + ncSignalingMessage.setFrom(callOverallWebSocketMessage.getCallWebSocketMessage().getSenderWebSocketMessage().getSessionId()); + } + + if (!TextUtils.isEmpty(ncSignalingMessage.getFrom())) { HashMap messageHashMap = new HashMap<>(); - messageHashMap.put("jobId", Integer.toString(magicMap.add(callOverallWebSocketMessage.getCallWebSocketMessage().getNcSignalingMessage()))); + messageHashMap.put("jobId", Integer.toString(magicMap.add(ncSignalingMessage))); eventBus.post(new WebSocketCommunicationEvent("signalingMessage", messageHashMap)); } break;