Pārlūkot izejas kodu

Merge pull request #3918 from nextcloud/bugfix/3897/fixTextOverwrittenByClipboard

Fix to not set clipboard text repeatedly
Julius Linus 1 gadu atpakaļ
vecāks
revīzija
b2fe29d0cf
1 mainītis faili ar 67 papildinājumiem un 65 dzēšanām
  1. 67 65
      app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

+ 67 - 65
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -1156,92 +1156,94 @@ class ChatActivity :
     }
 
     private fun initMessageInputView() {
-        val filters = arrayOfNulls<InputFilter>(1)
-        val lengthFilter = CapabilitiesUtil.getMessageMaxLength(spreedCapabilities)
+        if (binding.messageInputView.inputEditText?.filters?.isEmpty() == true) {
+            val filters = arrayOfNulls<InputFilter>(1)
+            val lengthFilter = CapabilitiesUtil.getMessageMaxLength(spreedCapabilities)
 
-        filters[0] = InputFilter.LengthFilter(lengthFilter)
-        binding.messageInputView.inputEditText?.filters = filters
+            filters[0] = InputFilter.LengthFilter(lengthFilter)
+            binding.messageInputView.inputEditText?.filters = filters
 
-        binding.messageInputView.inputEditText?.addTextChangedListener(object : TextWatcher {
+            binding.messageInputView.inputEditText?.addTextChangedListener(object : TextWatcher {
 
-            override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
-                // unused atm
-            }
+                override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
+                    // unused atm
+                }
 
-            @Suppress("Detekt.TooGenericExceptionCaught")
-            override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
-                updateOwnTypingStatus(s)
+                @Suppress("Detekt.TooGenericExceptionCaught")
+                override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
+                    updateOwnTypingStatus(s)
 
-                if (s.length >= lengthFilter) {
-                    binding.messageInputView.inputEditText?.error = String.format(
-                        Objects.requireNonNull<Resources>(resources).getString(R.string.nc_limit_hit),
-                        lengthFilter.toString()
-                    )
-                } else {
-                    binding.messageInputView.inputEditText?.error = null
-                }
+                    if (s.length >= lengthFilter) {
+                        binding.messageInputView.inputEditText?.error = String.format(
+                            Objects.requireNonNull<Resources>(resources).getString(R.string.nc_limit_hit),
+                            lengthFilter.toString()
+                        )
+                    } else {
+                        binding.messageInputView.inputEditText?.error = null
+                    }
 
-                val editable = binding.messageInputView.inputEditText?.editableText
-                editedTextBehaviorSubject.onNext(editable.toString().trim())
+                    val editable = binding.messageInputView.inputEditText?.editableText
+                    editedTextBehaviorSubject.onNext(editable.toString().trim())
 
-                if (editable != null && binding.messageInputView.inputEditText != null) {
-                    val mentionSpans = editable.getSpans(
-                        0,
-                        binding.messageInputView.inputEditText!!.length(),
-                        Spans.MentionChipSpan::class.java
-                    )
-                    var mentionSpan: Spans.MentionChipSpan
-                    for (i in mentionSpans.indices) {
-                        mentionSpan = mentionSpans[i]
-                        if (start >= editable.getSpanStart(mentionSpan) &&
-                            start < editable.getSpanEnd(mentionSpan)
-                        ) {
-                            if (editable.subSequence(
-                                    editable.getSpanStart(mentionSpan),
-                                    editable.getSpanEnd(mentionSpan)
-                                ).toString().trim { it <= ' ' } != mentionSpan.label
+                    if (editable != null && binding.messageInputView.inputEditText != null) {
+                        val mentionSpans = editable.getSpans(
+                            0,
+                            binding.messageInputView.inputEditText!!.length(),
+                            Spans.MentionChipSpan::class.java
+                        )
+                        var mentionSpan: Spans.MentionChipSpan
+                        for (i in mentionSpans.indices) {
+                            mentionSpan = mentionSpans[i]
+                            if (start >= editable.getSpanStart(mentionSpan) &&
+                                start < editable.getSpanEnd(mentionSpan)
                             ) {
-                                editable.removeSpan(mentionSpan)
+                                if (editable.subSequence(
+                                        editable.getSpanStart(mentionSpan),
+                                        editable.getSpanEnd(mentionSpan)
+                                    ).toString().trim { it <= ' ' } != mentionSpan.label
+                                ) {
+                                    editable.removeSpan(mentionSpan)
+                                }
                             }
                         }
                     }
                 }
-            }
 
-            override fun afterTextChanged(s: Editable) {
-                // unused atm
-            }
-        })
+                override fun afterTextChanged(s: Editable) {
+                    // unused atm
+                }
+            })
 
-        // Image keyboard support
-        // See: https://developer.android.com/guide/topics/text/image-keyboard
+            // Image keyboard support
+            // See: https://developer.android.com/guide/topics/text/image-keyboard
 
-        (binding.messageInputView.inputEditText as ImageEmojiEditText).onCommitContentListener = {
-            uploadFile(it.toString(), false)
-        }
-        initVoiceRecordButton()
+            (binding.messageInputView.inputEditText as ImageEmojiEditText).onCommitContentListener = {
+                uploadFile(it.toString(), false)
+            }
+            initVoiceRecordButton()
 
-        if (sharedText.isNotEmpty()) {
-            binding.messageInputView.inputEditText?.setText(sharedText)
-        }
+            if (sharedText.isNotEmpty()) {
+                binding.messageInputView.inputEditText?.setText(sharedText)
+            }
 
-        binding.messageInputView.setAttachmentsListener {
-            AttachmentDialog(this, this).show()
-        }
+            binding.messageInputView.setAttachmentsListener {
+                AttachmentDialog(this, this).show()
+            }
 
-        binding.messageInputView.button?.setOnClickListener {
-            submitMessage(false)
-        }
+            binding.messageInputView.button?.setOnClickListener {
+                submitMessage(false)
+            }
 
-        if (CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.SILENT_SEND)) {
-            binding.messageInputView.button?.setOnLongClickListener {
-                showSendButtonMenu()
-                true
+            if (CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.SILENT_SEND)) {
+                binding.messageInputView.button?.setOnLongClickListener {
+                    showSendButtonMenu()
+                    true
+                }
             }
-        }
 
-        binding.messageInputView.button?.contentDescription =
-            resources?.getString(R.string.nc_description_send_message_button)
+            binding.messageInputView.button?.contentDescription =
+                resources?.getString(R.string.nc_description_send_message_button)
+        }
     }
 
     private fun editMessageAPI(message: ChatMessage, editedMessageText: String) {