Skip to content
Snippets Groups Projects
Verified Commit 930b54d5 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Avoid losing entered text on autocomplete or sharing

parent 66c130aa
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -118,11 +118,15 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
if (intent != null) {
when {
intent.type == "text/plain" -> {
chatlineFragment?.editorHelper?.replaceText(intent.getStringExtra(Intent.EXTRA_TEXT))
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)
}
}
}
......
......@@ -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)
}
}
......@@ -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,
......
......@@ -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),
......
......@@ -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())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment