diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt index d0727f628ef8819acfc06f39dcb72ec76aaaf32b..c93283df54b2b27af68c84ab0665866baf188dd8 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt @@ -117,12 +117,16 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc super.onNewIntent(intent) if (intent != null) { when { - intent.type == "text/plain" -> { - chatlineFragment?.editorHelper?.replaceText(intent.getStringExtra(Intent.EXTRA_TEXT)) + intent.type == "text/plain" -> { + chatlineFragment?.replaceText(intent.getStringExtra(Intent.EXTRA_TEXT)) drawerLayout.closeDrawers() } - intent.hasExtra("bufferId") -> { - viewModel.buffer.onNext(intent.getIntExtra("bufferId", -1)) + intent.hasExtra(KEY_BUFFER_ID) -> { + viewModel.buffer.onNext(intent.getIntExtra(KEY_BUFFER_ID, -1)) + drawerLayout.closeDrawers() + } + intent.hasExtra(KEY_AUTOCOMPLETE_TEXT) -> { + chatlineFragment?.editorHelper?.appendText(intent.getStringExtra(KEY_AUTOCOMPLETE_TEXT)) drawerLayout.closeDrawers() } } @@ -643,23 +647,31 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc } companion object { + private val KEY_AUTOCOMPLETE_TEXT = "autocomplete_text" + private val KEY_BUFFER_ID = "buffer_id" + fun launch( context: Context, sharedText: CharSequence? = null, + autoCompleteText: CharSequence? = null, bufferId: Int? = null - ) = context.startActivity(intent(context, sharedText, bufferId)) + ) = context.startActivity(intent(context, sharedText, autoCompleteText, bufferId)) fun intent( context: Context, sharedText: CharSequence? = null, + autoCompleteText: CharSequence? = null, bufferId: Int? = null ) = Intent(context, ChatActivity::class.java).apply { if (sharedText != null) { type = "text/plain" putExtra(Intent.EXTRA_TEXT, sharedText) } + if (autoCompleteText != null) { + putExtra(KEY_AUTOCOMPLETE_TEXT, autoCompleteText) + } if (bufferId != null) { - putExtra("bufferId", bufferId) + putExtra(KEY_BUFFER_ID, bufferId) } } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt index 97a05e65ccb0c713e5f3072c9dd7240410faadef..232e4b1e2331347bb40f59f4b2b97bbe216620d1 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt @@ -151,7 +151,7 @@ class ChatlineFragment : ServiceBoundFragment() { fun send() { if (chatline.text.isNotBlank()) { val lines = chatline.text.lineSequence().map { - it.toString() to ircFormatSerializer.toEscapeCodes(SpannableString(it)) + it to ircFormatSerializer.toEscapeCodes(SpannableString(it)) } viewModel.session { sessionOptional -> @@ -159,8 +159,8 @@ class ChatlineFragment : ServiceBoundFragment() { viewModel.buffer { bufferId -> session?.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo -> val output = mutableListOf<IAliasManager.Command>() - for ((stripped, formatted) in lines) { - viewModel.addRecentlySentMessage(stripped) + for ((raw, formatted) in lines) { + viewModel.addRecentlySentMessage(raw) session.aliasManager?.processInput(bufferInfo, formatted, output) } for (command in output) { @@ -195,4 +195,11 @@ class ChatlineFragment : ServiceBoundFragment() { return view } + + fun replaceText(text: CharSequence) { + if (chatline.text.isNotBlank()) { + chatline.text.lineSequence().forEach(viewModel::addRecentlySentMessage) + } + editorHelper.replaceText(text) + } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt index d7cdac7d75b98fe9b8031bda82e5085b48147688..d71ceae2d647a7292972da9be0ba8315944d4eaf 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt @@ -189,7 +189,9 @@ class EditorHelper( fun setMultiLine(enabled: Boolean) = editText.setMultiLine(enabled) - fun replaceText(text: CharSequence?) = editText.replace(text) + fun replaceText(text: CharSequence?) = editText.replaceText(text) + + fun appendText(text: CharSequence?) = editText.appendText(text) private fun showColorChooser( @StringRes title: Int, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt index 1671d261f20c72835a8746a75bca4f952b9bf89e..a72f0dfd394a5f559346721c907739fdfeffe242 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt @@ -324,11 +324,18 @@ class RichEditText : EditTextSelectionChange { } } - fun replace(text: CharSequence?) { + fun replaceText(text: CharSequence?) { this.setText(text) this.setSelection(this.text.length) } + fun appendText(text: CharSequence?) { + if (!this.text.endsWith(" ")) + this.text.append(" ") + this.text.append(text) + this.setSelection(this.text.length) + } + private fun selectedFormattingChanged(range: IntRange = selection) { formattingListener?.invoke( isBold(range), diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt index a059ebbc68756f3b797bbdd417c4c8e034242b98..a13c072de4f940fc7850f87a36b916f304a61c4e 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt @@ -224,7 +224,8 @@ class MessageListFragment : ServiceBoundFragment() { } if (autoCompleteSettings.senderDoubleClick) adapter.setOnDoubleClickListener { msg -> - ChatActivity.launch(requireContext(), sharedText = "${HostmaskHelper.nick(msg.sender)}: ") + ChatActivity.launch(requireContext(), + autoCompleteText = "${HostmaskHelper.nick(msg.sender)}: ") } adapter.setOnUrlLongClickListener(LinkLongClickMenuHelper())