feat: allow copying multiple messages (#601)
Refs: https://github.com/FossifyOrg/Messages/issues/600
This commit is contained in:
parent
7dff7d62b8
commit
30ecbbe3cb
2 changed files with 14 additions and 5 deletions
|
|
@ -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).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
### Added
|
||||||
|
- Ability to select and copy multiple text messages at once ([#600])
|
||||||
|
|
||||||
## [1.6.0] - 2025-10-29
|
## [1.6.0] - 2025-10-29
|
||||||
### Changed
|
### 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
|
[#561]: https://github.com/FossifyOrg/Messages/issues/561
|
||||||
[#562]: https://github.com/FossifyOrg/Messages/issues/562
|
[#562]: https://github.com/FossifyOrg/Messages/issues/562
|
||||||
[#574]: https://github.com/FossifyOrg/Messages/issues/574
|
[#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
|
[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
|
[1.6.0]: https://github.com/FossifyOrg/Messages/compare/1.5.0...1.6.0
|
||||||
|
|
|
||||||
|
|
@ -115,14 +115,14 @@ class ThreadAdapter(
|
||||||
|
|
||||||
override fun prepareActionMode(menu: Menu) {
|
override fun prepareActionMode(menu: Menu) {
|
||||||
val isOneItemSelected = isOneItemSelected()
|
val isOneItemSelected = isOneItemSelected()
|
||||||
val selectedItem = getSelectedItems().firstOrNull() as? Message
|
val selectedMessages = getSelectedItems().filterIsInstance<Message>()
|
||||||
val hasText = selectedItem?.body != null && selectedItem.body != ""
|
val hasText = selectedMessages.any { it.body.isNotEmpty() }
|
||||||
val showSaveAs = getSelectedItems().all {
|
val showSaveAs = getSelectedItems().all {
|
||||||
it is Message && (it.attachment?.attachments?.size ?: 0) > 0
|
it is Message && (it.attachment?.attachments?.size ?: 0) > 0
|
||||||
} && getSelectedAttachments().isNotEmpty()
|
} && getSelectedAttachments().isNotEmpty()
|
||||||
|
|
||||||
menu.apply {
|
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_save_as).isVisible = showSaveAs
|
||||||
findItem(R.id.cab_share).isVisible = isOneItemSelected && hasText
|
findItem(R.id.cab_share).isVisible = isOneItemSelected && hasText
|
||||||
findItem(R.id.cab_forward_message).isVisible = isOneItemSelected
|
findItem(R.id.cab_forward_message).isVisible = isOneItemSelected
|
||||||
|
|
@ -219,8 +219,14 @@ class ThreadAdapter(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun copyToClipboard() {
|
private fun copyToClipboard() {
|
||||||
val firstItem = getSelectedItems().firstOrNull() as? Message ?: return
|
val selectedMessages = getSelectedItems().filterIsInstance<Message>()
|
||||||
activity.copyToClipboard(firstItem.body)
|
val textToCopy = selectedMessages
|
||||||
|
.mapNotNull { message -> message.body.takeIf { it.isNotEmpty() } }
|
||||||
|
.joinToString("\n\n")
|
||||||
|
|
||||||
|
if (textToCopy.isNotEmpty()) {
|
||||||
|
activity.copyToClipboard(textToCopy)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSelectedAttachments(): List<Attachment> {
|
private fun getSelectedAttachments(): List<Attachment> {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue