diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt index 5cdb369c09..b9b5ed5f7c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt @@ -106,7 +106,14 @@ class PreKeysSyncJob private constructor( Parameters.Builder() .setQueue("PreKeysSyncJob") .addConstraint(NetworkConstraint.KEY) - .setMaxInstancesForFactory(1) + .apply { + if (forceRotation) { + setMaxInstancesForFactory(Parameters.UNLIMITED) + setMaxInstancesForQueue(2) + } else { + setMaxInstancesForFactory(1) + } + } .setMaxAttempts(Parameters.UNLIMITED) .setLifespan(TimeUnit.DAYS.toMillis(30)) .build(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt index cdd7bdadc4..58a2b2e2d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt @@ -326,7 +326,15 @@ object MessageDecryptor { ): Result { if (ServiceId.parseOrNull(envelope.destinationServiceId, envelope.destinationServiceIdBinary) == SignalStore.account.pni) { Log.w(TAG, "${logPrefix(envelope)} Decryption error for message sent to our PNI! Ignoring.") - return Result.Ignore(envelope, serverDeliveredTimestamp, followUpOperations) + + if (envelope.type == Envelope.Type.PREKEY_MESSAGE) { + Log.w(TAG, "${logPrefix(envelope)} Decryption error was on a prekey message. Forcing a prekey rotation.", true) + followUpOperations += FollowUpOperation { + PreKeysSyncJob.create(forceRotationRequested = true).asChain() + } + } + + return Result.Ignore(envelope, serverDeliveredTimestamp, followUpOperations.toUnmodifiableList()) } val contentHint: ContentHint = ContentHint.fromType(protocolException.contentHint)