Add support for versioned expiration timers.

Co-authored-by: Greyson Parrelli <greyson@signal.org>
This commit is contained in:
Cody Henthorne
2024-08-27 07:41:35 -04:00
committed by Nicholas Tinsley
parent 4152294b57
commit 1f196f74ff
43 changed files with 392 additions and 139 deletions

View File

@@ -44,6 +44,7 @@ object RecipientDatabaseTestUtils {
messageRingtone: Uri = Uri.EMPTY,
callRingtone: Uri = Uri.EMPTY,
expireMessages: Int = 0,
expireTimerVersion: Int = 1,
registered: RecipientTable.RegisteredState = RecipientTable.RegisteredState.REGISTERED,
profileKey: ByteArray = Random.nextBytes(32),
expiringProfileKeyCredential: ExpiringProfileKeyCredential? = null,
@@ -107,6 +108,7 @@ object RecipientDatabaseTestUtils {
messageRingtone = messageRingtone,
callRingtone = callRingtone,
expireMessages = expireMessages,
expireTimerVersion = expireTimerVersion,
registered = registered,
profileKey = profileKey,
expiringProfileKeyCredential = expiringProfileKeyCredential,
@@ -124,7 +126,8 @@ object RecipientDatabaseTestUtils {
sealedSenderAccessMode = sealedSenderAccessMode,
capabilities = RecipientRecord.Capabilities(
rawBits = capabilities,
deleteSync = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.DELETE_SYNC, RecipientTable.Capabilities.BIT_LENGTH).toInt())
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())
),
storageId = storageId,
mentionSetting = mentionSetting,

View File

@@ -20,6 +20,7 @@ object TestMms {
sentTimeMillis: Long = System.currentTimeMillis(),
receivedTimestampMillis: Long = System.currentTimeMillis(),
expiresIn: Long = 0,
expireTimerVersion: Int = 1,
viewOnce: Boolean = false,
distributionType: Int = ThreadTable.DistributionTypes.DEFAULT,
type: Long = MessageTypes.BASE_INBOX_TYPE,
@@ -29,23 +30,24 @@ object TestMms {
storyType: StoryType = StoryType.NONE
): Long {
val message = OutgoingMessage(
recipient,
body,
emptyList(),
sentTimeMillis,
expiresIn,
viewOnce,
distributionType,
storyType,
null,
false,
null,
emptyList(),
emptyList(),
emptyList(),
emptySet(),
emptySet(),
null
recipient = recipient,
body = body,
attachments = emptyList(),
timestamp = sentTimeMillis,
expiresIn = expiresIn,
expireTimerVersion = expireTimerVersion,
viewOnce = viewOnce,
distributionType = distributionType,
storyType = storyType,
parentStoryId = null,
isStoryReaction = false,
quote = null,
contacts = emptyList(),
previews = emptyList(),
mentions = emptyList(),
networkFailures = emptySet(),
mismatches = emptySet(),
giftBadge = null
)
return insert(
@@ -61,7 +63,7 @@ object TestMms {
)
}
fun insert(
private fun insert(
db: SQLiteDatabase,
message: OutgoingMessage,
recipientId: RecipientId = message.threadRecipient.id,
@@ -81,6 +83,7 @@ object TestMms {
put(MessageTable.DATE_RECEIVED, receivedTimestampMillis)
put(MessageTable.SMS_SUBSCRIPTION_ID, message.subscriptionId)
put(MessageTable.EXPIRES_IN, message.expiresIn)
put(MessageTable.EXPIRE_TIMER_VERSION, message.expireTimerVersion)
put(MessageTable.VIEW_ONCE, message.isViewOnce)
put(MessageTable.FROM_RECIPIENT_ID, recipientId.serialize())
put(MessageTable.TO_RECIPIENT_ID, recipientId.serialize())