diff --git a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt index 085dd8fe5..263231481 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt @@ -178,12 +178,12 @@ class MessageInputFragment : Fragment() { } viewLifecycleOwner.lifecycleScope.launch { - var wasOnline = true - networkMonitor.isOnline.onEach { isOnline -> + var wasOnline: Boolean // TODO maye redo this logic, seems it might be misfiring + networkMonitor.isOnline + .onEach { isOnline -> + wasOnline = !binding.fragmentConnectionLost.isShown val connectionGained = (!wasOnline && isOnline) - wasOnline = !binding.fragmentMessageInputView.isShown Log.d(TAG, "isOnline: $isOnline\nwasOnline: $wasOnline\nconnectionGained: $connectionGained") - // delay(2000) handleMessageQueue(isOnline) handleUI(isOnline, connectionGained) }.collect() diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt index 3275d1ae2..b1f82a073 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt @@ -142,6 +142,7 @@ class MessageInputViewModel @Inject constructor( if (isQueueing) { val tempID = System.currentTimeMillis().toInt() val qMsg = QueuedMessage(tempID, message, displayName, replyTo, sendWithoutNotification) + messageQueue = dataStore.getMessageQueue(roomToken) messageQueue.add(qMsg) dataStore.saveMessageQueue(roomToken, messageQueue) _messageQueueSizeFlow.update { messageQueue.size } @@ -257,7 +258,7 @@ class MessageInputViewModel @Inject constructor( val queue = dataStore.getMessageQueue(roomToken) dataStore.saveMessageQueue(roomToken, null) // empties the queue while (queue.size > 0) { - val msg = queue.removeFirst() + val msg = queue.removeAt(0) sendChatMessage( roomToken, credentials, diff --git a/app/src/main/java/com/nextcloud/talk/data/network/NetworkMonitorImpl.kt b/app/src/main/java/com/nextcloud/talk/data/network/NetworkMonitorImpl.kt index d3a77013d..3f27c20f9 100644 --- a/app/src/main/java/com/nextcloud/talk/data/network/NetworkMonitorImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/data/network/NetworkMonitorImpl.kt @@ -20,6 +20,7 @@ import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.conflate +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn import javax.inject.Inject import javax.inject.Singleton @@ -73,6 +74,7 @@ class NetworkMonitorImpl @Inject constructor( } } } + .distinctUntilChanged() .flowOn(Dispatchers.IO) .conflate()