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 2d20f6417..4c6b7be0e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -220,11 +220,7 @@ public class CallController extends BaseController { conversationPassword = args.getString(BundleKeys.KEY_CONVERSATION_PASSWORD, ""); isVoiceOnlyCall = args.getBoolean(BundleKeys.KEY_CALL_VOICE_ONLY, false); - if (conversationUser.getUserId().equals("?")) { - credentials = null; - } else { - credentials = ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()); - } + credentials = ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()); baseUrl = args.getString(BundleKeys.KEY_MODIFIED_BASE_URL, ""); @@ -1158,7 +1154,8 @@ public class CallController extends BaseController { webSocketConnectionHelper = new WebSocketConnectionHelper(); webSocketClient = webSocketConnectionHelper.getExternalSignalingInstanceForServer( externalSignalingServer.getExternalSignalingServer(), - conversationUser, externalSignalingServer.getExternalSignalingTicket()); + conversationUser, externalSignalingServer.getExternalSignalingTicket(), + TextUtils.isEmpty(credentials)); if (webSocketClient.isConnected()) { joinRoomAndCall(); @@ -1336,6 +1333,11 @@ public class CallController extends BaseController { localAudioTrack = null; localVideoTrack = null; + + if (TextUtils.isEmpty(credentials) && hasExternalSignalingServer) { + WebSocketConnectionHelper.deleteExternalSignalingInstanceForUserEntity(-1); + } + if (!dueToNetworkChange) { hangupNetworkCalls(); } else { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java index 953365f2d..c3c86ea2e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java @@ -892,7 +892,7 @@ public class ChatController extends BaseController implements MessagesListAdapte chatMessage.setLinkPreviewAllowed(isLinkPreviewAllowed); // if credentials are empty, we're acting as a guest - if (TextUtils.isEmpty(credentials) && !TextUtils.isEmpty(myFirstMessage.toString())) { + if (TextUtils.isEmpty(credentials) && myFirstMessage != null && !TextUtils.isEmpty(myFirstMessage.toString())) { if (chatMessage.getActorType().equals("guests")) { conversationUser.setUserId(chatMessage.getActorId()); setSenderId(); diff --git a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java index 31a84f805..8e17c07ce 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.java @@ -70,7 +70,8 @@ public class WebsocketConnectionsWorker extends Worker { !TextUtils.isEmpty(externalSignalingServer.getExternalSignalingTicket())) { webSocketConnectionHelper.getExternalSignalingInstanceForServer( externalSignalingServer.getExternalSignalingServer(), - userEntity, externalSignalingServer.getExternalSignalingTicket()); + userEntity, externalSignalingServer.getExternalSignalingTicket(), + false); } } catch (IOException e) { Log.e(TAG, "Failed to parse external signaling server"); diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java index dc96530f4..4512e4880 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.java @@ -20,8 +20,8 @@ package com.nextcloud.talk.utils; import android.net.Uri; -import androidx.annotation.DimenRes; -import androidx.annotation.Nullable; + +import android.text.TextUtils; import com.nextcloud.talk.BuildConfig; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; @@ -209,6 +209,9 @@ public class ApiUtils { } public static String getCredentials(String username, String token) { + if (TextUtils.isEmpty(username) && TextUtils.isEmpty(token)) { + return null; + } return Credentials.basic(username, token); } diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java index 3fdc35f89..90daee0d9 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java @@ -44,7 +44,7 @@ public class WebSocketConnectionHelper { NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); } - public static synchronized MagicWebSocketInstance getExternalSignalingInstanceForServer(String url, UserEntity userEntity, String webSocketTicket) { + public static synchronized MagicWebSocketInstance getExternalSignalingInstanceForServer(String url, UserEntity userEntity, String webSocketTicket, boolean isGuest) { String generatedURL = url.replace("https://", "wss://").replace("http://", "ws://"); if (generatedURL.endsWith("/")) { @@ -53,10 +53,16 @@ public class WebSocketConnectionHelper { generatedURL += "/spreed"; } + long userId = isGuest ? -1 : userEntity.getId(); + + MagicWebSocketInstance magicWebSocketInstance; - if (magicWebSocketInstanceMap.containsKey(userEntity.getId()) && (magicWebSocketInstance = magicWebSocketInstanceMap.get(userEntity.getId())) != null && !magicWebSocketInstance.isPermanentlyClosed()) { + if (userId != -1 && magicWebSocketInstanceMap.containsKey(userEntity.getId()) && (magicWebSocketInstance = magicWebSocketInstanceMap.get(userEntity.getId())) != null && !magicWebSocketInstance.isPermanentlyClosed()) { return magicWebSocketInstance; } else { + if (userId == -1) { + deleteExternalSignalingInstanceForUserEntity(userId); + } magicWebSocketInstance = new MagicWebSocketInstance(userEntity, generatedURL, webSocketTicket); magicWebSocketInstanceMap.put(userEntity.getId(), magicWebSocketInstance); return magicWebSocketInstance;