mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 04:28:35 +00:00
Update to libsignal 0.65.4
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -130,6 +130,10 @@ object ExportOddities {
|
|||||||
return log(0, "Distribution list had self as a member. Removing it.")
|
return log(0, "Distribution list had self as a member. Removing it.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun emptyQuote(sentTimestamp: Long): String {
|
||||||
|
return log(sentTimestamp, "Quote had no text or attachments. Removing it.")
|
||||||
|
}
|
||||||
|
|
||||||
private fun log(sentTimestamp: Long, message: String): String {
|
private fun log(sentTimestamp: Long, message: String): String {
|
||||||
return "[ODDITY][$sentTimestamp] $message"
|
return "[ODDITY][$sentTimestamp] $message"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -956,21 +956,28 @@ private fun BackupMessageRecord.toRemoteQuote(mediaArchiveEnabled: Boolean, atta
|
|||||||
}
|
}
|
||||||
|
|
||||||
val bodyRanges = this.quoteBodyRanges?.toRemoteBodyRanges(dateSent) ?: emptyList()
|
val bodyRanges = this.quoteBodyRanges?.toRemoteBodyRanges(dateSent) ?: emptyList()
|
||||||
|
val body = this.quoteBody?.takeUnless { it.isBlank() }?.let { body ->
|
||||||
|
Text(
|
||||||
|
body = body,
|
||||||
|
bodyRanges = bodyRanges
|
||||||
|
)
|
||||||
|
}
|
||||||
|
val attachments = if (remoteType == Quote.Type.VIEW_ONCE) {
|
||||||
|
emptyList()
|
||||||
|
} else {
|
||||||
|
attachments?.toRemoteQuoteAttachments(mediaArchiveEnabled) ?: emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body == null && attachments.isEmpty()) {
|
||||||
|
Log.w(TAG, ExportOddities.emptyQuote(this.dateSent))
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
return Quote(
|
return Quote(
|
||||||
targetSentTimestamp = this.quoteTargetSentTimestamp.takeIf { !this.quoteMissing && it != MessageTable.QUOTE_TARGET_MISSING_ID }?.clampToValidBackupRange(),
|
targetSentTimestamp = this.quoteTargetSentTimestamp.takeIf { !this.quoteMissing && it != MessageTable.QUOTE_TARGET_MISSING_ID }?.clampToValidBackupRange(),
|
||||||
authorId = this.quoteAuthor,
|
authorId = this.quoteAuthor,
|
||||||
text = this.quoteBody?.let { body ->
|
text = body,
|
||||||
Text(
|
attachments = attachments,
|
||||||
body = body,
|
|
||||||
bodyRanges = bodyRanges
|
|
||||||
)
|
|
||||||
},
|
|
||||||
attachments = if (remoteType == Quote.Type.VIEW_ONCE) {
|
|
||||||
emptyList()
|
|
||||||
} else {
|
|
||||||
attachments?.toRemoteQuoteAttachments(mediaArchiveEnabled) ?: emptyList()
|
|
||||||
},
|
|
||||||
type = remoteType
|
type = remoteType
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class GroupArchiveExporter(private val selfAci: ServiceId.ACI, private val curso
|
|||||||
group = ArchiveGroup(
|
group = ArchiveGroup(
|
||||||
masterKey = cursor.requireNonNullBlob(GroupTable.V2_MASTER_KEY).toByteString(),
|
masterKey = cursor.requireNonNullBlob(GroupTable.V2_MASTER_KEY).toByteString(),
|
||||||
whitelisted = cursor.requireBoolean(RecipientTable.PROFILE_SHARING),
|
whitelisted = cursor.requireBoolean(RecipientTable.PROFILE_SHARING),
|
||||||
|
blocked = cursor.requireBoolean(RecipientTable.BLOCKED),
|
||||||
hideStory = extras?.hideStory() ?: false,
|
hideStory = extras?.hideStory() ?: false,
|
||||||
storySendMode = showAsStoryState.toRemote(),
|
storySendMode = showAsStoryState.toRemote(),
|
||||||
snapshot = decryptedGroup.toRemote(isActive, selfAci)
|
snapshot = decryptedGroup.toRemote(isActive, selfAci)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.importer
|
|||||||
|
|
||||||
import android.content.ContentValues
|
import android.content.ContentValues
|
||||||
import org.signal.core.util.Base64
|
import org.signal.core.util.Base64
|
||||||
|
import org.signal.core.util.toInt
|
||||||
import org.signal.libsignal.zkgroup.groups.GroupMasterKey
|
import org.signal.libsignal.zkgroup.groups.GroupMasterKey
|
||||||
import org.signal.libsignal.zkgroup.groups.GroupSecretParams
|
import org.signal.libsignal.zkgroup.groups.GroupSecretParams
|
||||||
import org.signal.storageservice.protos.groups.AccessControl
|
import org.signal.storageservice.protos.groups.AccessControl
|
||||||
@@ -51,7 +52,8 @@ object GroupArchiveImporter {
|
|||||||
val values = ContentValues().apply {
|
val values = ContentValues().apply {
|
||||||
put(RecipientTable.GROUP_ID, groupId.toString())
|
put(RecipientTable.GROUP_ID, groupId.toString())
|
||||||
put(RecipientTable.AVATAR_COLOR, AvatarColorHash.forGroupId(groupId).serialize())
|
put(RecipientTable.AVATAR_COLOR, AvatarColorHash.forGroupId(groupId).serialize())
|
||||||
put(RecipientTable.PROFILE_SHARING, group.whitelisted)
|
put(RecipientTable.PROFILE_SHARING, group.whitelisted.toInt())
|
||||||
|
put(RecipientTable.BLOCKED, group.blocked.toInt())
|
||||||
put(RecipientTable.TYPE, RecipientTable.RecipientType.GV2.id)
|
put(RecipientTable.TYPE, RecipientTable.RecipientType.GV2.id)
|
||||||
put(RecipientTable.STORAGE_SERVICE_ID, Base64.encodeWithPadding(StorageSyncHelper.generateKey()))
|
put(RecipientTable.STORAGE_SERVICE_ID, Base64.encodeWithPadding(StorageSyncHelper.generateKey()))
|
||||||
if (group.hideStory) {
|
if (group.hideStory) {
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ message BackupInfo {
|
|||||||
// For example, Chats may all be together at the beginning,
|
// For example, Chats may all be together at the beginning,
|
||||||
// or may each immediately precede its first ChatItem.
|
// or may each immediately precede its first ChatItem.
|
||||||
message Frame {
|
message Frame {
|
||||||
|
// If unset, importers should skip this frame without throwing an error.
|
||||||
oneof item {
|
oneof item {
|
||||||
AccountData account = 1;
|
AccountData account = 1;
|
||||||
Recipient recipient = 2;
|
Recipient recipient = 2;
|
||||||
@@ -44,13 +45,13 @@ message Frame {
|
|||||||
|
|
||||||
message AccountData {
|
message AccountData {
|
||||||
enum PhoneNumberSharingMode {
|
enum PhoneNumberSharingMode {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Nobody"
|
||||||
EVERYBODY = 1;
|
EVERYBODY = 1;
|
||||||
NOBODY = 2;
|
NOBODY = 2;
|
||||||
}
|
}
|
||||||
message UsernameLink {
|
message UsernameLink {
|
||||||
enum Color {
|
enum Color {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Blue"
|
||||||
BLUE = 1;
|
BLUE = 1;
|
||||||
WHITE = 2;
|
WHITE = 2;
|
||||||
GREY = 3;
|
GREY = 3;
|
||||||
@@ -97,6 +98,7 @@ message AccountData {
|
|||||||
message IAPSubscriberData {
|
message IAPSubscriberData {
|
||||||
bytes subscriberId = 1;
|
bytes subscriberId = 1;
|
||||||
|
|
||||||
|
// If unset, importers should ignore the subscriber data without throwing an error.
|
||||||
oneof iapSubscriptionId {
|
oneof iapSubscriptionId {
|
||||||
// Identifies an Android Play Store IAP subscription.
|
// Identifies an Android Play Store IAP subscription.
|
||||||
string purchaseToken = 2;
|
string purchaseToken = 2;
|
||||||
@@ -119,6 +121,7 @@ message AccountData {
|
|||||||
|
|
||||||
message Recipient {
|
message Recipient {
|
||||||
uint64 id = 1; // generated id for reference only within this file
|
uint64 id = 1; // generated id for reference only within this file
|
||||||
|
// If unset, importers should skip this frame without throwing an error.
|
||||||
oneof destination {
|
oneof destination {
|
||||||
Contact contact = 2;
|
Contact contact = 2;
|
||||||
Group group = 3;
|
Group group = 3;
|
||||||
@@ -131,9 +134,9 @@ message Recipient {
|
|||||||
|
|
||||||
message Contact {
|
message Contact {
|
||||||
enum IdentityState {
|
enum IdentityState {
|
||||||
DEFAULT = 0;
|
DEFAULT = 0; // A valid value -- indicates unset by the user
|
||||||
VERIFIED = 1;
|
VERIFIED = 1;
|
||||||
UNVERIFIED = 2;
|
UNVERIFIED = 2; // Was once verified and is now unverified
|
||||||
}
|
}
|
||||||
|
|
||||||
message Registered {}
|
message Registered {}
|
||||||
@@ -142,7 +145,7 @@ message Contact {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum Visibility {
|
enum Visibility {
|
||||||
VISIBLE = 0;
|
VISIBLE = 0; // A valid value -- the contact is not hidden
|
||||||
HIDDEN = 1;
|
HIDDEN = 1;
|
||||||
HIDDEN_MESSAGE_REQUEST = 2;
|
HIDDEN_MESSAGE_REQUEST = 2;
|
||||||
}
|
}
|
||||||
@@ -159,6 +162,7 @@ message Contact {
|
|||||||
bool blocked = 5;
|
bool blocked = 5;
|
||||||
Visibility visibility = 6;
|
Visibility visibility = 6;
|
||||||
|
|
||||||
|
// If unset, consider the user to be registered
|
||||||
oneof registration {
|
oneof registration {
|
||||||
Registered registered = 7;
|
Registered registered = 7;
|
||||||
NotRegistered notRegistered = 8;
|
NotRegistered notRegistered = 8;
|
||||||
@@ -177,7 +181,7 @@ message Contact {
|
|||||||
|
|
||||||
message Group {
|
message Group {
|
||||||
enum StorySendMode {
|
enum StorySendMode {
|
||||||
DEFAULT = 0;
|
DEFAULT = 0; // A valid value -- indicates unset by the user
|
||||||
DISABLED = 1;
|
DISABLED = 1;
|
||||||
ENABLED = 2;
|
ENABLED = 2;
|
||||||
}
|
}
|
||||||
@@ -187,6 +191,7 @@ message Group {
|
|||||||
bool hideStory = 3;
|
bool hideStory = 3;
|
||||||
StorySendMode storySendMode = 4;
|
StorySendMode storySendMode = 4;
|
||||||
GroupSnapshot snapshot = 5;
|
GroupSnapshot snapshot = 5;
|
||||||
|
bool blocked = 6;
|
||||||
|
|
||||||
// These are simply plaintext copies of the groups proto from Groups.proto.
|
// These are simply plaintext copies of the groups proto from Groups.proto.
|
||||||
// They should be kept completely in-sync with Groups.proto.
|
// They should be kept completely in-sync with Groups.proto.
|
||||||
@@ -210,6 +215,7 @@ message Group {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message GroupAttributeBlob {
|
message GroupAttributeBlob {
|
||||||
|
// If unset, consider the field it represents to not be present
|
||||||
oneof content {
|
oneof content {
|
||||||
string title = 1;
|
string title = 1;
|
||||||
bytes avatar = 2;
|
bytes avatar = 2;
|
||||||
@@ -220,7 +226,7 @@ message Group {
|
|||||||
|
|
||||||
message Member {
|
message Member {
|
||||||
enum Role {
|
enum Role {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Intepret as "Default"
|
||||||
DEFAULT = 1;
|
DEFAULT = 1;
|
||||||
ADMINISTRATOR = 2;
|
ADMINISTRATOR = 2;
|
||||||
}
|
}
|
||||||
@@ -252,7 +258,7 @@ message Group {
|
|||||||
|
|
||||||
message AccessControl {
|
message AccessControl {
|
||||||
enum AccessRequired {
|
enum AccessRequired {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Intepret as "Unsatisfiable"
|
||||||
ANY = 1;
|
ANY = 1;
|
||||||
MEMBER = 2;
|
MEMBER = 2;
|
||||||
ADMINISTRATOR = 3;
|
ADMINISTRATOR = 3;
|
||||||
@@ -292,7 +298,7 @@ message Chat {
|
|||||||
*/
|
*/
|
||||||
message CallLink {
|
message CallLink {
|
||||||
enum Restrictions {
|
enum Restrictions {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Admin Approval"
|
||||||
NONE = 1;
|
NONE = 1;
|
||||||
ADMIN_APPROVAL = 2;
|
ADMIN_APPROVAL = 2;
|
||||||
}
|
}
|
||||||
@@ -306,7 +312,7 @@ message CallLink {
|
|||||||
|
|
||||||
message AdHocCall {
|
message AdHocCall {
|
||||||
enum State {
|
enum State {
|
||||||
UNKNOWN_STATE = 0;
|
UNKNOWN_STATE = 0; // Interpret as "Generic"
|
||||||
GENERIC = 1;
|
GENERIC = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,6 +328,7 @@ message DistributionListItem {
|
|||||||
// by an all-0 UUID (00000000-0000-0000-0000-000000000000).
|
// by an all-0 UUID (00000000-0000-0000-0000-000000000000).
|
||||||
bytes distributionId = 1; // distribution list ids are uuids
|
bytes distributionId = 1; // distribution list ids are uuids
|
||||||
|
|
||||||
|
// If unset, importers should skip the item entirely without showing an error.
|
||||||
oneof item {
|
oneof item {
|
||||||
uint64 deletionTimestamp = 2;
|
uint64 deletionTimestamp = 2;
|
||||||
DistributionList distributionList = 3;
|
DistributionList distributionList = 3;
|
||||||
@@ -330,7 +337,7 @@ message DistributionListItem {
|
|||||||
|
|
||||||
message DistributionList {
|
message DistributionList {
|
||||||
enum PrivacyMode {
|
enum PrivacyMode {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Only with"
|
||||||
ONLY_WITH = 1;
|
ONLY_WITH = 1;
|
||||||
ALL_EXCEPT = 2;
|
ALL_EXCEPT = 2;
|
||||||
ALL = 3;
|
ALL = 3;
|
||||||
@@ -365,12 +372,14 @@ message ChatItem {
|
|||||||
repeated ChatItem revisions = 6; // ordered from oldest to newest
|
repeated ChatItem revisions = 6; // ordered from oldest to newest
|
||||||
bool sms = 7;
|
bool sms = 7;
|
||||||
|
|
||||||
|
// If unset, importers should skip this item without throwing an error.
|
||||||
oneof directionalDetails {
|
oneof directionalDetails {
|
||||||
IncomingMessageDetails incoming = 8;
|
IncomingMessageDetails incoming = 8;
|
||||||
OutgoingMessageDetails outgoing = 9;
|
OutgoingMessageDetails outgoing = 9;
|
||||||
DirectionlessMessageDetails directionless = 10;
|
DirectionlessMessageDetails directionless = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If unset, importers should skip this item without throwing an error.
|
||||||
oneof item {
|
oneof item {
|
||||||
StandardMessage standardMessage = 11;
|
StandardMessage standardMessage = 11;
|
||||||
ContactMessage contactMessage = 12;
|
ContactMessage contactMessage = 12;
|
||||||
@@ -419,6 +428,7 @@ message SendStatus {
|
|||||||
uint64 recipientId = 1;
|
uint64 recipientId = 1;
|
||||||
uint64 timestamp = 2; // the time the status was last updated -- if from a receipt, it should be the sentTime of the receipt
|
uint64 timestamp = 2; // the time the status was last updated -- if from a receipt, it should be the sentTime of the receipt
|
||||||
|
|
||||||
|
// If unset, importers should consider the status to be "pending"
|
||||||
oneof deliveryStatus {
|
oneof deliveryStatus {
|
||||||
Pending pending = 3;
|
Pending pending = 3;
|
||||||
Sent sent = 4;
|
Sent sent = 4;
|
||||||
@@ -455,6 +465,7 @@ message DirectStoryReplyMessage {
|
|||||||
FilePointer longText = 2;
|
FilePointer longText = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If unset, importers should ignore the message without throwing an error.
|
||||||
oneof reply {
|
oneof reply {
|
||||||
TextReply textReply = 1;
|
TextReply textReply = 1;
|
||||||
string emoji = 2;
|
string emoji = 2;
|
||||||
@@ -473,7 +484,7 @@ message PaymentNotification {
|
|||||||
|
|
||||||
message FailedTransaction { // Failed payments can't be synced from the ledger
|
message FailedTransaction { // Failed payments can't be synced from the ledger
|
||||||
enum FailureReason {
|
enum FailureReason {
|
||||||
GENERIC = 0;
|
GENERIC = 0; // A valid value -- reason unknown
|
||||||
NETWORK = 1;
|
NETWORK = 1;
|
||||||
INSUFFICIENT_FUNDS = 2;
|
INSUFFICIENT_FUNDS = 2;
|
||||||
}
|
}
|
||||||
@@ -482,7 +493,7 @@ message PaymentNotification {
|
|||||||
|
|
||||||
message Transaction {
|
message Transaction {
|
||||||
enum Status {
|
enum Status {
|
||||||
INITIAL = 0;
|
INITIAL = 0; // A valid value -- state unconfirmed
|
||||||
SUBMITTED = 1;
|
SUBMITTED = 1;
|
||||||
SUCCESSFUL = 2;
|
SUCCESSFUL = 2;
|
||||||
}
|
}
|
||||||
@@ -499,6 +510,7 @@ message PaymentNotification {
|
|||||||
optional bytes receipt = 7; // mobile coin blobs
|
optional bytes receipt = 7; // mobile coin blobs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If unset, importers should treat the transaction as successful with no metadata.
|
||||||
oneof payment {
|
oneof payment {
|
||||||
Transaction transaction = 1;
|
Transaction transaction = 1;
|
||||||
FailedTransaction failedTransaction = 2;
|
FailedTransaction failedTransaction = 2;
|
||||||
@@ -513,7 +525,7 @@ message PaymentNotification {
|
|||||||
|
|
||||||
message GiftBadge {
|
message GiftBadge {
|
||||||
enum State {
|
enum State {
|
||||||
UNOPENED = 0;
|
UNOPENED = 0; // A valid state
|
||||||
OPENED = 1;
|
OPENED = 1;
|
||||||
REDEEMED = 2;
|
REDEEMED = 2;
|
||||||
FAILED = 3;
|
FAILED = 3;
|
||||||
@@ -541,7 +553,7 @@ message ContactAttachment {
|
|||||||
|
|
||||||
message Phone {
|
message Phone {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Home"
|
||||||
HOME = 1;
|
HOME = 1;
|
||||||
MOBILE = 2;
|
MOBILE = 2;
|
||||||
WORK = 3;
|
WORK = 3;
|
||||||
@@ -555,7 +567,7 @@ message ContactAttachment {
|
|||||||
|
|
||||||
message Email {
|
message Email {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Intepret as "Home"
|
||||||
HOME = 1;
|
HOME = 1;
|
||||||
MOBILE = 2;
|
MOBILE = 2;
|
||||||
WORK = 3;
|
WORK = 3;
|
||||||
@@ -569,7 +581,7 @@ message ContactAttachment {
|
|||||||
|
|
||||||
message PostalAddress {
|
message PostalAddress {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Home"
|
||||||
HOME = 1;
|
HOME = 1;
|
||||||
WORK = 2;
|
WORK = 2;
|
||||||
CUSTOM = 3;
|
CUSTOM = 3;
|
||||||
@@ -629,7 +641,7 @@ message MessageAttachment {
|
|||||||
// but explicitly mutually exclusive. Note the different raw values
|
// but explicitly mutually exclusive. Note the different raw values
|
||||||
// (non-zero starting values are not supported in proto3.)
|
// (non-zero starting values are not supported in proto3.)
|
||||||
enum Flag {
|
enum Flag {
|
||||||
NONE = 0;
|
NONE = 0; // A valid value -- no flag applied
|
||||||
VOICE_MESSAGE = 1;
|
VOICE_MESSAGE = 1;
|
||||||
BORDERLESS = 2;
|
BORDERLESS = 2;
|
||||||
GIF = 3;
|
GIF = 3;
|
||||||
@@ -680,6 +692,7 @@ message FilePointer {
|
|||||||
message InvalidAttachmentLocator {
|
message InvalidAttachmentLocator {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If unset, importers should consider it to be an InvalidAttachmentLocator without throwing an error.
|
||||||
oneof locator {
|
oneof locator {
|
||||||
BackupLocator backupLocator = 1;
|
BackupLocator backupLocator = 1;
|
||||||
AttachmentLocator attachmentLocator = 2;
|
AttachmentLocator attachmentLocator = 2;
|
||||||
@@ -698,7 +711,7 @@ message FilePointer {
|
|||||||
|
|
||||||
message Quote {
|
message Quote {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Normal"
|
||||||
NORMAL = 1;
|
NORMAL = 1;
|
||||||
GIFT_BADGE = 2;
|
GIFT_BADGE = 2;
|
||||||
VIEW_ONCE = 3;
|
VIEW_ONCE = 3;
|
||||||
@@ -719,7 +732,7 @@ message Quote {
|
|||||||
|
|
||||||
message BodyRange {
|
message BodyRange {
|
||||||
enum Style {
|
enum Style {
|
||||||
NONE = 0;
|
NONE = 0; // Importers should ignore the body range without throwing an error.
|
||||||
BOLD = 1;
|
BOLD = 1;
|
||||||
ITALIC = 2;
|
ITALIC = 2;
|
||||||
SPOILER = 3;
|
SPOILER = 3;
|
||||||
@@ -727,9 +740,12 @@ message BodyRange {
|
|||||||
MONOSPACE = 5;
|
MONOSPACE = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
optional uint32 start = 1;
|
// 'start' and 'length' are measured in UTF-16 code units.
|
||||||
optional uint32 length = 2;
|
// They may refer to offsets in a longText attachment.
|
||||||
|
uint32 start = 1;
|
||||||
|
uint32 length = 2;
|
||||||
|
|
||||||
|
// If unset, importers should ignore the body range without throwing an error.
|
||||||
oneof associatedValue {
|
oneof associatedValue {
|
||||||
bytes mentionAci = 3;
|
bytes mentionAci = 3;
|
||||||
Style style = 4;
|
Style style = 4;
|
||||||
@@ -746,6 +762,7 @@ message Reaction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message ChatUpdateMessage {
|
message ChatUpdateMessage {
|
||||||
|
// If unset, importers should ignore the update message without throwing an error.
|
||||||
oneof update {
|
oneof update {
|
||||||
SimpleChatUpdate simpleUpdate = 1;
|
SimpleChatUpdate simpleUpdate = 1;
|
||||||
GroupChangeChatUpdate groupChange = 2;
|
GroupChangeChatUpdate groupChange = 2;
|
||||||
@@ -761,19 +778,19 @@ message ChatUpdateMessage {
|
|||||||
|
|
||||||
message IndividualCall {
|
message IndividualCall {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN_TYPE = 0;
|
UNKNOWN_TYPE = 0; // Interpret as "Audio call"
|
||||||
AUDIO_CALL = 1;
|
AUDIO_CALL = 1;
|
||||||
VIDEO_CALL = 2;
|
VIDEO_CALL = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Direction {
|
enum Direction {
|
||||||
UNKNOWN_DIRECTION = 0;
|
UNKNOWN_DIRECTION = 0; // Interpret as "Incoming"
|
||||||
INCOMING = 1;
|
INCOMING = 1;
|
||||||
OUTGOING = 2;
|
OUTGOING = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
UNKNOWN_STATE = 0;
|
UNKNOWN_STATE = 0; // Interpret as "Accepted"
|
||||||
ACCEPTED = 1;
|
ACCEPTED = 1;
|
||||||
NOT_ACCEPTED = 2;
|
NOT_ACCEPTED = 2;
|
||||||
// An incoming call that is no longer ongoing, which we neither accepted
|
// An incoming call that is no longer ongoing, which we neither accepted
|
||||||
@@ -794,7 +811,7 @@ message IndividualCall {
|
|||||||
|
|
||||||
message GroupCall {
|
message GroupCall {
|
||||||
enum State {
|
enum State {
|
||||||
UNKNOWN_STATE = 0;
|
UNKNOWN_STATE = 0; // Interpret as "Generic"
|
||||||
// A group call was started without ringing.
|
// A group call was started without ringing.
|
||||||
GENERIC = 1;
|
GENERIC = 1;
|
||||||
// We joined a group call that was started without ringing.
|
// We joined a group call that was started without ringing.
|
||||||
@@ -825,7 +842,7 @@ message GroupCall {
|
|||||||
|
|
||||||
message SimpleChatUpdate {
|
message SimpleChatUpdate {
|
||||||
enum Type {
|
enum Type {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Importers should skip the update without throwing an error.
|
||||||
JOINED_SIGNAL = 1;
|
JOINED_SIGNAL = 1;
|
||||||
IDENTITY_UPDATE = 2;
|
IDENTITY_UPDATE = 2;
|
||||||
IDENTITY_VERIFIED = 3;
|
IDENTITY_VERIFIED = 3;
|
||||||
@@ -859,6 +876,7 @@ message ProfileChangeChatUpdate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message LearnedProfileChatUpdate {
|
message LearnedProfileChatUpdate {
|
||||||
|
// If unset, importers should consider the previous name to be an empty string.
|
||||||
oneof previousName {
|
oneof previousName {
|
||||||
uint64 e164 = 1;
|
uint64 e164 = 1;
|
||||||
string username = 2;
|
string username = 2;
|
||||||
@@ -875,6 +893,7 @@ message SessionSwitchoverChatUpdate {
|
|||||||
|
|
||||||
message GroupChangeChatUpdate {
|
message GroupChangeChatUpdate {
|
||||||
message Update {
|
message Update {
|
||||||
|
// If unset, importers should consider it to be a GenericGroupUpdate with unset updaterAci
|
||||||
oneof update {
|
oneof update {
|
||||||
GenericGroupUpdate genericGroupUpdate = 1;
|
GenericGroupUpdate genericGroupUpdate = 1;
|
||||||
GroupCreationUpdate groupCreationUpdate = 2;
|
GroupCreationUpdate groupCreationUpdate = 2;
|
||||||
@@ -944,7 +963,7 @@ message GroupDescriptionUpdate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum GroupV2AccessLevel {
|
enum GroupV2AccessLevel {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Unsatisfiable"
|
||||||
ANY = 1;
|
ANY = 1;
|
||||||
MEMBER = 2;
|
MEMBER = 2;
|
||||||
ADMINISTRATOR = 3;
|
ADMINISTRATOR = 3;
|
||||||
@@ -1134,6 +1153,7 @@ message ChatStyle {
|
|||||||
message CustomChatColor {
|
message CustomChatColor {
|
||||||
uint64 id = 1;
|
uint64 id = 1;
|
||||||
|
|
||||||
|
// If unset, use the default chat color
|
||||||
oneof color {
|
oneof color {
|
||||||
fixed32 solid = 2; // 0xAARRGGBB
|
fixed32 solid = 2; // 0xAARRGGBB
|
||||||
Gradient gradient = 3;
|
Gradient gradient = 3;
|
||||||
@@ -1144,7 +1164,7 @@ message ChatStyle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum WallpaperPreset {
|
enum WallpaperPreset {
|
||||||
UNKNOWN_WALLPAPER_PRESET = 0;
|
UNKNOWN_WALLPAPER_PRESET = 0; // Interpret as the wallpaper being unset
|
||||||
SOLID_BLUSH = 1;
|
SOLID_BLUSH = 1;
|
||||||
SOLID_COPPER = 2;
|
SOLID_COPPER = 2;
|
||||||
SOLID_DUST = 3;
|
SOLID_DUST = 3;
|
||||||
@@ -1169,7 +1189,7 @@ message ChatStyle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enum BubbleColorPreset {
|
enum BubbleColorPreset {
|
||||||
UNKNOWN_BUBBLE_COLOR_PRESET = 0;
|
UNKNOWN_BUBBLE_COLOR_PRESET = 0; // Interpret as the user's default chat bubble color
|
||||||
SOLID_ULTRAMARINE = 1;
|
SOLID_ULTRAMARINE = 1;
|
||||||
SOLID_CRIMSON = 2;
|
SOLID_CRIMSON = 2;
|
||||||
SOLID_VERMILION = 3;
|
SOLID_VERMILION = 3;
|
||||||
@@ -1194,6 +1214,7 @@ message ChatStyle {
|
|||||||
GRADIENT_TANGERINE = 22;
|
GRADIENT_TANGERINE = 22;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If unset, importers should consider there to be no wallpaper.
|
||||||
oneof wallpaper {
|
oneof wallpaper {
|
||||||
WallpaperPreset wallpaperPreset = 1;
|
WallpaperPreset wallpaperPreset = 1;
|
||||||
// This `FilePointer` is expected not to contain a `fileName`, `width`,
|
// This `FilePointer` is expected not to contain a `fileName`, `width`,
|
||||||
@@ -1201,6 +1222,7 @@ message ChatStyle {
|
|||||||
FilePointer wallpaperPhoto = 2;
|
FilePointer wallpaperPhoto = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If unset, importers should consider it to be AutomaticBubbleColor
|
||||||
oneof bubbleColor {
|
oneof bubbleColor {
|
||||||
// Bubble setting is automatically determined based on the wallpaper setting,
|
// Bubble setting is automatically determined based on the wallpaper setting,
|
||||||
// or `SOLID_ULTRAMARINE` for `noWallpaper`
|
// or `SOLID_ULTRAMARINE` for `noWallpaper`
|
||||||
@@ -1216,7 +1238,7 @@ message ChatStyle {
|
|||||||
|
|
||||||
message NotificationProfile {
|
message NotificationProfile {
|
||||||
enum DayOfWeek {
|
enum DayOfWeek {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Monday"
|
||||||
MONDAY = 1;
|
MONDAY = 1;
|
||||||
TUESDAY = 2;
|
TUESDAY = 2;
|
||||||
WEDNESDAY = 3;
|
WEDNESDAY = 3;
|
||||||
@@ -1242,7 +1264,7 @@ message NotificationProfile {
|
|||||||
message ChatFolder {
|
message ChatFolder {
|
||||||
// Represents the default "All chats" folder record vs all other custom folders
|
// Represents the default "All chats" folder record vs all other custom folders
|
||||||
enum FolderType {
|
enum FolderType {
|
||||||
UNKNOWN = 0;
|
UNKNOWN = 0; // Interpret as "Custom"
|
||||||
ALL = 1;
|
ALL = 1;
|
||||||
CUSTOM = 2;
|
CUSTOM = 2;
|
||||||
}
|
}
|
||||||
@@ -1257,4 +1279,4 @@ message ChatFolder {
|
|||||||
FolderType folderType = 6;
|
FolderType folderType = 6;
|
||||||
repeated uint64 includedRecipientIds = 7; // generated recipient id of groups, contacts, and/or note to self
|
repeated uint64 includedRecipientIds = 7; // generated recipient id of groups, contacts, and/or note to self
|
||||||
repeated uint64 excludedRecipientIds = 8; // generated recipient id of groups, contacts, and/or note to self
|
repeated uint64 excludedRecipientIds = 8; // generated recipient id of groups, contacts, and/or note to self
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ androidx-window = "1.3.0"
|
|||||||
glide = "4.15.1"
|
glide = "4.15.1"
|
||||||
gradle = "8.7.3"
|
gradle = "8.7.3"
|
||||||
kotlin = "2.1.0"
|
kotlin = "2.1.0"
|
||||||
libsignal-client = "0.65.2"
|
libsignal-client = "0.65.4"
|
||||||
mp4parser = "1.9.39"
|
mp4parser = "1.9.39"
|
||||||
android-gradle-plugin = "8.7.2"
|
android-gradle-plugin = "8.7.2"
|
||||||
accompanist = "0.28.0"
|
accompanist = "0.28.0"
|
||||||
|
|||||||
@@ -6604,20 +6604,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
|
|||||||
<sha256 value="6eb4422e8a618b3b76cb2096a3619d251f9e27989dc68307a1e5414c3710f2d1" origin="Generated by Gradle"/>
|
<sha256 value="6eb4422e8a618b3b76cb2096a3619d251f9e27989dc68307a1e5414c3710f2d1" origin="Generated by Gradle"/>
|
||||||
</artifact>
|
</artifact>
|
||||||
</component>
|
</component>
|
||||||
<component group="org.signal" name="libsignal-android" version="0.65.2">
|
<component group="org.signal" name="libsignal-android" version="0.65.4">
|
||||||
<artifact name="libsignal-android-0.65.2.aar">
|
<artifact name="libsignal-android-0.65.4.aar">
|
||||||
<sha256 value="faab9438ba2e62324f76dfd2c24fbaabc1fed547dd3d6e6020ad417d8f9321f3" origin="Generated by Gradle"/>
|
<sha256 value="21e2d7f9477e6c790cf460d839daaa7d74fda43e1f33360efd89a52eee26b906" origin="Generated by Gradle"/>
|
||||||
</artifact>
|
</artifact>
|
||||||
<artifact name="libsignal-android-0.65.2.module">
|
<artifact name="libsignal-android-0.65.4.module">
|
||||||
<sha256 value="fb0c7ea259e7e6d3099b0e738cbd728be4af8cc284b5fb624bb11b4412384837" origin="Generated by Gradle"/>
|
<sha256 value="d86f7b3e763be0638e8d0048292834a720412a57c67eeb764ade339a8a66350d" origin="Generated by Gradle"/>
|
||||||
</artifact>
|
</artifact>
|
||||||
</component>
|
</component>
|
||||||
<component group="org.signal" name="libsignal-client" version="0.65.2">
|
<component group="org.signal" name="libsignal-client" version="0.65.4">
|
||||||
<artifact name="libsignal-client-0.65.2.jar">
|
<artifact name="libsignal-client-0.65.4.jar">
|
||||||
<sha256 value="ab3f8a2f8915bf14af9b219f7690026c33071a40da4a284213ba6cfc16538d72" origin="Generated by Gradle"/>
|
<sha256 value="4f57d871be39b000a9f5611feba60c305420c4c4a1ed1d224584d0d9c4325d0c" origin="Generated by Gradle"/>
|
||||||
</artifact>
|
</artifact>
|
||||||
<artifact name="libsignal-client-0.65.2.module">
|
<artifact name="libsignal-client-0.65.4.module">
|
||||||
<sha256 value="4b1ab575de696867241e1bbbee4224824f6c38aa835d422e591a62cdc98dd34c" origin="Generated by Gradle"/>
|
<sha256 value="45c7e668b5fa408d9e2c389631e72cd11741aeff375ef2c8f0e74752f6e687d2" origin="Generated by Gradle"/>
|
||||||
</artifact>
|
</artifact>
|
||||||
</component>
|
</component>
|
||||||
<component group="org.signal" name="ringrtc-android" version="2.49.3">
|
<component group="org.signal" name="ringrtc-android" version="2.49.3">
|
||||||
|
|||||||
Reference in New Issue
Block a user