Merge pull request #2824 from nextcloud/bugfix/2784/avoidCrashWhenJoinOtherRoomDuringCall

Restrict to join other rooms while being in a call
This commit is contained in:
Marcel Hibbe 2023-03-03 15:59:49 +01:00 committed by GitHub
commit b72fad3607
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 5 deletions

View File

@ -1885,8 +1885,7 @@ class ChatController(args: Bundle) :
if (validSessionId()) {
leaveRoom(null, null)
} else {
Log.d(TAG, "not leaving room (inConversation is false and/or validSessionId is false)")
// room might have already been left...
Log.d(TAG, "not leaving room (validSessionId is false)")
}
} else {
Log.e(TAG, "not leaving room...")
@ -1937,6 +1936,24 @@ class ChatController(args: Bundle) :
}
private fun joinRoomWithPassword() {
if (CallActivity.active &&
roomToken != ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken
) {
Toast.makeText(
context,
context.getString(R.string.restrict_join_other_room_while_call),
Toast.LENGTH_LONG
).show()
Log.e(
TAG,
"Restricted to open chat controller because a call in another room is active. This is an " +
"edge case which is not properly handled yet."
)
router.popToRoot()
return
}
// if ApplicationWideCurrentRoomHolder contains a session (because a call is active), then keep the sessionId
if (ApplicationWideCurrentRoomHolder.getInstance().currentRoomId ==
currentConversation!!.roomId
@ -1974,12 +1991,16 @@ class ChatController(args: Bundle) :
@Suppress("Detekt.TooGenericExceptionCaught")
override fun onNext(roomOverall: RoomOverall) {
Log.d(TAG, "joinRoomWithPassword - joinRoom - got response: $startNanoTime")
sessionIdAfterRoomJoined = roomOverall.ocs!!.data!!.sessionId
val conversation = roomOverall.ocs!!.data!!
sessionIdAfterRoomJoined = conversation.sessionId
ApplicationWideCurrentRoomHolder.getInstance().session = conversation.sessionId
ApplicationWideCurrentRoomHolder.getInstance().currentRoomId = conversation.roomId
ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken = conversation.token
ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser
logConversationInfos("joinRoomWithPassword#onNext")
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
// was able to finish and, therefore, that the web socket instance can be got.

View File

@ -66,6 +66,7 @@ import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler
import com.google.android.material.button.MaterialButton
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.nextcloud.talk.R
import com.nextcloud.talk.activities.CallActivity
import com.nextcloud.talk.activities.MainActivity
import com.nextcloud.talk.adapters.items.ConversationItem
import com.nextcloud.talk.adapters.items.GenericTextHeaderItem
@ -120,6 +121,7 @@ import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew.isUnifiedSearc
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew.isUserStatusAvailable
import com.nextcloud.talk.utils.remapchat.ConductorRemapping.remapChatController
import com.nextcloud.talk.utils.rx.SearchViewObservable.Companion.observeSearchView
import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
@ -1112,6 +1114,17 @@ class ConversationsListController(bundle: Bundle) :
}
private fun openConversation(textToPaste: String? = "") {
if (CallActivity.active &&
selectedConversation!!.token != ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken
) {
Toast.makeText(
context,
context.getString(R.string.restrict_join_other_room_while_call),
Toast.LENGTH_LONG
).show()
return
}
val bundle = Bundle()
bundle.putParcelable(KEY_USER_ENTITY, currentUser)
bundle.putParcelable(KEY_ACTIVE_CONVERSATION, Parcels.wrap(selectedConversation))

View File

@ -241,6 +241,7 @@ How to translate with transifex:
<string name="nc_call_raised_hand">%1$s raised the hand</string>
<string name="raise_hand">Raise hand</string>
<string name="lower_hand">Lower hand</string>
<string name="restrict_join_other_room_while_call">It's not possible to join other rooms while being in a call</string>
<!-- Picture in Picture -->
<string name="nc_pip_microphone_mute">Mute microphone</string>