I set the listener if isNeedToListen = true
, otherwise I remove it, but it still works and I have set listeners that contradict each other when I enter the same chat room from different accounts
override fun listenMessage(
receiver_id: String,
user_id: String,
messages: MutableLiveData<ArrayList<Message>>,
onSuccess: (ArrayList<Message>) -> Unit,
isNeedToListen:Boolean
) {
var listenUserMessage: ListenerRegistration? = null
var listenReceiverMessage: ListenerRegistration? = null
if(isNeedToListen){
listenUserMessage = database
.collection(KEY_COLLECTION_USERS)
.document(user_id)
.collection(KEY_COLLECTION_CHAT)
.addSnapshotListener { value, error -> ...
}
listenReceiverMessage = database
.collection(KEY_COLLECTION_USERS)
.document(receiver_id)
.collection(KEY_COLLECTION_CHAT)
.addSnapshotListener { value, error ->...
}
}else{
if(listenUserMessage !=null){
listenUserMessage.remove()
}
if(listenReceiverMessage !=null){
listenReceiverMessage.remove()
}
}
}
UPD
isNeedToListen
coming from
firebaseRepostory.listenMessage(receiver_id, user_id, messages, onSuccess,false)
this code is executed onStop()
firebaseRepostory.listenMessage(receiver_id, user_id, messages, onSuccess,true)
this code is executed onStart()