diff --git a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt
index 734f93b71..420563282 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/ContactsFragment.kt
@@ -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
}
diff --git a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt
index 95e304ca4..8ce297c42 100644
--- a/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt
+++ b/app/src/main/java/com/geeksville/mesh/ui/MessagesFragment.kt
@@ -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
+ }
}
diff --git a/app/src/main/res/drawable/ic_twotone_content_copy_24.xml b/app/src/main/res/drawable/ic_twotone_content_copy_24.xml
new file mode 100644
index 000000000..5c99d3fa8
--- /dev/null
+++ b/app/src/main/res/drawable/ic_twotone_content_copy_24.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/menu/menu_messages.xml b/app/src/main/res/menu/menu_messages.xml
index 0afbd7ec6..2d8601e1f 100644
--- a/app/src/main/res/menu/menu_messages.xml
+++ b/app/src/main/res/menu/menu_messages.xml
@@ -38,4 +38,9 @@
android:icon="@drawable/ic_twotone_select_all_24"
android:title="@string/select_all"
app:showAsAction="ifRoom" />
+
\ No newline at end of file
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 1dfae5ff9..d1331b49f 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -277,4 +277,6 @@
- %d skoków
Skoki do: %1$d. Skoki od: %2$d
+ Kopiuj
+ Skopiowano
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1416fb61f..3a6b9ff87 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -310,4 +310,6 @@
Selected
Not Selected
Unknown Age
+ Copy
+ Copied
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 74adaf3c4..5586516f2 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -79,6 +79,7 @@