diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 5a17a4bec9..bdd4d43d21 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -230,6 +230,7 @@ public class ApplicationContext extends Application implements AppForegroundObse .addPostRender(() -> ActiveCallManager.clearNotifications(this)) .addPostRender(RestoreOptimizedMediaJob::enqueueIfNecessary) .addPostRender(RetryPendingSendsJob::enqueueForAll) + .addPostRender(() -> AppDependencies.getPinnedMessageManager().scheduleIfNecessary()) .execute(); Log.d(TAG, "onCreate() took " + (System.currentTimeMillis() - startTime) + " ms"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt index 38eb61d496..53be1a4888 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt @@ -406,7 +406,7 @@ class Recipient( private val resolved: Recipient get() = if (isResolving) live().resolve() else this - /** Convenience method to get a non-null [serviceId] hen you know it is there. */ + /** Convenience method to get a non-null [serviceId] when you know it is there. */ fun requireServiceId(): ServiceId { return resolved.aciValue ?: resolved.pniValue ?: throw MissingServiceIdError(id) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/PinnedMessageManager.kt b/app/src/main/java/org/thoughtcrime/securesms/service/PinnedMessageManager.kt index d11ef2b046..536fb138bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/PinnedMessageManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/PinnedMessageManager.kt @@ -13,6 +13,8 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.MmsMessageRecord import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.util.GroupUtil +import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage /** * Manages waking up and unpinning pinned messages at the correct time @@ -51,7 +53,20 @@ class PinnedMessageManager( val pinnedMessagesToUnpin = messagesTable.getPinnedMessagesBefore(System.currentTimeMillis()) for (record in pinnedMessagesToUnpin) { messagesTable.unpinMessage(messageId = record.id, threadId = record.threadId) - // TODO(michelle): Send sync message to linked device to unpin message (done to ensure consistency) + val dataMessageBuilder = SignalServiceDataMessage.newBuilder() + .withTimestamp(System.currentTimeMillis()) + .withUnpinnedMessage( + SignalServiceDataMessage.UnpinnedMessage( + targetAuthor = record.fromRecipient.requireServiceId(), + targetSentTimestamp = record.dateSent + ) + ) + + val conversationRecipient = SignalDatabase.threads.getRecipientForThreadId(record.threadId) ?: continue + if (conversationRecipient.isGroup) { + GroupUtil.setDataMessageGroupContext(application, dataMessageBuilder, conversationRecipient.requireGroupId().requirePush()) + } + AppDependencies.signalServiceMessageSender.sendSyncMessage(dataMessageBuilder.build()) } }