|
@@ -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<View>(R.id.toolbar)?.setOnClickListener { v -> showConversationInfoScreen() }
|
|
|
}
|
|
|
|
|
|
- ApplicationWideCurrentRoomHolder.getInstance().currentRoomId = roomId
|
|
|
- ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken = roomToken
|
|
|
- ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser
|
|
|
-
|
|
|
val smileyButton = binding?.messageInputView?.findViewById<ImageButton>(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, " |-----------------------------------------------")
|
|
|
}
|
|
|
|