diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt index c6928a559..f0c914e6e 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/ConversationInfoActivity.kt @@ -92,7 +92,10 @@ import io.reactivex.Observer import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import java.util.Calendar @@ -126,7 +129,6 @@ class ConversationInfoActivity : private lateinit var conversationUser: User private var hasAvatarSpacing: Boolean = false private lateinit var credentials: String - private var roomDisposable: Disposable? = null private var participantsDisposable: Disposable? = null private var databaseStorageModule: DatabaseStorageModule? = null @@ -193,7 +195,30 @@ class ConversationInfoActivity : binding.addParticipantsAction.setOnClickListener { addParticipants() } binding.listBansButton.setOnClickListener { listBans() } - viewModel.getRoom(conversationUser, conversationToken) + CoroutineScope(Dispatchers.IO).launch { + val model = viewModel.getRoomBlocking(conversationUser, conversationToken) + spreedCapabilities = viewModel.getCapabilitiesBlocking(conversationUser, conversationToken, model) + conversation = model + + withContext(Dispatchers.Main) { + if (ConversationUtils.isNoteToSelfConversation(conversation)) { + binding.shareConversationButton.visibility = GONE + } + + val canGeneratePrettyURL = CapabilitiesUtil.canGeneratePrettyURL(conversationUser) + binding.shareConversationButton.setOnClickListener { + ShareUtils.shareConversationLink( + this@ConversationInfoActivity, + conversationUser.baseUrl, + conversation?.token, + conversation?.name, + canGeneratePrettyURL + ) + } + + handleConversation() + } + } themeTextViews() themeSwitchPreferences() @@ -205,20 +230,6 @@ class ConversationInfoActivity : } private fun initObservers() { - initViewStateObserver() - - viewModel.getCapabilitiesViewState.observe(this) { state -> - when (state) { - is ConversationInfoViewModel.GetCapabilitiesSuccessState -> { - spreedCapabilities = state.spreedCapabilities - - handleConversation() - } - - else -> {} - } - } - viewModel.getBanActorState.observe(this) { state -> when (state) { is ConversationInfoViewModel.BanActorSuccessState -> { @@ -264,36 +275,6 @@ class ConversationInfoActivity : } } - private fun initViewStateObserver() { - viewModel.viewState.observe(this) { state -> - when (state) { - is ConversationInfoViewModel.GetRoomSuccessState -> { - conversation = state.conversationModel - viewModel.getCapabilities(conversationUser, conversationToken, conversation!!) - if (ConversationUtils.isNoteToSelfConversation(conversation)) { - binding.shareConversationButton.visibility = GONE - } - val canGeneratePrettyURL = CapabilitiesUtil.canGeneratePrettyURL(conversationUser) - binding.shareConversationButton.setOnClickListener { - ShareUtils.shareConversationLink( - this, - conversationUser.baseUrl, - conversation?.token, - conversation?.name, - canGeneratePrettyURL - ) - } - } - - is ConversationInfoViewModel.GetRoomErrorState -> { - Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show() - } - - else -> {} - } - } - } - private fun setupActionBar() { setSupportActionBar(binding.conversationInfoToolbar) binding.conversationInfoToolbar.setNavigationOnClickListener { @@ -763,7 +744,7 @@ class ConversationInfoActivity : } } - @Suppress("LongMethod") + @Suppress("LongMethod", "CyclomaticComplexMethod") private fun handleConversation() { val conversationCopy = conversation!! diff --git a/app/src/main/java/com/nextcloud/talk/conversationinfo/viewmodel/ConversationInfoViewModel.kt b/app/src/main/java/com/nextcloud/talk/conversationinfo/viewmodel/ConversationInfoViewModel.kt index f6debb14f..9087cf6ca 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationinfo/viewmodel/ConversationInfoViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationinfo/viewmodel/ConversationInfoViewModel.kt @@ -120,6 +120,9 @@ class ConversationInfoViewModel @Inject constructor( ?.subscribe(GetRoomObserver()) } + fun getRoomBlocking(user: User, token: String): ConversationModel = + chatNetworkDataSource.getRoom(user, token).blockingFirst() + fun getCapabilities(user: User, token: String, conversationModel: ConversationModel) { _getCapabilitiesViewState.value = GetCapabilitiesStartState @@ -150,6 +153,14 @@ class ConversationInfoViewModel @Inject constructor( } } + fun getCapabilitiesBlocking(user: User, token: String, conversationModel: ConversationModel): SpreedCapability { + return if (conversationModel.remoteServer.isNullOrEmpty()) { + user.capabilities!!.spreedCapability!! + } else { + chatNetworkDataSource.getCapabilities(user, token).blockingFirst() + } + } + @Suppress("Detekt.TooGenericExceptionCaught") fun listBans(user: User, token: String) { val url = ApiUtils.getUrlForBans(user.baseUrl!!, token)