From f44d157f9a8407f69dae8339bd9f345e4ffe06bf Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 3 Dec 2024 11:55:13 -0500 Subject: [PATCH] Inline the expireVersion capability. --- .../securesms/testing/SignalActivityRule.kt | 2 +- .../privacy/expire/ExpireTimerSettingsRepository.kt | 3 +-- .../InternalConversationSettingsFragment.kt | 2 +- .../thoughtcrime/securesms/database/RecipientTable.kt | 4 ++-- .../securesms/database/RecipientTableCursorUtil.kt | 1 - .../securesms/database/model/RecipientRecord.kt | 2 -- .../securesms/jobs/RefreshOwnProfileJob.java | 5 ----- .../securesms/logsubmit/LogSectionCapabilities.java | 1 - .../org/thoughtcrime/securesms/recipients/Recipient.kt | 3 --- .../securesms/recipients/RecipientUtil.java | 2 +- .../thoughtcrime/securesms/util/ExpirationTimerUtil.kt | 5 ++--- .../securesms/database/RecipientDatabaseTestUtils.kt | 1 - .../api/profiles/SignalServiceProfile.java | 10 +--------- 13 files changed, 9 insertions(+), 32 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt index 14a7802359..46933f55c8 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt @@ -141,7 +141,7 @@ class SignalActivityRule(private val othersCount: Int = 4, private val createGro val recipientId = RecipientId.from(SignalServiceAddress(aci, "+15555551%03d".format(i))) SignalDatabase.recipients.setProfileName(recipientId, ProfileName.fromParts("Buddy", "#$i")) SignalDatabase.recipients.setProfileKeyIfAbsent(recipientId, ProfileKeyUtil.createNew()) - SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, false, true, true)) + SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, false, true)) SignalDatabase.recipients.setProfileSharing(recipientId, true) SignalDatabase.recipients.markRegistered(recipientId, aci) val otherIdentity = IdentityKeyUtil.generateIdentityKeyPair() diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt index 32c5fe90e6..91fe84d226 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt @@ -14,7 +14,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.sms.MessageSender import org.thoughtcrime.securesms.storage.StorageSyncHelper -import org.thoughtcrime.securesms.util.ExpirationTimerUtil import java.io.IOException private val TAG: String = Log.tag(ExpireTimerSettingsRepository::class.java) @@ -39,7 +38,7 @@ class ExpireTimerSettingsRepository(val context: Context) { consumer.invoke(Result.failure(e)) } } else { - val expireTimerVersion = ExpirationTimerUtil.setExpirationTimer(recipientId, newExpirationTime) + val expireTimerVersion = SignalDatabase.recipients.setExpireMessagesAndIncrementVersion(recipientId, newExpirationTime) val outgoingMessage = OutgoingMessage.expirationUpdateMessage(Recipient.resolved(recipientId), System.currentTimeMillis(), newExpirationTime * 1000L, expireTimerVersion) MessageSender.send(context, outgoingMessage, getThreadId(recipientId), MessageSender.SendType.SIGNAL, null, null) consumer.invoke(Result.success(newExpirationTime)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt index 39db36335c..c5a5778373 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt @@ -343,7 +343,7 @@ class InternalConversationSettingsFragment : DSLSettingsFragment( TextUtils.concat( colorize("DeleteSync", capabilities.deleteSync), ", ", - colorize("VersionedExpirationTimer", capabilities.versionedExpirationTimer) + colorize("SSREv2", capabilities.storageServiceEncryptionV2) ) } else { "Recipient not found!" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt index 3e1d5549e6..8be110b94f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt @@ -419,7 +419,6 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da fun maskCapabilitiesToLong(capabilities: SignalServiceProfile.Capabilities): Long { var value: Long = 0 value = Bitmask.update(value, Capabilities.DELETE_SYNC, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isDeleteSync).serialize().toLong()) - value = Bitmask.update(value, Capabilities.VERSIONED_EXPIRATION_TIMER, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isVersionedExpirationTimer).serialize().toLong()) value = Bitmask.update(value, Capabilities.STORAGE_SERVICE_ENCRYPTION_V2, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isStorageServiceEncryptionV2).serialize().toLong()) return value } @@ -4713,7 +4712,8 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da // const val PNP = 7 // const val PAYMENT_ACTIVATION = 8 const val DELETE_SYNC = 9 - const val VERSIONED_EXPIRATION_TIMER = 10 + +// const val VERSIONED_EXPIRATION_TIMER = 10 const val STORAGE_SERVICE_ENCRYPTION_V2 = 11 // IMPORTANT: We cannot sore more than 32 capabilities in the bitmask. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt index d66dc1c3e6..2354515b16 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt @@ -177,7 +177,6 @@ object RecipientTableCursorUtil { return RecipientRecord.Capabilities( rawBits = capabilities, deleteSync = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.DELETE_SYNC, Capabilities.BIT_LENGTH).toInt()), - versionedExpirationTimer = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.VERSIONED_EXPIRATION_TIMER, Capabilities.BIT_LENGTH).toInt()), storageServiceEncryptionV2 = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.STORAGE_SERVICE_ENCRYPTION_V2, Capabilities.BIT_LENGTH).toInt()) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt index 6816a39a1c..9a05d47c29 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt @@ -121,7 +121,6 @@ data class RecipientRecord( data class Capabilities( val rawBits: Long, val deleteSync: Recipient.Capability, - val versionedExpirationTimer: Recipient.Capability, val storageServiceEncryptionV2: Recipient.Capability ) { companion object { @@ -129,7 +128,6 @@ data class RecipientRecord( val UNKNOWN = Capabilities( rawBits = 0, deleteSync = Recipient.Capability.UNKNOWN, - versionedExpirationTimer = Recipient.Capability.UNKNOWN, storageServiceEncryptionV2 = Recipient.Capability.UNKNOWN ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java index 4cf87026b3..31e2bd65c9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java @@ -225,11 +225,6 @@ public class RefreshOwnProfileJob extends BaseJob { AppDependencies.getJobManager().add(new MultiDeviceProfileContentUpdateJob()); } - if (!selfSnapshot.getVersionedExpirationTimerCapability().isSupported() && capabilities.isVersionedExpirationTimer()) { - Log.d(TAG, "Transitioned to versioned expiration timer capable, notify linked devices in case we were the last one"); - AppDependencies.getJobManager().add(new MultiDeviceProfileContentUpdateJob()); - } - if (selfSnapshot.getStorageServiceEncryptionV2Capability() == Recipient.Capability.NOT_SUPPORTED && capabilities.isStorageServiceEncryptionV2()) { Log.i(TAG, "Transitioned to storageServiceEncryptionV2 capable. Notifying other devices and pushing to storage service with a recordIkm."); AppDependencies.getJobManager().add(new MultiDeviceProfileContentUpdateJob()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java index 5c8d3e1b90..5246b1c804 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java @@ -43,7 +43,6 @@ public final class LogSectionCapabilities implements LogSection { if (globalCapabilities != null) { builder.append("DeleteSync: ").append(globalCapabilities.getDeleteSync()).append("\n"); - builder.append("VersionedExpirationTimer: ").append(globalCapabilities.getVersionedExpirationTimer()).append("\n"); builder.append("StorageServiceEncryptionV2: ").append(globalCapabilities.getStorageServiceEncryptionV2()).append("\n"); builder.append("\n"); } else { 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 4dc9baa1d8..01e3ab0c25 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.kt @@ -318,9 +318,6 @@ class Recipient( /** The user's capability to handle synchronizing deletes across linked devices. */ val deleteSyncCapability: Capability = capabilities.deleteSync - /** The user's capability to handle tracking an expire timer version. */ - val versionedExpirationTimerCapability: Capability = capabilities.versionedExpirationTimer - /** The user's capability to handle the new storage record encryption scheme. */ val storageServiceEncryptionV2Capability: Capability get() = if (SignalStore.internal.forceSsre2Capability) Capability.SUPPORTED else capabilities.storageServiceEncryptionV2 diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index 577221e9e8..d0b7e57e3b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -336,7 +336,7 @@ public class RecipientUtil { } if (threadId == -1 || SignalDatabase.messages().canSetUniversalTimer(threadId)) { - int expireTimerVersion = ExpirationTimerUtil.setExpirationTimer(recipient.getId(), defaultTimer); + int expireTimerVersion = SignalDatabase.recipients().setExpireMessagesAndIncrementVersion(recipient.getId(), defaultTimer); OutgoingMessage outgoingMessage = OutgoingMessage.expirationUpdateMessage(recipient, System.currentTimeMillis(), defaultTimer * 1000L, expireTimerVersion); MessageSender.send(context, outgoingMessage, SignalDatabase.threads().getOrCreateThreadIdFor(recipient), MessageSender.SendType.SIGNAL, null, null); return expireTimerVersion; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ExpirationTimerUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/util/ExpirationTimerUtil.kt index a018a4870d..7401b0bc97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ExpirationTimerUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ExpirationTimerUtil.kt @@ -6,7 +6,6 @@ package org.thoughtcrime.securesms.util import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId /** @@ -20,8 +19,8 @@ object ExpirationTimerUtil { @JvmStatic fun setExpirationTimer(recipientId: RecipientId, expirationTimeSeconds: Int): Int { - val selfCapable = Recipient.self().versionedExpirationTimerCapability == Recipient.Capability.SUPPORTED - val recipientCapable = Recipient.resolved(recipientId).let { it.versionedExpirationTimerCapability == Recipient.Capability.SUPPORTED || it.expireTimerVersion > 2 } + val selfCapable = true + val recipientCapable = true return if (selfCapable && recipientCapable) { SignalDatabase.recipients.setExpireMessagesAndIncrementVersion(recipientId, expirationTimeSeconds) diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt index d2a381643a..a26ae64cf6 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt @@ -127,7 +127,6 @@ object RecipientDatabaseTestUtils { capabilities = RecipientRecord.Capabilities( rawBits = capabilities, deleteSync = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.DELETE_SYNC, RecipientTable.Capabilities.BIT_LENGTH).toInt()), - versionedExpirationTimer = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.VERSIONED_EXPIRATION_TIMER, RecipientTable.Capabilities.BIT_LENGTH).toInt()), storageServiceEncryptionV2 = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.STORAGE_SERVICE_ENCRYPTION_V2, RecipientTable.Capabilities.BIT_LENGTH).toInt()) ), storageId = storageId, diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java index 2b689e26eb..a05879c4b8 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java @@ -195,19 +195,15 @@ public class SignalServiceProfile { @JsonProperty private boolean deleteSync; - @JsonProperty - private boolean versionedExpirationTimer; - @JsonProperty("ssre2") private boolean storageServiceEncryptionV2; @JsonCreator public Capabilities() {} - public Capabilities(boolean storage, boolean deleteSync, boolean versionedExpirationTimer, boolean storageServiceEncryptionV2) { + public Capabilities(boolean storage, boolean deleteSync, boolean storageServiceEncryptionV2) { this.storage = storage; this.deleteSync = deleteSync; - this.versionedExpirationTimer = versionedExpirationTimer; this.storageServiceEncryptionV2 = storageServiceEncryptionV2; } @@ -219,10 +215,6 @@ public class SignalServiceProfile { return deleteSync; } - public boolean isVersionedExpirationTimer() { - return versionedExpirationTimer; - } - public boolean isStorageServiceEncryptionV2() { return storageServiceEncryptionV2; }