mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-22 21:19:31 +01:00
More bug fixes
This commit is contained in:
parent
776f6ef76a
commit
d647f464ec
@ -24,6 +24,6 @@ import com.nextcloud.talk.newarch.data.model.ErrorModel
|
|||||||
|
|
||||||
interface UseCaseResponse<Type> {
|
interface UseCaseResponse<Type> {
|
||||||
suspend fun onSuccess(result: Type)
|
suspend fun onSuccess(result: Type)
|
||||||
fun onError(errorModel: ErrorModel?)
|
suspend fun onError(errorModel: ErrorModel?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +68,9 @@ class ChatView : BaseView(), MessageHolders.ContentChecker<IMessage>, MessagesLi
|
|||||||
private lateinit var recyclerViewAdapter: MessagesListAdapter<ChatMessage>
|
private lateinit var recyclerViewAdapter: MessagesListAdapter<ChatMessage>
|
||||||
private lateinit var mentionAutocomplete: Autocomplete<*>
|
private lateinit var mentionAutocomplete: Autocomplete<*>
|
||||||
|
|
||||||
|
private var shouldShowLobby: Boolean = false
|
||||||
|
private var isReadOnlyConversation: Boolean = false
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup
|
container: ViewGroup
|
||||||
@ -88,8 +91,10 @@ class ChatView : BaseView(), MessageHolders.ContentChecker<IMessage>, MessagesLi
|
|||||||
actionBar?.setIcon(null)
|
actionBar?.setIcon(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
val shouldShowLobby = conversation!!.shouldShowLobby(user)
|
shouldShowLobby = conversation!!.shouldShowLobby(user)
|
||||||
val isReadOnlyConversation = conversation.conversationReadOnlyState == Conversation.ConversationReadOnlyState.CONVERSATION_READ_ONLY
|
isReadOnlyConversation = conversation.conversationReadOnlyState == Conversation.ConversationReadOnlyState.CONVERSATION_READ_ONLY
|
||||||
|
|
||||||
|
activity?.invalidateOptionsMenu()
|
||||||
|
|
||||||
if (shouldShowLobby) {
|
if (shouldShowLobby) {
|
||||||
view?.messagesListView?.visibility = View.GONE
|
view?.messagesListView?.visibility = View.GONE
|
||||||
@ -134,9 +139,21 @@ class ChatView : BaseView(), MessageHolders.ContentChecker<IMessage>, MessagesLi
|
|||||||
) {
|
) {
|
||||||
super.onCreateOptionsMenu(menu, inflater)
|
super.onCreateOptionsMenu(menu, inflater)
|
||||||
inflater.inflate(R.menu.menu_conversation_plus_filter, menu)
|
inflater.inflate(R.menu.menu_conversation_plus_filter, menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||||
|
super.onPrepareOptionsMenu(menu)
|
||||||
conversationInfoMenuItem = menu.findItem(R.id.conversation_info)
|
conversationInfoMenuItem = menu.findItem(R.id.conversation_info)
|
||||||
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call)
|
conversationVoiceCallMenuItem = menu.findItem(R.id.conversation_voice_call)
|
||||||
conversationVideoMenuItem = menu.findItem(R.id.conversation_video_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() {
|
private fun setupViews() {
|
||||||
|
@ -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.domain.usecases.base.UseCaseResponse
|
||||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||||
import com.nextcloud.talk.newarch.utils.ConversationsManager
|
import com.nextcloud.talk.newarch.utils.ConversationsManager
|
||||||
|
import com.nextcloud.talk.newarch.utils.ConversationsManagerInterface
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koin.core.parameter.parametersOf
|
import org.koin.core.parameter.parametersOf
|
||||||
|
|
||||||
@ -24,9 +25,10 @@ class ChatViewModel constructor(application: Application,
|
|||||||
private val exitConversationUseCase: ExitConversationUseCase,
|
private val exitConversationUseCase: ExitConversationUseCase,
|
||||||
private val conversationsRepository: ConversationsRepository,
|
private val conversationsRepository: ConversationsRepository,
|
||||||
private val messagesRepository: MessagesRepository,
|
private val messagesRepository: MessagesRepository,
|
||||||
private val conversationsManager: ConversationsManager) : BaseViewModel<ChatView>(application) {
|
private val conversationsManager: ConversationsManager) : BaseViewModel<ChatView>(application), ConversationsManagerInterface {
|
||||||
lateinit var user: UserNgEntity
|
lateinit var user: UserNgEntity
|
||||||
val conversation: MutableLiveData<Conversation?> = MutableLiveData()
|
val conversation: MutableLiveData<Conversation?> = MutableLiveData()
|
||||||
|
var initConversation: Conversation? = null
|
||||||
val messagesLiveData = Transformations.switchMap(conversation) {
|
val messagesLiveData = Transformations.switchMap(conversation) {
|
||||||
it?.let {
|
it?.let {
|
||||||
messagesRepository.getMessagesWithUserForConversation(it.conversationId!!)
|
messagesRepository.getMessagesWithUserForConversation(it.conversationId!!)
|
||||||
@ -38,45 +40,29 @@ class ChatViewModel constructor(application: Application,
|
|||||||
fun init(user: UserNgEntity, conversationToken: String, conversationPassword: String?) {
|
fun init(user: UserNgEntity, conversationToken: String, conversationPassword: String?) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
this@ChatViewModel.user = user
|
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
|
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) {
|
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.
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -105,7 +105,6 @@ class ConversationsListView : BaseView(), OnQueryTextListener,
|
|||||||
}
|
}
|
||||||
|
|
||||||
settingsItem = menu.findItem(R.id.action_settings)
|
settingsItem = menu.findItem(R.id.action_settings)
|
||||||
loadAvatar()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadAvatar() {
|
private fun loadAvatar() {
|
||||||
|
@ -81,7 +81,7 @@ class ConversationsListViewModel constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(errorModel: ErrorModel?) {
|
override suspend fun onError(errorModel: ErrorModel?) {
|
||||||
messageData = errorModel?.getErrorMessage()
|
messageData = errorModel?.getErrorMessage()
|
||||||
if (errorModel?.code == 400) {
|
if (errorModel?.code == 400) {
|
||||||
// couldn't leave because we're last moderator
|
// 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()
|
messageData = errorModel?.getErrorMessage()
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
setConversationUpdateStatus(conversation, false)
|
setConversationUpdateStatus(conversation, false)
|
||||||
@ -141,7 +141,7 @@ class ConversationsListViewModel constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(errorModel: ErrorModel?) {
|
override suspend fun onError(errorModel: ErrorModel?) {
|
||||||
messageData = errorModel?.getErrorMessage()
|
messageData = errorModel?.getErrorMessage()
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
setConversationUpdateStatus(conversation, false)
|
setConversationUpdateStatus(conversation, false)
|
||||||
@ -166,7 +166,7 @@ class ConversationsListViewModel constructor(
|
|||||||
messageData = ""
|
messageData = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(errorModel: ErrorModel?) {
|
override suspend fun onError(errorModel: ErrorModel?) {
|
||||||
messageData = errorModel?.getErrorMessage()
|
messageData = errorModel?.getErrorMessage()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -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
|
val currentUser = currentUserLiveData.value
|
||||||
getConversationUseCase.invoke(applicationScope, parametersOf(
|
getConversationUseCase.invoke(applicationScope, parametersOf(
|
||||||
currentUser,
|
currentUser,
|
||||||
@ -68,11 +68,14 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
|
|||||||
override suspend fun onSuccess(result: RoomOverall) {
|
override suspend fun onSuccess(result: RoomOverall) {
|
||||||
currentUser?.let {
|
currentUser?.let {
|
||||||
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
|
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
|
||||||
|
conversationsManagerInterface.gotConversationInfoForUser(it, result.ocs.data, ConversationsManagerInterface.OperationStatus.STATUS_OK)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onError(errorModel: ErrorModel?) {
|
override suspend fun onError(errorModel: ErrorModel?) {
|
||||||
// what do we do on error
|
currentUser?.let {
|
||||||
|
conversationsManagerInterface.gotConversationInfoForUser(it, null, ConversationsManagerInterface.OperationStatus.STATUS_FAILED)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -89,12 +92,14 @@ class ConversationsManager constructor(usersRepository: UsersRepository,
|
|||||||
currentUser?.let {
|
currentUser?.let {
|
||||||
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
|
conversationsRepository.saveConversationsForUser(it.id!!, listOf(result.ocs.data))
|
||||||
currentConversation = conversationsRepository.getConversationForUserWithToken(it.id!!, result.ocs!!.data!!.token!!)
|
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?) {
|
override suspend fun onError(errorModel: ErrorModel?) {
|
||||||
// what do we do on error
|
currentUser?.let {
|
||||||
|
conversationsManagerInterface.joinedConversationForUser(it, currentConversation, ConversationsManagerInterface.OperationStatus.STATUS_FAILED)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,11 @@ import com.nextcloud.talk.models.json.conversations.Conversation
|
|||||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||||
|
|
||||||
interface ConversationsManagerInterface {
|
interface ConversationsManagerInterface {
|
||||||
fun gotConversationInfoForuser(userNgEntity: UserNgEntity, conversation: Conversation?)
|
enum class OperationStatus {
|
||||||
fun joinedConversationForUser(userNgEntity: UserNgEntity, conversation: Conversation?)
|
STATUS_OK,
|
||||||
|
STATUS_FAILED
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun gotConversationInfoForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: OperationStatus)
|
||||||
|
suspend fun joinedConversationForUser(userNgEntity: UserNgEntity, conversation: Conversation?, operationStatus: OperationStatus)
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user