From 930b54d596d57be5e4f92e2cd69d3a281802de82 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Wed, 2 May 2018 19:05:05 +0200 Subject: [PATCH] Avoid losing entered text on autocomplete or sharing Signed-off-by: Janne Koschinski <janne@kuschku.de> --- .../quasseldroid/ui/chat/ChatActivity.kt | 24 ++++++++++++++----- .../ui/chat/input/ChatlineFragment.kt | 13 +++++++--- .../ui/chat/input/EditorHelper.kt | 4 +++- .../ui/chat/input/RichEditText.kt | 9 ++++++- .../ui/chat/messages/MessageListFragment.kt | 3 ++- 5 files changed, 41 insertions(+), 12 deletions(-) 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 d0727f628..c93283df5 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 97a05e65c..232e4b1e2 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 d7cdac7d7..d71ceae2d 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 1671d261f..a72f0dfd3 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 a059ebbc6..a13c072de 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()) -- GitLab