feat: allow copying multiple messages (#601)

Refs: https://github.com/FossifyOrg/Messages/issues/600
This commit is contained in:
Naveen Singh
2025-11-22 22:21:34 +05:30
committed by GitHub
parent 7dff7d62b8
commit 30ecbbe3cb
2 changed files with 14 additions and 5 deletions

View File

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

View File

@@ -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<Message>()
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<Message>()
val textToCopy = selectedMessages
.mapNotNull { message -> message.body.takeIf { it.isNotEmpty() } }
.joinToString("\n\n")
if (textToCopy.isNotEmpty()) {
activity.copyToClipboard(textToCopy)
}
}
private fun getSelectedAttachments(): List<Attachment> {