Skip to content

Commit 30ecbbe

Browse files
authored
feat: allow copying multiple messages (#601)
Refs: #600
1 parent 7dff7d6 commit 30ecbbe

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Added
9+
- Ability to select and copy multiple text messages at once ([#600])
810

911
## [1.6.0] - 2025-10-29
1012
### Changed
@@ -200,6 +202,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
200202
[#561]: https://github.com/FossifyOrg/Messages/issues/561
201203
[#562]: https://github.com/FossifyOrg/Messages/issues/562
202204
[#574]: https://github.com/FossifyOrg/Messages/issues/574
205+
[#600]: https://github.com/FossifyOrg/Messages/issues/600
203206

204207
[Unreleased]: https://github.com/FossifyOrg/Messages/compare/1.6.0...HEAD
205208
[1.6.0]: https://github.com/FossifyOrg/Messages/compare/1.5.0...1.6.0

app/src/main/kotlin/org/fossify/messages/adapters/ThreadAdapter.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,14 @@ class ThreadAdapter(
115115

116116
override fun prepareActionMode(menu: Menu) {
117117
val isOneItemSelected = isOneItemSelected()
118-
val selectedItem = getSelectedItems().firstOrNull() as? Message
119-
val hasText = selectedItem?.body != null && selectedItem.body != ""
118+
val selectedMessages = getSelectedItems().filterIsInstance<Message>()
119+
val hasText = selectedMessages.any { it.body.isNotEmpty() }
120120
val showSaveAs = getSelectedItems().all {
121121
it is Message && (it.attachment?.attachments?.size ?: 0) > 0
122122
} && getSelectedAttachments().isNotEmpty()
123123

124124
menu.apply {
125-
findItem(R.id.cab_copy_to_clipboard).isVisible = isOneItemSelected && hasText
125+
findItem(R.id.cab_copy_to_clipboard).isVisible = hasText
126126
findItem(R.id.cab_save_as).isVisible = showSaveAs
127127
findItem(R.id.cab_share).isVisible = isOneItemSelected && hasText
128128
findItem(R.id.cab_forward_message).isVisible = isOneItemSelected
@@ -219,8 +219,14 @@ class ThreadAdapter(
219219
}
220220

221221
private fun copyToClipboard() {
222-
val firstItem = getSelectedItems().firstOrNull() as? Message ?: return
223-
activity.copyToClipboard(firstItem.body)
222+
val selectedMessages = getSelectedItems().filterIsInstance<Message>()
223+
val textToCopy = selectedMessages
224+
.mapNotNull { message -> message.body.takeIf { it.isNotEmpty() } }
225+
.joinToString("\n\n")
226+
227+
if (textToCopy.isNotEmpty()) {
228+
activity.copyToClipboard(textToCopy)
229+
}
224230
}
225231

226232
private fun getSelectedAttachments(): List<Attachment> {

0 commit comments

Comments
 (0)