diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index fb4fc34c1..9ed5fa5aa 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -1591,7 +1591,7 @@ public class CallActivity extends CallBaseActivity { Log.d(TAG, " new callSession by joinRoom= " + callSession); ApplicationWideCurrentRoomHolder.getInstance().setSession(callSession); - ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(roomId); + ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(conversation.getRoomId()); ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomToken(roomToken); ApplicationWideCurrentRoomHolder.getInstance().setUserInRoom(conversationUser); callOrJoinRoomViaWebSocket(); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index ca75f6467..4b3909690 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -251,6 +251,7 @@ class ChatController(args: Bundle) : val disposables = DisposableSet() + var sessionIdAfterRoomJoined: String? = null var roomToken: String? = null val conversationUser: User? private val roomPassword: String @@ -526,13 +527,10 @@ class ChatController(args: Bundle) : override fun onViewBound(view: View) { Log.d(TAG, "onViewBound: " + System.identityHashCode(this).toString()) actionBar?.show() - var adapterWasNull = false if (adapter == null) { binding?.progressBar?.visibility = View.VISIBLE - adapterWasNull = true - val messageHolders = MessageHolders() val profileBottomSheet = ProfileBottomSheet(ncApi, conversationUser!!, router) @@ -917,14 +915,6 @@ class ChatController(args: Bundle) : setTitle() } - if (adapterWasNull) { - Log.d(TAG, "starting for the first time (because adapter was null)") - if (TextUtils.isEmpty(roomToken)) { - handleFromNotification() - } else { - getRoomInfo() - } - } super.onViewBound(view) } @@ -1787,8 +1777,8 @@ class ChatController(args: Bundle) : private fun validSessionId(): Boolean { return currentConversation != null && - !TextUtils.isEmpty(currentConversation?.sessionId) && - currentConversation?.sessionId != "0" + sessionIdAfterRoomJoined?.isNotEmpty() == true && + sessionIdAfterRoomJoined != "0" } @Suppress("Detekt.TooGenericExceptionCaught") @@ -1807,10 +1797,6 @@ class ChatController(args: Bundle) : activity?.findViewById(R.id.toolbar)?.setOnClickListener { v -> showConversationInfoScreen() } } - ApplicationWideCurrentRoomHolder.getInstance().currentRoomId = roomId - ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken = roomToken - ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser - val smileyButton = binding?.messageInputView?.findViewById(R.id.smileyButton) emojiPopup = binding?.messageInputView?.inputEditText?.let { @@ -1850,9 +1836,10 @@ class ChatController(args: Bundle) : cancelNotificationsForCurrentConversation() - if (!validSessionId()) { - Log.d(TAG, "execute joinRoomWithPassword in onAttach") - joinRoomWithPassword() + if (TextUtils.isEmpty(roomToken)) { + handleFromNotification() + } else { + getRoomInfo() } } @@ -1954,6 +1941,17 @@ class ChatController(args: Bundle) : } private fun joinRoomWithPassword() { + // if ApplicationWideCurrentRoomHolder contains a session (because a call is active), then keep the sessionId + if (ApplicationWideCurrentRoomHolder.getInstance().currentRoomId == + currentConversation!!.roomId + ) { + sessionIdAfterRoomJoined = ApplicationWideCurrentRoomHolder.getInstance().session + + ApplicationWideCurrentRoomHolder.getInstance().currentRoomId = roomId + ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken = roomToken + ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser + } + if (!validSessionId()) { Log.d(TAG, "sessionID was not valid -> joinRoom") var apiVersion = 1 @@ -1980,12 +1978,11 @@ class ChatController(args: Bundle) : @Suppress("Detekt.TooGenericExceptionCaught") override fun onNext(roomOverall: RoomOverall) { Log.d(TAG, "joinRoomWithPassword - joinRoom - got response: $startNanoTime") - currentConversation?.sessionId = roomOverall.ocs!!.data!!.sessionId + sessionIdAfterRoomJoined = roomOverall.ocs!!.data!!.sessionId logConversationInfos("joinRoomWithPassword#onNext") - ApplicationWideCurrentRoomHolder.getInstance().session = - currentConversation?.sessionId + ApplicationWideCurrentRoomHolder.getInstance().session = sessionIdAfterRoomJoined // 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 @@ -2007,7 +2004,7 @@ class ChatController(args: Bundle) : if (webSocketInstance != null) { webSocketInstance?.joinRoomWithRoomTokenAndSession( roomToken!!, - currentConversation?.sessionId + sessionIdAfterRoomJoined ) } if (startCallFromNotification != null && startCallFromNotification ?: false) { @@ -2031,11 +2028,10 @@ class ChatController(args: Bundle) : } else { Log.d(TAG, "sessionID was valid -> skip joinRoom") - ApplicationWideCurrentRoomHolder.getInstance().session = currentConversation?.sessionId if (webSocketInstance != null) { webSocketInstance?.joinRoomWithRoomTokenAndSession( roomToken!!, - currentConversation?.sessionId + sessionIdAfterRoomJoined ) } checkLobbyState() @@ -2089,7 +2085,7 @@ class ChatController(args: Bundle) : if (webSocketInstance != null && currentConversation != null) { webSocketInstance?.joinRoomWithRoomTokenAndSession( "", - currentConversation?.sessionId + sessionIdAfterRoomJoined ) } else { Log.e(TAG, "magicWebSocketInstance or currentConversation were null! Failed to leave the room!") @@ -2102,7 +2098,7 @@ class ChatController(args: Bundle) : } } - currentConversation?.sessionId = "0" + sessionIdAfterRoomJoined = "0" if (remapChatModel != null && funToCallWhenLeaveSuccessful != null) { Log.d(TAG, "a callback action was set and is now executed because room was left successfully") @@ -3498,7 +3494,7 @@ class ChatController(args: Bundle) : Log.d(TAG, " | ChatController: " + System.identityHashCode(this).toString()) Log.d(TAG, " | roomToken: $roomToken") Log.d(TAG, " | currentConversation?.displayName: ${currentConversation?.displayName}") - Log.d(TAG, " | currentConversation?.sessionId: ${currentConversation?.sessionId}") + Log.d(TAG, " | sessionIdAfterRoomJoined: $sessionIdAfterRoomJoined") Log.d(TAG, " |-----------------------------------------------") }