Эх сурвалжийг харах

Use listeners for local participant signaling messages

This commit only sets up the listeners, but the actual handling of the
"switchto" event still needs to be added.

Note that in CallActivity the SignalingMessageReceiver is available both
when using the internal and the external signaling server. On the other
hand, in ChatController it is available only for the external signaling
server. Right now that is not a problem, as the message notified by the
LocalParticipantMessageListener is currently sent only by the external
signaling server, but this may need to be adjusted in the future.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
Daniel Calviño Sánchez 2 жил өмнө
parent
commit
c67ce4253f

+ 10 - 0
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

@@ -304,6 +304,13 @@ public class CallActivity extends CallBaseActivity {
 
     private CallParticipantList callParticipantList;
 
+    private SignalingMessageReceiver.LocalParticipantMessageListener localParticipantMessageListener =
+        new SignalingMessageReceiver.LocalParticipantMessageListener() {
+            @Override
+            public void onSwitchTo(String token) {
+            }
+        };
+
     private SignalingMessageReceiver.OfferMessageListener offerMessageListener = new SignalingMessageReceiver.OfferMessageListener() {
         @Override
         public void onOffer(String sessionId, String roomType, String sdp, String nick) {
@@ -1319,6 +1326,7 @@ public class CallActivity extends CallBaseActivity {
     @Override
     public void onDestroy() {
         if (signalingMessageReceiver != null) {
+            signalingMessageReceiver.removeListener(localParticipantMessageListener);
             signalingMessageReceiver.removeListener(offerMessageListener);
         }
 
@@ -1453,6 +1461,7 @@ public class CallActivity extends CallBaseActivity {
                         setupAndInitiateWebSocketsConnection();
                     } else {
                         signalingMessageReceiver = internalSignalingMessageReceiver;
+                        signalingMessageReceiver.addListener(localParticipantMessageListener);
                         signalingMessageReceiver.addListener(offerMessageListener);
                         signalingMessageSender = internalSignalingMessageSender;
                         joinRoomAndCall();
@@ -1662,6 +1671,7 @@ public class CallActivity extends CallBaseActivity {
             // Although setupAndInitiateWebSocketsConnection could be called several times the web socket is
             // initialized just once, so the message receiver is also initialized just once.
             signalingMessageReceiver = webSocketClient.getSignalingMessageReceiver();
+            signalingMessageReceiver.addListener(localParticipantMessageListener);
             signalingMessageReceiver.addListener(offerMessageListener);
             signalingMessageSender = webSocketClient.getSignalingMessageSender();
         } else {

+ 17 - 0
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -151,6 +151,7 @@ import com.nextcloud.talk.presenters.MentionAutocompletePresenter
 import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
 import com.nextcloud.talk.repositories.reactions.ReactionsRepository
 import com.nextcloud.talk.shareditems.activities.SharedItemsActivity
+import com.nextcloud.talk.signaling.SignalingMessageReceiver
 import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet
 import com.nextcloud.talk.ui.dialog.AttachmentDialog
 import com.nextcloud.talk.ui.dialog.MessageActionsDialog
@@ -299,6 +300,11 @@ class ChatController(args: Bundle) :
 
     private var videoURI: Uri? = null
 
+    private val localParticipantMessageListener = object : SignalingMessageReceiver.LocalParticipantMessageListener {
+        override fun onSwitchTo(token: String?) {
+        }
+    }
+
     init {
         Log.d(TAG, "init ChatController: " + System.identityHashCode(this).toString())
 
@@ -1747,6 +1753,8 @@ class ChatController(args: Bundle) :
 
         eventBus.register(this)
 
+        webSocketInstance?.getSignalingMessageReceiver()?.addListener(localParticipantMessageListener)
+
         if (conversationUser?.userId != "?" &&
             CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "mention-flag") &&
             activity != null
@@ -1833,6 +1841,8 @@ class ChatController(args: Bundle) :
 
         eventBus.unregister(this)
 
+        webSocketInstance?.getSignalingMessageReceiver()?.removeListener(localParticipantMessageListener)
+
         if (activity != null) {
             activity?.findViewById<View>(R.id.toolbar)?.setOnClickListener(null)
         }
@@ -1935,8 +1945,15 @@ class ChatController(args: Bundle) :
                         ApplicationWideCurrentRoomHolder.getInstance().session =
                             currentConversation?.sessionId
 
+                        // FIXME The web socket should be set up in onAttach(). It is currently setup after joining the
+                        // room to "ensure" (rather, increase the chances) that the WebsocketConnectionsWorker job
+                        // was able to finish and, therefore, that the web socket instance can be got.
                         setupWebsocket()
 
+                        // Ensure that the listener is added if the web socket instance was not set up yet when
+                        // onAttach() was called.
+                        webSocketInstance?.getSignalingMessageReceiver()?.addListener(localParticipantMessageListener)
+
                         checkLobbyState()
 
                         if (isFirstMessagesProcessing) {