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 @@