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 225c0579b..e1b0a4c0b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java @@ -1037,6 +1037,7 @@ public class CallController extends BaseController { @Override public void onNext(CallOverall callOverall) { callSession = callOverall.getOcs().getData().getSessionId(); + ApplicationWideCurrentRoomHolder.getInstance().setSession(callSession); callOrJoinRoomViaWebSocket(); } 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 96ee133be..f1bee3699 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java @@ -482,6 +482,7 @@ public class ChatController extends BaseController implements MessagesListAdapte ApplicationWideCurrentRoomHolder.getInstance().setInCall(false); ApplicationWideCurrentRoomHolder.getInstance().setUserInRoom(conversationUser); + if (mentionAutocomplete != null && mentionAutocomplete.isPopupShowing()) { mentionAutocomplete.dismissPopup(); } @@ -586,6 +587,7 @@ public class ChatController extends BaseController implements MessagesListAdapte public void onNext(CallOverall callOverall) { inChat = true; currentCall = callOverall.getOcs().getData(); + ApplicationWideCurrentRoomHolder.getInstance().setSession(currentCall.getSessionId()); startPing(); if (isFirstMessagesProcessing) { pullChatMessages(0); @@ -610,6 +612,7 @@ public class ChatController extends BaseController implements MessagesListAdapte }); } else { inChat = true; + ApplicationWideCurrentRoomHolder.getInstance().setSession(currentCall.getSessionId()); startPing(); if (isFirstMessagesProcessing) { pullChatMessages(0); @@ -996,7 +999,7 @@ public class ChatController extends BaseController implements MessagesListAdapte } private Intent getIntentForCall(boolean isVoiceOnlyCall) { - if (currentCall != null && !TextUtils.isEmpty(currentCall.getSessionId())) { + if (currentCall != null) { Bundle bundle = new Bundle(); bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomToken); bundle.putString(BundleKeys.KEY_ROOM_ID, roomId); diff --git a/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java index f4ac91c34..4676b183c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java +++ b/app/src/main/java/com/nextcloud/talk/utils/singletons/ApplicationWideCurrentRoomHolder.java @@ -27,6 +27,7 @@ public class ApplicationWideCurrentRoomHolder { private String currentRoomToken = ""; private UserEntity userInRoom = new UserEntity(); private boolean inCall = false; + private String session = ""; private static final ApplicationWideCurrentRoomHolder holder = new ApplicationWideCurrentRoomHolder(); @@ -39,6 +40,7 @@ public class ApplicationWideCurrentRoomHolder { userInRoom = new UserEntity(); inCall = false; currentRoomToken = ""; + session = ""; } public String getCurrentRoomToken() { @@ -72,4 +74,12 @@ public class ApplicationWideCurrentRoomHolder { public void setInCall(boolean inCall) { this.inCall = inCall; } + + public String getSession() { + return session; + } + + public void setSession(String session) { + this.session = session; + } } 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 0c71b3aad..207b250cd 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicWebSocketInstance.java @@ -35,6 +35,7 @@ import com.nextcloud.talk.models.json.websocket.EventOverallWebSocketMessage; import com.nextcloud.talk.models.json.websocket.HelloResponseOverallWebSocketMessage; import com.nextcloud.talk.models.json.websocket.JoinedRoomOverallWebSocketMessage; import com.nextcloud.talk.utils.MagicMap; +import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder; import org.greenrobot.eventbus.EventBus; @@ -75,6 +76,8 @@ public class MagicWebSocketInstance extends WebSocketListener { private String currentRoomToken; + int restartCount = 0; + MagicWebSocketInstance(UserEntity conversationUser, String connectionUrl, String webSocketTicket) { NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); @@ -115,6 +118,7 @@ public class MagicWebSocketInstance extends WebSocketListener { switch (messageType) { case "hello": connected = true; + restartCount = 0; HelloResponseOverallWebSocketMessage helloResponseWebSocketMessage = LoganSquare.parse(text, HelloResponseOverallWebSocketMessage.class); resumeId = helloResponseWebSocketMessage.getHelloResponseWebSocketMessage().getResumeId(); sessionId = helloResponseWebSocketMessage.getHelloResponseWebSocketMessage().getSessionId(); @@ -205,7 +209,9 @@ public class MagicWebSocketInstance extends WebSocketListener { public void onFailure(WebSocket webSocket, Throwable t, Response response) { Log.d(TAG, "Error : " + t.getMessage()); connected = false; - restartWebSocket(); + if (restartCount < 4) { + restartWebSocket(); + } } public String getSessionId() {