From ec466e58f0f5c83caeb1edbfc99380518ff8278e Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Sun, 15 Dec 2024 19:51:55 +0100 Subject: [PATCH] replace CharSequence with String for sendChatMessage Signed-off-by: Marcel Hibbe --- .../OutcomingTextMessageViewHolder.kt | 20 ++++---- .../com/nextcloud/talk/api/NcApiCoroutines.kt | 2 +- .../talk/chat/MessageInputFragment.kt | 4 +- .../talk/chat/data/ChatMessageRepository.kt | 2 +- .../data/network/ChatNetworkDataSource.kt | 2 +- .../network/OfflineFirstChatRepository.kt | 48 +++++++++++++++---- .../chat/data/network/RetrofitChatNetwork.kt | 2 +- .../chat/viewmodels/MessageInputViewModel.kt | 2 +- .../item_custom_outcoming_text_message.xml | 7 --- 9 files changed, 57 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt index ea29e7960..d289933ba 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt @@ -14,7 +14,6 @@ import android.util.Log import android.util.TypedValue import android.view.View import androidx.core.content.res.ResourcesCompat -import androidx.lifecycle.lifecycleScope import autodagger.AutoInjector import coil.load import com.google.android.flexbox.FlexboxLayout @@ -73,6 +72,7 @@ class OutcomingTextMessageViewHolder(itemView: View) : layoutParams.isWrapBefore = false var textSize = context.resources.getDimension(R.dimen.chat_text_size) viewThemeUtils.platform.colorTextView(binding.messageTime, ColorRole.ON_SURFACE_VARIANT) + var processedMessageText = messageUtils.enrichChatMessageText( binding.messageText.context, message, @@ -121,18 +121,20 @@ class OutcomingTextMessageViewHolder(itemView: View) : CoroutineScope(Dispatchers.Main).launch { - if (message.sendingFailed) { - updateStatus( - R.drawable.baseline_report_problem_24, - "failed" - ) - } else if (message.isTempMessage && !networkMonitor.isOnline.first()) { + // if (message.sendingFailed) { + // updateStatus( + // R.drawable.baseline_report_problem_24, + // "failed" + // ) + // } else + + if (message.isTempMessage && !networkMonitor.isOnline.first()) { updateStatus( R.drawable.ic_signal_wifi_off_white_24dp, "offline" ) } else if (message.isTempMessage) { - updateSendingStatus() + showSendingSpinner() } else if(message.readStatus == ReadStatus.READ){ updateStatus(R.drawable.ic_check_all, context.resources?.getString(R.string.nc_message_read)) } else if(message.readStatus == ReadStatus.SENT) { @@ -165,7 +167,7 @@ class OutcomingTextMessageViewHolder(itemView: View) : binding.checkMark.contentDescription = description } - private fun updateSendingStatus() { + private fun showSendingSpinner() { binding.sendingProgress.visibility = View.VISIBLE binding.checkMark.visibility = View.GONE diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt b/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt index db6a00c55..a1b027727 100644 --- a/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt +++ b/app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt @@ -128,7 +128,7 @@ interface NcApiCoroutines { suspend fun sendChatMessage( @Header("Authorization") authorization: String, @Url url: String, - @Field("message") message: CharSequence, + @Field("message") message: String, @Field("actorDisplayName") actorDisplayName: String, @Field("replyTo") replyTo: Int, @Field("silent") sendWithoutNotification: Boolean, 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 dba84eaed..5e8ee1bc1 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt @@ -867,7 +867,7 @@ class MessageInputFragment : Fragment() { .findViewById(R.id.quotedChatMessageView)?.tag as Int? ?: 0 sendMessage( - editable, + editable.toString(), replyMessageId, sendWithoutNotification ) @@ -875,7 +875,7 @@ class MessageInputFragment : Fragment() { } } - private fun sendMessage(message: CharSequence, replyTo: Int?, sendWithoutNotification: Boolean) { + private fun sendMessage(message: String, replyTo: Int?, sendWithoutNotification: Boolean) { chatActivity.messageInputViewModel.sendChatMessage( conversationInternalId, chatActivity.conversationUser!!.getCredentials(), diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt b/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt index 976f3db94..630358040 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt @@ -82,7 +82,7 @@ interface ChatMessageRepository : LifecycleAwareManager { suspend fun sendChatMessage( credentials: String, url: String, - message: CharSequence, + message: String, displayName: String, replyTo: Int, sendWithoutNotification: Boolean, diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt b/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt index f6e02e9d3..a34337aa9 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt @@ -53,7 +53,7 @@ interface ChatNetworkDataSource { suspend fun sendChatMessage( credentials: String, url: String, - message: CharSequence, + message: String, displayName: String, replyTo: Int, sendWithoutNotification: Boolean, diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt b/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt index 7db771a2b..f08b278b4 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt @@ -13,6 +13,10 @@ 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.chat.viewmodels.MessageInputViewModel +import com.nextcloud.talk.chat.viewmodels.MessageInputViewModel.Companion +import com.nextcloud.talk.chat.viewmodels.MessageInputViewModel.SendChatMessageErrorState +import com.nextcloud.talk.chat.viewmodels.MessageInputViewModel.SendChatMessageSuccessState import com.nextcloud.talk.data.database.dao.ChatBlocksDao import com.nextcloud.talk.data.database.dao.ChatMessagesDao import com.nextcloud.talk.data.database.mappers.asEntity @@ -185,7 +189,7 @@ class OfflineFirstChatRepository @Inject constructor( limit ) if (list.isNotEmpty()) { - updateUiMessages( + handleNewAndTempMessages( receivedChatMessages = list, lookIntoFuture = false, showUnreadMessagesMarker = false @@ -307,7 +311,7 @@ class OfflineFirstChatRepository @Inject constructor( val weHaveMessagesFromOurself = chatMessages.any { it.actorId == currentUser.userId } showUnreadMessagesMarker = showUnreadMessagesMarker && !weHaveMessagesFromOurself - updateUiMessages( + handleNewAndTempMessages( receivedChatMessages = chatMessages, lookIntoFuture = true, showUnreadMessagesMarker = showUnreadMessagesMarker @@ -334,7 +338,33 @@ class OfflineFirstChatRepository @Inject constructor( } } - private suspend fun updateUiMessages( + // TODO replace with WorkManager? + // private suspend fun tryToSendPendingMessages() { + // val tempMessages = chatDao.getTempMessagesForConversation(internalConversationId).first() + // + // tempMessages.forEach { + // Log.d(TAG, "Sending chat message ${it.message} another time!!") + // + // sendChatMessage( + // credentials, + // urlForChatting, + // it.message, + // it.actorDisplayName, + // it.parentMessageId?.toInt() ?: 0, + // false, + // it.referenceId ?: "" + // ).collect { result -> + // if (result.isSuccess) { + // Log.d(TAG, "success. received ref id: " + (result.getOrNull()?.referenceId ?: "none")) + // + // } else { + // Log.d(TAG, "fail. received ref id: " + (result.getOrNull()?.referenceId ?: "none")) + // } + // } + // } + // } + + private suspend fun handleNewAndTempMessages( receivedChatMessages : List, lookIntoFuture: Boolean, showUnreadMessagesMarker: Boolean @@ -792,7 +822,7 @@ class OfflineFirstChatRepository @Inject constructor( override suspend fun sendChatMessage( credentials: String, url: String, - message: CharSequence, + message: String, displayName: String, replyTo: Int, sendWithoutNotification: Boolean, @@ -820,11 +850,11 @@ class OfflineFirstChatRepository @Inject constructor( failedMessage.sendingFailed = true chatDao.updateChatMessage(failedMessage) - val failedMessageModel = failedMessage.asModel() - _removeMessageFlow.emit(failedMessageModel) - - val tripleChatMessages = Triple(true, false, listOf(failedMessageModel)) - _messageFlow.emit(tripleChatMessages) + // val failedMessageModel = failedMessage.asModel() + // _removeMessageFlow.emit(failedMessageModel) + // + // val tripleChatMessages = Triple(true, false, listOf(failedMessageModel)) + // _messageFlow.emit(tripleChatMessages) emit(Result.failure(e)) } diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt b/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt index 33211a1af..27e96517e 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt @@ -144,7 +144,7 @@ class RetrofitChatNetwork( override suspend fun sendChatMessage( credentials: String, url: String, - message: CharSequence, + message: String, displayName: String, replyTo: Int, sendWithoutNotification: Boolean, 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 8bc2f9e88..238a6f54d 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 @@ -146,7 +146,7 @@ class MessageInputViewModel @Inject constructor( internalId: String, credentials: String, url: String, - message: CharSequence, + message: String, displayName: String, replyTo: Int, sendWithoutNotification: Boolean diff --git a/app/src/main/res/layout/item_custom_outcoming_text_message.xml b/app/src/main/res/layout/item_custom_outcoming_text_message.xml index 4ada0dcd8..de86bd000 100644 --- a/app/src/main/res/layout/item_custom_outcoming_text_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_text_message.xml @@ -79,13 +79,6 @@ android:textIsSelectable="false" tools:text="Talk to you later!" /> - - - - - - -