diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt index b9c4763f2..26f19775e 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt @@ -94,23 +94,33 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) : colorizeMessageBubble(message) itemView.isSelected = false val user = currentUserProvider.currentUser.blockingGet() - val hasCheckboxes = processCheckboxes( - message, - user - ) - processMessage(message, hasCheckboxes) - } - - private fun processMessage(message: ChatMessage, hasCheckboxes: Boolean) { - var textSize = context.resources!!.getDimension(R.dimen.chat_text_size) + lateinit var userGroups: List + lateinit var userCircles: List coroutineScope.launch { - val userGroups = userGroupsCirclesRepository.getUserGroups() + userGroups = userGroupsCirclesRepository.getUserGroups() .map { list -> list.mapNotNull { it.groups } }.firstOrNull() ?: emptyList() - val userCircles = userGroupsCirclesRepository.getUserCircles() + userCircles = userGroupsCirclesRepository.getUserCircles() .map { list -> list.mapNotNull { it.displayName } }.firstOrNull() ?: emptyList() - if (!hasCheckboxes) { + val hasCheckboxes = processCheckboxes( + message, + user + ) + processMessage(message, hasCheckboxes, userGroups, userCircles) + } + } + + @Suppress("Detekt.LongMethod") + private fun processMessage( + message: ChatMessage, + hasCheckboxes: Boolean, + userGroups: List, + userCircles: List + ) { + var textSize = context.resources!!.getDimension(R.dimen.chat_text_size) + + if (!hasCheckboxes) { binding.messageText.visibility = View.VISIBLE binding.checkboxContainer.visibility = View.GONE var processedMessageText = messageUtils.enrichChatMessageText( @@ -195,7 +205,6 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) : viewThemeUtils ) } - } private fun processCheckboxes(chatMessage: ChatMessage, user: User): Boolean { val chatActivity = commonMessageInterface as ChatActivity 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 a123d4416..8778e0ad2 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 @@ -93,20 +93,34 @@ class OutcomingTextMessageViewHolder(itemView: View) : private val coroutineScope = CoroutineScope(Dispatchers.Main) - @Suppress("Detekt.LongMethod") override fun onBind(message: ChatMessage) { super.onBind(message) sharedApplication!!.componentApplication.inject(this) val user = currentUserProvider.currentUser.blockingGet() - val hasCheckboxes = processCheckboxes( - message, - user - ) - processMessage(message, hasCheckboxes) + lateinit var userGroups: List + lateinit var userCircles: List + coroutineScope.launch { + userGroups = userGroupsCirclesRepository.getUserGroups() + .map { list -> list.mapNotNull { it.groups } }.firstOrNull() ?: emptyList() + + userCircles = userGroupsCirclesRepository.getUserCircles() + .map { list -> list.mapNotNull { it.displayName } }.firstOrNull() ?: emptyList() + + val hasCheckboxes = processCheckboxes( + message, + user + ) + processMessage(message, hasCheckboxes, userCircles, userGroups) + } } @Suppress("Detekt.LongMethod") - private fun processMessage(message: ChatMessage, hasCheckboxes: Boolean) { + private fun processMessage( + message: ChatMessage, + hasCheckboxes: Boolean, + userGroups: List, + userCircles: List + ) { var isBubbled = true val layoutParams = binding.messageTime.layoutParams as FlexboxLayout.LayoutParams var textSize = context.resources.getDimension(R.dimen.chat_text_size) @@ -114,13 +128,7 @@ class OutcomingTextMessageViewHolder(itemView: View) : realView.isSelected = false layoutParams.isWrapBefore = false viewThemeUtils.platform.colorTextView(binding.messageTime, ColorRole.ON_SURFACE_VARIANT) - viewThemeUtils.platform.colorTextView(binding.messageTime, ColorRole.ON_SURFACE_VARIANT) - coroutineScope.launch { - val userGroups = userGroupsCirclesRepository.getUserGroups() - .map { list -> list.mapNotNull { it.groups } }.firstOrNull() ?: emptyList() - - val userCircles = userGroupsCirclesRepository.getUserCircles() - .map { list -> list.mapNotNull { it.displayName } }.firstOrNull() ?: emptyList() + viewThemeUtils.platform.colorTextView(binding.messageTime, ColorRole.ON_SURFACE_VARIANT) binding.messageText.visibility = View.VISIBLE binding.checkboxContainer.visibility = View.GONE @@ -129,7 +137,7 @@ class OutcomingTextMessageViewHolder(itemView: View) : binding.messageText.context, message, false, - viewThemeUtils, + viewThemeUtils ) @@ -165,8 +173,6 @@ class OutcomingTextMessageViewHolder(itemView: View) : userCircles ) binding.messageText.text = processedMessageText - } - if ( (message.messageParameters == null || message.messageParameters!!.size <= 0) && @@ -177,7 +183,6 @@ class OutcomingTextMessageViewHolder(itemView: View) : realView.isSelected = true isBubbled = false } - binding.messageTime.layoutParams = layoutParams viewThemeUtils.platform.colorTextView(binding.messageText, ColorRole.ON_SURFACE_VARIANT) binding.messageText.text = processedMessageText @@ -207,7 +212,10 @@ class OutcomingTextMessageViewHolder(itemView: View) : binding.sendingProgress.visibility = View.GONE if (message.sendingFailed) { - updateStatus(R.drawable.baseline_error_outline_24, context.resources?.getString(R.string.nc_message_failed)) + updateStatus( + R.drawable.baseline_error_outline_24, + context.resources?.getString(R.string.nc_message_failed) + ) } else if (message.isTemporary) { updateStatus(R.drawable.baseline_schedule_24, context.resources?.getString(R.string.nc_message_sending)) } else if (message.readStatus == ReadStatus.READ) { @@ -241,7 +249,6 @@ class OutcomingTextMessageViewHolder(itemView: View) : ) } - private fun processCheckboxes(chatMessage: ChatMessage, user: User): Boolean { val chatActivity = commonMessageInterface as ChatActivity val message = chatMessage.message!!.toSpanned() diff --git a/app/src/main/java/com/nextcloud/talk/ui/ComposeChatAdapter.kt b/app/src/main/java/com/nextcloud/talk/ui/ComposeChatAdapter.kt index e473f0684..cb626e038 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/ComposeChatAdapter.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/ComposeChatAdapter.kt @@ -621,7 +621,7 @@ class ComposeChatAdapter( ) processedMessageText = viewModel.messageUtils.processMessageParameters( - ctx, viewModel.viewThemeUtils, processedMessageText!!, message, null + ctx, viewModel.viewThemeUtils, processedMessageText!!, message, null, null, null ) EmojiTextView(ctx).apply { diff --git a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt index 480ab11a0..1d08bbb9f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt @@ -77,6 +77,7 @@ class MessageUtils @Inject constructor(val context: Context) { return viewThemeUtils.talk.themeMarkdown(context, message, incoming) } + @Suppress("LongParameterList") fun processMessageParameters( themingContext: Context, viewThemeUtils: ViewThemeUtils,