diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 52bfb5541f..1a43c49828 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -1072,36 +1072,38 @@ public class PushDecryptJob extends BaseJob implements InjectableType { @NonNull Optional smsMessageId) { SmsDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context); + if (SessionMetaProtocol.shouldErrorMessageShow(context, timestamp)) { + if (!smsMessageId.isPresent()) { + Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp); - if (!smsMessageId.isPresent()) { - Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp); - - if (insertResult.isPresent()) { - smsDatabase.markAsDecryptFailed(insertResult.get().getMessageId()); - messageNotifier.updateNotification(context, insertResult.get().getThreadId()); + if (insertResult.isPresent()) { + smsDatabase.markAsDecryptFailed(insertResult.get().getMessageId()); + messageNotifier.updateNotification(context, insertResult.get().getThreadId()); + } + } else { + smsDatabase.markAsDecryptFailed(smsMessageId.get()); } - } else { - smsDatabase.markAsDecryptFailed(smsMessageId.get()); } - SessionManagementProtocol.triggerSessionRestorationUI(context, sender); + SessionManagementProtocol.triggerSessionRestorationUI(context, sender, timestamp); } private void handleNoSessionMessage(@NonNull String sender, int senderDevice, long timestamp, @NonNull Optional smsMessageId) { SmsDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context); + if (SessionMetaProtocol.shouldErrorMessageShow(context, timestamp)) { + if (!smsMessageId.isPresent()) { + Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp); - if (!smsMessageId.isPresent()) { - Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp); - - if (insertResult.isPresent()) { - smsDatabase.markAsNoSession(insertResult.get().getMessageId()); - messageNotifier.updateNotification(context, insertResult.get().getThreadId()); + if (insertResult.isPresent()) { + smsDatabase.markAsNoSession(insertResult.get().getMessageId()); + messageNotifier.updateNotification(context, insertResult.get().getThreadId()); + } + } else { + smsDatabase.markAsNoSession(smsMessageId.get()); } - } else { - smsDatabase.markAsNoSession(smsMessageId.get()); } - SessionManagementProtocol.triggerSessionRestorationUI(context, sender); + SessionManagementProtocol.triggerSessionRestorationUI(context, sender, timestamp); } private void handleLegacyMessage(@NonNull String sender, int senderDevice, long timestamp, diff --git a/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt b/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt index 2327cbe3bb..b4a16ed505 100644 --- a/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt +++ b/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt @@ -30,6 +30,12 @@ object SessionMetaProtocol { return shouldIgnoreMessage } + @JvmStatic + fun shouldErrorMessageShow(context: Context, timestamp: Long): Boolean { + val restorationTimestamp = TextSecurePreferences.getRestorationTime(context) + return timestamp > restorationTimestamp + } + @JvmStatic fun handleProfileUpdateIfNeeded(context: Context, content: SignalServiceContent) { val rawDisplayName = content.senderDisplayName.orNull() ?: return