diff --git a/CHANGELOG.md b/CHANGELOG.md index 055cded3..52e80cb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- Ability to select and copy multiple text messages at once ([#600]) ## [1.6.0] - 2025-10-29 ### Changed @@ -200,6 +202,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#561]: https://github.com/FossifyOrg/Messages/issues/561 [#562]: https://github.com/FossifyOrg/Messages/issues/562 [#574]: https://github.com/FossifyOrg/Messages/issues/574 +[#600]: https://github.com/FossifyOrg/Messages/issues/600 [Unreleased]: https://github.com/FossifyOrg/Messages/compare/1.6.0...HEAD [1.6.0]: https://github.com/FossifyOrg/Messages/compare/1.5.0...1.6.0 diff --git a/app/src/main/kotlin/org/fossify/messages/adapters/ThreadAdapter.kt b/app/src/main/kotlin/org/fossify/messages/adapters/ThreadAdapter.kt index a3a8518b..62fa3075 100644 --- a/app/src/main/kotlin/org/fossify/messages/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/org/fossify/messages/adapters/ThreadAdapter.kt @@ -115,14 +115,14 @@ class ThreadAdapter( override fun prepareActionMode(menu: Menu) { val isOneItemSelected = isOneItemSelected() - val selectedItem = getSelectedItems().firstOrNull() as? Message - val hasText = selectedItem?.body != null && selectedItem.body != "" + val selectedMessages = getSelectedItems().filterIsInstance() + val hasText = selectedMessages.any { it.body.isNotEmpty() } val showSaveAs = getSelectedItems().all { it is Message && (it.attachment?.attachments?.size ?: 0) > 0 } && getSelectedAttachments().isNotEmpty() menu.apply { - findItem(R.id.cab_copy_to_clipboard).isVisible = isOneItemSelected && hasText + findItem(R.id.cab_copy_to_clipboard).isVisible = hasText findItem(R.id.cab_save_as).isVisible = showSaveAs findItem(R.id.cab_share).isVisible = isOneItemSelected && hasText findItem(R.id.cab_forward_message).isVisible = isOneItemSelected @@ -219,8 +219,14 @@ class ThreadAdapter( } private fun copyToClipboard() { - val firstItem = getSelectedItems().firstOrNull() as? Message ?: return - activity.copyToClipboard(firstItem.body) + val selectedMessages = getSelectedItems().filterIsInstance() + val textToCopy = selectedMessages + .mapNotNull { message -> message.body.takeIf { it.isNotEmpty() } } + .joinToString("\n\n") + + if (textToCopy.isNotEmpty()) { + activity.copyToClipboard(textToCopy) + } } private fun getSelectedAttachments(): List {