mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-13 07:44:11 +01:00
Merge pull request #2824 from nextcloud/bugfix/2784/avoidCrashWhenJoinOtherRoomDuringCall
Restrict to join other rooms while being in a call
This commit is contained in:
commit
b72fad3607
@ -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.
|
||||
|
@ -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))
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user