feat: Copy message to clipboard (#1443)

This commit is contained in:
draen 2024-11-30 18:19:01 +01:00 committed by GitHub
parent d76eac258b
commit e412faecb9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 50 additions and 8 deletions

View file

@ -127,6 +127,7 @@ class ContactsFragment : ScreenFragment("Messages"), Logging {
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
mode.menuInflater.inflate(R.menu.menu_messages, menu)
menu.findItem(R.id.resendButton).isVisible = false
menu.findItem(R.id.copyButton).isVisible = false
mode.title = "1"
return true
}

View file

@ -17,6 +17,9 @@
package com.geeksville.mesh.ui
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu
@ -40,6 +43,7 @@ import androidx.lifecycle.lifecycleScope
import com.geeksville.mesh.DataPacket
import com.geeksville.mesh.R
import com.geeksville.mesh.android.Logging
import com.geeksville.mesh.android.toast
import com.geeksville.mesh.database.entity.QuickChatAction
import com.geeksville.mesh.databinding.MessagesFragmentBinding
import com.geeksville.mesh.model.Message
@ -284,19 +288,20 @@ class MessagesFragment : Fragment(), Logging {
actionMode?.title = selectedList.size.toString()
}
}
R.id.resendButton -> lifecycleScope.launch {
debug("User clicked resendButton")
var resendText = ""
selectedList.forEach {
resendText = resendText + it.text + System.lineSeparator()
}
if (resendText != "") {
resendText = resendText.substring(0, resendText.length - 1)
}
val resendText = getSelectedMessagesText()
binding.messageInputText.setText(resendText)
mode.finish()
}
R.id.copyButton -> lifecycleScope.launch {
val copyText = getSelectedMessagesText()
val clipboardManager =
requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipboardManager.setPrimaryClip(ClipData.newPlainText("message text", copyText))
requireActivity().toast(getString(R.string.copied))
mode.finish()
}
}
return true
}
@ -313,4 +318,15 @@ class MessagesFragment : Fragment(), Logging {
model.focusUserNode(node)
}
}
private fun getSelectedMessagesText(): String {
var messageText = ""
selectedList.forEach {
messageText = messageText + it.text + System.lineSeparator()
}
if (messageText != "") {
messageText = messageText.substring(0, messageText.length - 1)
}
return messageText
}
}