Skip to content

Commit

Permalink
User now knows if no offline messages are saved
Browse files Browse the repository at this point in the history
Signed-off-by: rapterjet2004 <[email protected]>
  • Loading branch information
rapterjet2004 committed Oct 28, 2024
1 parent eac3403 commit 44988db
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 6 deletions.
25 changes: 19 additions & 6 deletions app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -91,13 +91,13 @@ import com.nextcloud.talk.adapters.messages.IncomingPreviewMessageViewHolder
import com.nextcloud.talk.adapters.messages.IncomingTextMessageViewHolder
import com.nextcloud.talk.adapters.messages.IncomingVoiceMessageViewHolder
import com.nextcloud.talk.adapters.messages.MessagePayload
import com.nextcloud.talk.adapters.messages.OutcomingDeckCardViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingLinkPreviewMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingLocationMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingPollMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingPreviewMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingTextMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingVoiceMessageViewHolder
import com.nextcloud.talk.adapters.messages.OutcomingDeckCardViewHolder
import com.nextcloud.talk.adapters.messages.PreviewMessageInterface
import com.nextcloud.talk.adapters.messages.PreviewMessageViewHolder
import com.nextcloud.talk.adapters.messages.SystemMessageInterface
Expand Down Expand Up @@ -910,6 +910,22 @@ class ChatActivity :
.collect()
}

this.lifecycleScope.launch {
chatViewModel.getGeneralUIFlow.onEach { key ->
when (key) {
NO_OFFLINE_MESSAGES_FOUND -> {
Snackbar.make(
binding.root,
getString(R.string.no_offline_messages_saved),
Snackbar.LENGTH_LONG
).show()
}

else -> {}
}
}.collect()
}

chatViewModel.reactionDeletedViewState.observe(this) { state ->
when (state) {
is ChatViewModel.ReactionDeletedSuccessState -> {
Expand Down Expand Up @@ -2767,14 +2783,10 @@ class ChatActivity :
message1.timestamp
)
val isLessThan5Min = timeDifference > FIVE_MINUTES_IN_SECONDS
if (isSameDayMessages(message2, message1) &&
return isSameDayMessages(message2, message1) &&
(message2.actorId == message1.actorId) &&
(!isLessThan5Min) &&
(message2.lastEditTimestamp == 0L || message1.lastEditTimestamp == 0L)
) {
return true
}
return false
}

private fun determinePreviousMessageIds(chatMessageList: List<ChatMessage>) {
Expand Down Expand Up @@ -3835,5 +3847,6 @@ class ChatActivity :
private const val RESUME_AUDIO_TAG = "RESUME_AUDIO_TAG"
private const val DELAY_TO_SHOW_PROGRESS_BAR = 1000L
private const val FIVE_MINUTES_IN_SECONDS: Long = 300
const val NO_OFFLINE_MESSAGES_FOUND = "NO_OFFLINE_MESSAGES_FOUND"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ interface ChatMessageRepository : LifecycleAwareManager {

val lastReadMessageFlow: Flow<Int>

/**
* Used for informing the user of the underlying processing behind offline support, [String] is the key
* which is handled in a switch statement in ChatActivity.
*/
val generalUIFlow: Flow<String>

fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String)

fun loadInitialMessages(withNetworkParams: Bundle): Job
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ package com.nextcloud.talk.chat.data.network

import android.os.Bundle
import android.util.Log
import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.chat.data.ChatMessageRepository
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.data.database.dao.ChatBlocksDao
Expand Down Expand Up @@ -89,6 +90,11 @@ class OfflineFirstChatRepository @Inject constructor(
private val _lastReadMessageFlow:
MutableSharedFlow<Int> = MutableSharedFlow()

override val generalUIFlow: Flow<String>
get() = _generalUIFlow

private val _generalUIFlow: MutableSharedFlow<String> = MutableSharedFlow()

private var newXChatLastCommonRead: Int? = null
private var itIsPaused = false
private val scope = CoroutineScope(Dispatchers.IO)
Expand Down Expand Up @@ -131,6 +137,7 @@ class OfflineFirstChatRepository @Inject constructor(
} else {
if (!weAlreadyHaveSomeOfflineMessages) {
Log.d(TAG, "An online request for newest 100 messages is made because offline chat is empty")
_generalUIFlow.emit(ChatActivity.NO_OFFLINE_MESSAGES_FOUND)
} else {
Log.d(
TAG,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ class ChatViewModel @Inject constructor(
_getRoomViewState.value = GetRoomErrorState
}

val getGeneralUIFlow = chatRepository.generalUIFlow

sealed interface ViewState

object GetReminderStartState : ViewState
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -817,4 +817,5 @@ How to translate with transifex:
<string name="show_ban_reason">Show ban reason</string>
<string name="error_unbanning">Error occurred when unbanning participant</string>
<string name="connection_lost">Connection lost</string>
<string name="no_offline_messages_saved">No offline messages saved</string>
</resources>

0 comments on commit 44988db

Please sign in to comment.