Forráskód Böngészése

Use temporary SignalingMessageReceiver implementation in CallActivity

Eventually all signaling related code should be moved to a Signaling
class that abstracts the differences between the internal and external
signaling servers, including how messages are sent and listened to. In
the meantime a temporary SignalingMessageReceiver implementation is
added to CallActivity to be able to start using it.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez 2 éve
szülő
commit
476fb59a08

+ 23 - 40
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

@@ -78,7 +78,6 @@ import com.nextcloud.talk.models.json.participants.Participant;
 import com.nextcloud.talk.models.json.participants.ParticipantsOverall;
 import com.nextcloud.talk.models.json.signaling.DataChannelMessage;
 import com.nextcloud.talk.models.json.signaling.DataChannelMessageNick;
-import com.nextcloud.talk.models.json.signaling.NCIceCandidate;
 import com.nextcloud.talk.models.json.signaling.NCMessagePayload;
 import com.nextcloud.talk.models.json.signaling.NCMessageWrapper;
 import com.nextcloud.talk.models.json.signaling.NCSignalingMessage;
@@ -86,6 +85,7 @@ import com.nextcloud.talk.models.json.signaling.Signaling;
 import com.nextcloud.talk.models.json.signaling.SignalingOverall;
 import com.nextcloud.talk.models.json.signaling.settings.IceServer;
 import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall;
+import com.nextcloud.talk.signaling.SignalingMessageReceiver;
 import com.nextcloud.talk.ui.dialog.AudioOutputDialog;
 import com.nextcloud.talk.users.UserManager;
 import com.nextcloud.talk.utils.ApiUtils;
@@ -264,6 +264,8 @@ public class CallActivity extends CallBaseActivity {
 
     private SpotlightView spotlightView;
 
+    private CallActivitySignalingMessageReceiver signalingMessageReceiver = new CallActivitySignalingMessageReceiver();
+
     private ExternalSignalingServer externalSignalingServer;
     private MagicWebSocketInstance webSocketClient;
     private WebSocketConnectionHelper webSocketConnectionHelper;
@@ -1670,44 +1672,12 @@ public class CallActivity extends CallBaseActivity {
                 return;
             }
 
-            PeerConnectionWrapper peerConnectionWrapper = null;
-
             if ("offer".equals(type)) {
-                peerConnectionWrapper =
-                    getOrCreatePeerConnectionWrapperForSessionIdAndType(ncSignalingMessage.getFrom(),
-                                                                        ncSignalingMessage.getRoomType(), false);
-            } else {
-                peerConnectionWrapper =
-                    getPeerConnectionWrapperForSessionIdAndType(ncSignalingMessage.getFrom(),
-                                                                ncSignalingMessage.getRoomType());
+                getOrCreatePeerConnectionWrapperForSessionIdAndType(ncSignalingMessage.getFrom(),
+                                                                    ncSignalingMessage.getRoomType(), false);
             }
 
-            if (peerConnectionWrapper == null) {
-                return;
-            }
-
-            String sdp = ncSignalingMessage.getPayload().getSdp();
-            String nick = ncSignalingMessage.getPayload().getNick();
-
-            switch (type) {
-                case "offer":
-                    peerConnectionWrapper.getWebRtcMessageListener().onOffer(sdp, nick);
-                    break;
-                case "answer":
-                    peerConnectionWrapper.getWebRtcMessageListener().onAnswer(sdp, nick);
-                    break;
-                case "candidate":
-                    NCIceCandidate ncIceCandidate = ncSignalingMessage.getPayload().getIceCandidate();
-                    peerConnectionWrapper.getWebRtcMessageListener().onCandidate(ncIceCandidate.getSdpMid(),
-                                                                                 ncIceCandidate.getSdpMLineIndex(),
-                                                                                 ncIceCandidate.getCandidate());
-                    break;
-                case "endOfCandidates":
-                    peerConnectionWrapper.getWebRtcMessageListener().onEndOfCandidates();
-                    break;
-                default:
-                    break;
-            }
+            signalingMessageReceiver.process(ncSignalingMessage);
         } else {
             Log.e(TAG, "unexpected RoomType while processing NCSignalingMessage");
         }
