diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt index bd3903a78d..beb4e377c5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt @@ -12,6 +12,8 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import org.session.libsession.messaging.messages.ExpirationConfiguration +import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate +import org.session.libsession.messaging.sending_receiving.MessageSender import org.session.libsession.utilities.recipients.Recipient import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType import org.thoughtcrime.securesms.database.Storage @@ -98,6 +100,11 @@ class ExpirationSettingsViewModel( val expiryChangeTimestampMs = System.currentTimeMillis() storage.setExpirationConfiguration(ExpirationConfiguration(threadId, expiresIn, expiryType, expiryChangeTimestampMs)) + val message = ExpirationTimerUpdate(expiresIn) + val address = recipient.value?.address ?: return@launch + message.recipient = address.serialize() + message.sentTimestamp = System.currentTimeMillis() + MessageSender.send(message, address) } @dagger.assisted.AssistedFactory diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java index b46a99b775..f09dee8b55 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java @@ -18,6 +18,7 @@ import org.session.libsignal.utilities.Log; import org.session.libsignal.utilities.guava.Optional; import org.thoughtcrime.securesms.database.MmsDatabase; import org.thoughtcrime.securesms.database.SmsDatabase; +import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.dependencies.DatabaseComponent; import org.thoughtcrime.securesms.mms.MmsException; @@ -70,10 +71,11 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM @Override public void setExpirationTimer(@NotNull ExpirationTimerUpdate message, @Nullable Integer expirationType) { try { - long threadId = message.getThreadID(); + ThreadDatabase threadDb = DatabaseComponent.get(context).threadDatabase(); + long threadId = threadDb.getOrCreateThreadIdFor(Recipient.from(context, Address.fromSerialized(message.getSender()), false)); if (message.getGroupPublicKey() != null) { Recipient recipient = Recipient.from(context, Address.fromSerialized(GroupUtil.doubleEncodeGroupID(message.getGroupPublicKey())), false); - threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(recipient); + threadId = threadDb.getOrCreateThreadIdFor(recipient); } DatabaseComponent.get(context).expirationConfigurationDatabase().setExpirationConfiguration( new ExpirationConfiguration(threadId, message.getDuration(), expirationType, System.currentTimeMillis()) diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt index 9186a995ac..c25f4c2a73 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt @@ -46,9 +46,9 @@ abstract class Message { return } builder.expirationTimer = config.durationSeconds + builder.lastDisappearingMessageChangeTimestamp = config.updatedTimestampMs if (config.isEnabled) { builder.expirationType = config.expirationType - builder.lastDisappearingMessageChangeTimestamp = config.updatedTimestampMs } } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt index 2855df7690..7ded412262 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt @@ -92,7 +92,7 @@ fun updateExpirationConfigurationIfNeeded(message: Message, proto: SignalService val threadID = storage.getOrCreateThreadIdFor(message.sender!!, message.groupPublicKey, openGroupID) if (threadID <= 0) return val localConfig = storage.getExpirationConfiguration(threadID) - if (localConfig == null || localConfig.updatedTimestampMs < proto.lastDisappearingMessageChangeTimestamp) return + if (localConfig == null || localConfig.updatedTimestampMs > proto.lastDisappearingMessageChangeTimestamp) return val durationSeconds = if (proto.hasExpirationTimer()) proto.expirationTimer else 0 val type = if (proto.hasExpirationType()) proto.expirationType else null val remoteConfig = ExpirationConfiguration( @@ -157,7 +157,7 @@ fun MessageReceiver.cancelTypingIndicatorsIfNeeded(senderPublicKey: String) { } private fun MessageReceiver.handleExpirationTimerUpdate(message: ExpirationTimerUpdate) { - if (ExpirationConfiguration.isNewConfigEnabled) return + if (!ExpirationConfiguration.isNewConfigEnabled) return val recipient = Recipient.from(MessagingModuleConfiguration.shared.context, Address.fromSerialized(message.sender!!), false) val type = when { recipient.isLocalNumber -> ExpirationType.DELETE_AFTER_READ