From 584fe8d6f8c827db6e736be5ee0851605d26d800 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Sun, 16 Feb 2025 05:51:54 -0600 Subject: [PATCH] fix: limit quick chat append, prevent duplicates (#1522) Limits quick chat append to 200 characters and prevents duplicate appends. Also sets a constant for the max message size. fixes #1511 --- .../com/geeksville/mesh/ui/message/Message.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt index bcb94fb04..9070b0b69 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt @@ -101,6 +101,8 @@ import com.geeksville.mesh.ui.theme.AppTheme import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch +private const val MESSAGE_CHARACTER_LIMIT = 200 + internal fun FragmentManager.navigateToMessages(contactKey: String, message: String = "") { val messagesFragment = MessagesFragment().apply { arguments = bundleOf("contactKey" to contactKey, "message" to message) @@ -253,13 +255,16 @@ internal fun MessageScreen( QuickChatRow(isConnected, quickChat) { action -> if (action.mode == QuickChatAction.Mode.Append) { val originalText = messageInput.value.text - val needsSpace = !originalText.endsWith(' ') && originalText.isNotEmpty() - val newText = buildString { - append(originalText) - if (needsSpace) append(' ') - append(action.message) + if (!originalText.contains(action.message)) { + val needsSpace = + !originalText.endsWith(' ') && originalText.isNotEmpty() + val newText = buildString { + append(originalText) + if (needsSpace) append(' ') + append(action.message) + }.take(MESSAGE_CHARACTER_LIMIT) + messageInput.value = TextFieldValue(newText, TextRange(newText.length)) } - messageInput.value = TextFieldValue(newText, TextRange(newText.length)) } else { viewModel.sendMessage(action.message, contactKey) } @@ -419,7 +424,7 @@ private fun TextInput( enabled: Boolean, message: MutableState, modifier: Modifier = Modifier, - maxSize: Int = 200, + maxSize: Int = MESSAGE_CHARACTER_LIMIT, onClick: (String) -> Unit = {} ) = Column(modifier) { val focusManager = LocalFocusManager.current