More bug fixes

This commit is contained in:
Mario Danic 2019-12-19 16:07:35 +01:00
parent 776f6ef76a
commit d647f464ec
No known key found for this signature in database
GPG Key ID: CDE0BBD2738C4CC0
7 changed files with 63 additions and 51 deletions

View File

@ -24,6 +24,6 @@ import com.nextcloud.talk.newarch.data.model.ErrorModel
interface UseCaseResponse<Type> {
suspend fun onSuccess(result: Type)
fun onError(errorModel: ErrorModel?)
suspend fun onError(errorModel: ErrorModel?)
}

View File

@ -68,6 +68,9 @@ class ChatView : BaseView(), MessageHolders.ContentChecker<IMessage>, MessagesLi
private lateinit var recyclerViewAdapter: MessagesListAdapter<ChatMessage>
private lateinit var mentionAutocomplete: Autocomplete<*>
private var shouldShowLobby: Boolean = false
private var isReadOnlyConversation: Boolean = false
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup
@ -88,8 +91,10 @@ class ChatView : BaseView(), MessageHolders.ContentChecker<IMessage>, MessagesLi
actionBar?.setIcon(null)
}
val shouldShowLobby = conversation!!.shouldShowLobby(user)
val isReadOnlyConversation = conversation.conversationReadOnlyState == Conversation.ConversationReadOnlyState.CONVERSATION_READ_ONLY
shouldShowLobby = conversation!!.shouldShowLobby(user)
isReadOnlyConversation = conversation.conversationReadOnlyState == Conversation.ConversationReadOnlyState.CONVERSATION_READ_ONLY
activity?.invalidateOptionsMenu()
if (shouldShowLobby) {
view?.messagesListView?.visibility = View.GONE
@ -134,9 +139,21 @@ class ChatView : BaseView(), MessageHolders.ContentChecker<IMessage>, MessagesLi
) {
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_conversation_plus_filter, menu)
}
override fun onPrepareOptionsMenu(menu: Menu) {
super.onPrepareOptionsMenu(menu)
conversationInfoMenuItem = menu.findItem(R.id.conversation_info)
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call)
conversationVideoMenuItem = menu.findItem(R.id.conversation_video_call)
if (shouldShowLobby || isReadOnlyConversation) {
conversationVoiceCallMenuItem?.isVisible = false
conversationVideoMenuItem?.isVisible = false
} else {
conversationVoiceCallMenuItem?.isVisible = true
conversationVideoMenuItem?.isVisible = true
}
}
private fun setupViews() {

View File

@ -16,6 +16,7 @@ import com.nextcloud.talk.newarch.domain.usecases.JoinConversationUseCase
import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
import com.nextcloud.talk.newarch.local.models.UserNgEntity
import com.nextcloud.talk.newarch.utils.ConversationsManager
import com.nextcloud.talk.newarch.utils.ConversationsManagerInterface
import kotlinx.coroutines.launch
import org.koin.core.parameter.parametersOf
@ -24,9 +25,10 @@ class ChatViewModel constructor(application: Application,
private val exitConversationUseCase: ExitConversationUseCase,
private val conversationsRepository: ConversationsRepository,
private val messagesRepository: MessagesRepository,
private val conversationsManager: ConversationsManager) : BaseViewModel<ChatView>(application) {
private val conversationsManager: ConversationsManager) : BaseViewModel<ChatView>(application), ConversationsManagerInterface {
lateinit var user: UserNgEntity
val conversation: MutableLiveData<Conversation?> = MutableLiveData()
var initConversation: Conversation? = null
val messagesLiveData = Transformations.switchMap(conversation) {
it?.let {
messagesRepository.getMessagesWithUserForConversation(it.conversationId!!)
@ -38,45 +40,29 @@ class ChatViewModel constructor(application: Application,
fun init(user: UserNgEntity, conversationToken: String, conversationPassword: String?) {
viewModelScope.launch {
this@ChatViewModel.user = user
this@ChatViewModel.conversation.value = conversationsRepository.getConversationForUserWithToken(user.id!!, conversationToken)
this@ChatViewModel.initConversation = conversationsRepository.getConversationForUserWithToken(user.id!!, conversationToken)
this@ChatViewModel.conversationPassword = conversationPassword
conversationsManager.getConversation(conversationToken, this@ChatViewModel)
}
}
suspend fun joinConversation() {
joinConversationUseCase.invoke(viewModelScope, parametersOf(
user,
conversation.value!!.token,
conversationPassword
),
object : UseCaseResponse<RoomOverall> {
override suspend fun onSuccess(result: RoomOverall) {
conversationsRepository.saveConversationsForUser(user.id!!, listOf(result.ocs.data))
}
override fun onError(errorModel: ErrorModel?) {
// what do we do on error
}
})
}
suspend fun exitConversation() {
exitConversationUseCase.invoke(backgroundScope, parametersOf(
user,
conversation.value!!.token
),
object : UseCaseResponse<GenericOverall> {
override suspend fun onSuccess(result: GenericOverall) {
}
override fun onError(errorModel: ErrorModel?) {
// what do we do on error
}
})
}
fun sendMessage(message: CharSequence) {
}
override suspend fun gotConversationInfoForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: ConversationsManagerInterface.OperationStatus) {
if (operationStatus == ConversationsManagerInterface.OperationStatus.STATUS_OK) {
if (userNgEntity.id == user.id && conversation!!.token == initConversation?.token) {
this.conversation.value = conversationsRepository.getConversationForUserWithToken(user.id!!, conversation.token!!)
conversation.token?.let { conversationToken ->
conversationsManager.joinConversation(conversationToken, conversationPassword, this)
}
}
}
}
override suspend fun joinedConversationForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: ConversationsManagerInterface.OperationStatus) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}

View File

@ -105,7 +105,6 @@ class ConversationsListView : BaseView(), OnQueryTextListener,
}
settingsItem = menu.findItem(R.id.action_settings)
loadAvatar()
}
private fun loadAvatar() {

View File

@ -81,7 +81,7 @@ class ConversationsListViewModel constructor(
)
}
override fun onError(errorModel: ErrorModel?) {
override suspend fun onError(errorModel: ErrorModel?) {
messageData = errorModel?.getErrorMessage()
if (errorModel?.code == 400) {
// couldn't leave because we're last moderator
@ -110,7 +110,7 @@ class ConversationsListViewModel constructor(
)
}
override fun onError(errorModel: ErrorModel?) {
override suspend fun onError(errorModel: ErrorModel?) {
messageData = errorModel?.getErrorMessage()
viewModelScope.launch {
setConversationUpdateStatus(conversation, false)
@ -141,7 +141,7 @@ class ConversationsListViewModel constructor(
)
}
override fun onError(errorModel: ErrorModel?) {
override suspend fun onError(errorModel: ErrorModel?) {
messageData = errorModel?.getErrorMessage()
viewModelScope.launch {
setConversationUpdateStatus(conversation, false)
@ -166,7 +166,7 @@ class ConversationsListViewModel constructor(
messageData = ""
}
override fun onError(errorModel: ErrorModel?) {
override suspend fun onError(errorModel: ErrorModel?) {
messageData = errorModel?.getErrorMessage()
}
})

View File

@ -58,7 +58,7 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
}
}
suspend fun getConversation(conversationToken: String) {
suspend fun getConversation(conversationToken: String, conversationsManagerInterface: ConversationsManagerInterface) {
val currentUser = currentUserLiveData.value
getConversationUseCase.invoke(applicationScope, parametersOf(
currentUser,
@ -68,11 +68,14 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
override suspend fun onSuccess(result: RoomOverall) {
currentUser?.let {
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
conversationsManagerInterface.gotConversationInfoForUser(it, result.ocs.data, ConversationsManagerInterface.OperationStatus.STATUS_OK)
}
}
override fun onError(errorModel: ErrorModel?) {
// what do we do on error
override suspend fun onError(errorModel: ErrorModel?) {
currentUser?.let {
conversationsManagerInterface.gotConversationInfoForUser(it, null, ConversationsManagerInterface.OperationStatus.STATUS_FAILED)
}
}
})
}
@ -89,12 +92,14 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
currentUser?.let {
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
currentConversation = conversationsRepository.getConversationForUserWithToken(it.id!!, result.ocs!!.data!!.token!!)
conversationsManagerInterface.joinedConversationForUser(it, currentConversation)
conversationsManagerInterface.joinedConversationForUser(it, currentConversation, ConversationsManagerInterface.OperationStatus.STATUS_OK)
}
}
override fun onError(errorModel: ErrorModel?) {
// what do we do on error
override suspend fun onError(errorModel: ErrorModel?) {
currentUser?.let {
conversationsManagerInterface.joinedConversationForUser(it, currentConversation, ConversationsManagerInterface.OperationStatus.STATUS_FAILED)
}
}
})
}

View File

@ -24,6 +24,11 @@ import com.nextcloud.talk.models.json.conversations.Conversation
import com.nextcloud.talk.newarch.local.models.UserNgEntity
interface ConversationsManagerInterface {
fun gotConversationInfoForuser(userNgEntity: UserNgEntity, conversation: Conversation?)
fun joinedConversationForUser(userNgEntity: UserNgEntity, conversation: Conversation?)
}
enum class OperationStatus {
STATUS_OK,
STATUS_FAILED
}
suspend fun gotConversationInfoForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: OperationStatus)
suspend fun joinedConversationForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: OperationStatus)
}