@@ -2010,7 +1980,8 @@ public class CallActivity extends CallBaseActivity {
                                                                   localStream,
                                                                   true,
                                                                   true,
-                                                                  type);
+                                                                  type,
+                                                                  signalingMessageReceiver);
 
             } else if (hasMCU) {
                 peerConnectionWrapper = new PeerConnectionWrapper(peerConnectionFactory,
@@ -2021,7 +1992,8 @@ public class CallActivity extends CallBaseActivity {
                                                                   null,
                                                                   false,
                                                                   true,
-                                                                  type);
+                                                                  type,
+                                                                  signalingMessageReceiver);
             } else {
                 if (!"screen".equals(type)) {
                     peerConnectionWrapper = new PeerConnectionWrapper(peerConnectionFactory,
@@ -2032,7 +2004,8 @@ public class CallActivity extends CallBaseActivity {
                                                                       localStream,
                                                                       false,
                                                                       false,
-                                                                      type);
+                                                                      type,
+                                                                      signalingMessageReceiver);
                 } else {
                     peerConnectionWrapper = new PeerConnectionWrapper(peerConnectionFactory,
                                                                       iceServers,
@@ -2042,7 +2015,8 @@ public class CallActivity extends CallBaseActivity {
                                                                       null,
                                                                       false,
                                                                       false,
-                                                                      type);
+                                                                      type,
+                                                                      signalingMessageReceiver);
                 }
             }
 
@@ -2653,6 +2627,15 @@ public class CallActivity extends CallBaseActivity {
         }
     }
 
+    /**
+     * Temporary implementation of SignalingMessageReceiver until signaling related code is extracted from CallActivity.
+     */
+    private static class CallActivitySignalingMessageReceiver extends SignalingMessageReceiver {
+        public void process(NCSignalingMessage message) {
+            processSignalingMessage(message);
+        }
+    }
+
     private class MicrophoneButtonTouchListener implements View.OnTouchListener {
 
         @SuppressLint("ClickableViewAccessibility")

+ 10 - 6
app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java

@@ -37,6 +37,7 @@ import com.nextcloud.talk.events.WebSocketCommunicationEvent;
 import com.nextcloud.talk.models.json.signaling.DataChannelMessage;
 import com.nextcloud.talk.models.json.signaling.DataChannelMessageNick;
 import com.nextcloud.talk.models.json.signaling.NCIceCandidate;
+import com.nextcloud.talk.signaling.SignalingMessageReceiver;
 
 import org.greenrobot.eventbus.EventBus;
 import org.webrtc.AudioTrack;
@@ -74,6 +75,7 @@ public class PeerConnectionWrapper {
 
     private static final String TAG = PeerConnectionWrapper.class.getCanonicalName();
 
+    private final SignalingMessageReceiver signalingMessageReceiver;
     private final WebRtcMessageListener webRtcMessageListener = new WebRtcMessageListener();
 
     private List<IceCandidate> iceCandidates = new ArrayList<>();
@@ -98,7 +100,8 @@ public class PeerConnectionWrapper {
                                  List<PeerConnection.IceServer> iceServerList,
                                  MediaConstraints mediaConstraints,
                                  String sessionId, String localSession, @Nullable MediaStream localStream,
-                                 boolean isMCUPublisher, boolean hasMCU, String videoStreamType) {
+                                 boolean isMCUPublisher, boolean hasMCU, String videoStreamType,
+                                 SignalingMessageReceiver signalingMessageReceiver) {
 
         Objects.requireNonNull(NextcloudTalkApplication.Companion.getSharedApplication()).getComponentApplication().inject(this);
 
@@ -116,6 +119,9 @@ public class PeerConnectionWrapper {
         configuration.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN;
         peerConnection = peerConnectionFactory.createPeerConnection(configuration, new MagicPeerConnectionObserver());
 
+        this.signalingMessageReceiver = signalingMessageReceiver;
+        this.signalingMessageReceiver.addListener(webRtcMessageListener, sessionId, videoStreamType);
+
         if (peerConnection != null) {
             if (this.localStream != null) {
                 List<String> localStreamIds = Collections.singletonList(this.localStream.getId());
@@ -152,6 +158,8 @@ public class PeerConnectionWrapper {
     }
 
     public void removePeerConnection() {
+        signalingMessageReceiver.removeListener(webRtcMessageListener);
+
         if (dataChannel != null) {
             dataChannel.dispose();
             dataChannel = null;
@@ -261,11 +269,7 @@ public class PeerConnectionWrapper {
         return false;
     }
 
-    public WebRtcMessageListener getWebRtcMessageListener() {
-        return webRtcMessageListener;
-    }
-
-    public class WebRtcMessageListener {
+    private class WebRtcMessageListener implements SignalingMessageReceiver.WebRtcMessageListener {
 
         public void onOffer(String sdp, String nick) {
             onOfferOrAnswer("offer", sdp, nick);