From ed5c51d954f77dbe6856821ffaecbe2d7fb14b94 Mon Sep 17 00:00:00 2001 From: Michelle Tang Date: Fri, 19 Dec 2025 18:06:53 -0500 Subject: [PATCH] Allow pinning in note to self. --- .../conversation/v2/ConversationRepository.kt | 6 +- .../securesms/conversation/v2/PinSendUtil.kt | 64 +++++++++++-------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt index e87d0e4ec7..f1df4c417f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt @@ -339,8 +339,9 @@ class ConversationRepository( listOf(threadRecipient) } + val includeSelf = threadRecipient.isSelf val eligibleTargets = RecipientUtil.getEligibleForSending(possibleTargets) - val results = PinSendUtil.sendPinMessage(applicationContext, threadRecipient, message, eligibleTargets, messageRecord.id) + val results = PinSendUtil.sendPinMessage(applicationContext, threadRecipient, message, eligibleTargets, includeSelf, messageRecord.id) val sendResults = GroupSendJobHelper.getCompletedSends(eligibleTargets, results) @@ -396,8 +397,9 @@ class ConversationRepository( listOf(threadRecipient) } + val includeSelf = threadRecipient.isSelf val eligibleTargets: List = RecipientUtil.getEligibleForSending(possibleTargets) - val results = PinSendUtil.sendUnpinMessage(applicationContext, threadRecipient, message.fromRecipient.requireServiceId(), message.dateSent, eligibleTargets, messageId) + val results = PinSendUtil.sendUnpinMessage(applicationContext, threadRecipient, message.fromRecipient.requireServiceId(), message.dateSent, eligibleTargets, includeSelf, messageId) val sendResults = GroupSendJobHelper.getCompletedSends(eligibleTargets, results) if (sendResults.completed.isNotEmpty() || possibleTargets.isEmpty()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/PinSendUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/PinSendUtil.kt index 9de0ad18ef..58ffc112ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/PinSendUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/PinSendUtil.kt @@ -31,7 +31,7 @@ object PinSendUtil { private val PIN_TERMINATE_TIMEOUT = 7000.milliseconds @Throws(IOException::class, GroupNotAMemberException::class, UndeliverableMessageException::class) - fun sendPinMessage(applicationContext: Context, threadRecipient: Recipient, message: OutgoingMessage, destinations: List, relatedMessageId: Long): List { + fun sendPinMessage(applicationContext: Context, threadRecipient: Recipient, message: OutgoingMessage, destinations: List, includeSelf: Boolean, relatedMessageId: Long): List { val builder = newBuilder() val groupId = if (threadRecipient.isPushV2Group) threadRecipient.requireGroupId().requireV2() else null @@ -58,23 +58,27 @@ object PinSendUtil { ) .build() - return GroupSendUtil.sendResendableDataMessage( - applicationContext, - groupId, - null, - destinations, - false, - ContentHint.RESENDABLE, - MessageId(relatedMessageId), - message, - false, - false, - null - ) { System.currentTimeMillis() - sentTime > PIN_TERMINATE_TIMEOUT.inWholeMilliseconds } + return if (includeSelf) { + listOf(AppDependencies.signalServiceMessageSender.sendSyncMessage(message)) + } else { + GroupSendUtil.sendResendableDataMessage( + applicationContext, + groupId, + null, + destinations, + false, + ContentHint.RESENDABLE, + MessageId(relatedMessageId), + message, + false, + false, + null + ) { System.currentTimeMillis() - sentTime > PIN_TERMINATE_TIMEOUT.inWholeMilliseconds } + } } @Throws(IOException::class, GroupNotAMemberException::class, UndeliverableMessageException::class) - fun sendUnpinMessage(applicationContext: Context, threadRecipient: Recipient, targetAuthor: ServiceId, targetSentTimestamp: Long, destinations: List, relatedMessageId: Long): List { + fun sendUnpinMessage(applicationContext: Context, threadRecipient: Recipient, targetAuthor: ServiceId, targetSentTimestamp: Long, destinations: List, includeSelf: Boolean, relatedMessageId: Long): List { val builder = newBuilder() val groupId = if (threadRecipient.isPushV2Group) threadRecipient.requireGroupId().requireV2() else null if (groupId != null) { @@ -98,18 +102,22 @@ object PinSendUtil { ) .build() - return GroupSendUtil.sendResendableDataMessage( - applicationContext, - groupId, - null, - destinations, - false, - ContentHint.RESENDABLE, - MessageId(relatedMessageId), - message, - false, - false, - null - ) { System.currentTimeMillis() - sentTime > PIN_TERMINATE_TIMEOUT.inWholeMilliseconds } + return if (includeSelf) { + listOf(AppDependencies.signalServiceMessageSender.sendSyncMessage(message)) + } else { + GroupSendUtil.sendResendableDataMessage( + applicationContext, + groupId, + null, + destinations, + false, + ContentHint.RESENDABLE, + MessageId(relatedMessageId), + message, + false, + false, + null + ) { System.currentTimeMillis() - sentTime > PIN_TERMINATE_TIMEOUT.inWholeMilliseconds } + } } }