diff --git a/app/src/androidTest/assets/backupTests/account_data_01.binproto b/app/src/androidTest/assets/backupTests/account_data_01.binproto index d377221e41..c35b0efd08 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_01.binproto and b/app/src/androidTest/assets/backupTests/account_data_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_02.binproto b/app/src/androidTest/assets/backupTests/account_data_02.binproto index cde12d0e3a..9e1ae760de 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_02.binproto and b/app/src/androidTest/assets/backupTests/account_data_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_04.binproto b/app/src/androidTest/assets/backupTests/account_data_04.binproto index 518cada9f1..8034235838 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_04.binproto and b/app/src/androidTest/assets/backupTests/account_data_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_05.binproto b/app/src/androidTest/assets/backupTests/account_data_05.binproto index a1049c24ca..137f515d70 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_05.binproto and b/app/src/androidTest/assets/backupTests/account_data_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_07.binproto b/app/src/androidTest/assets/backupTests/account_data_07.binproto index 8bf39cbd61..0f3b67bd91 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_07.binproto and b/app/src/androidTest/assets/backupTests/account_data_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_08.binproto b/app/src/androidTest/assets/backupTests/account_data_08.binproto index 5b8f37e5b6..f0a2957dd4 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_08.binproto and b/app/src/androidTest/assets/backupTests/account_data_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_10.binproto b/app/src/androidTest/assets/backupTests/account_data_10.binproto index e76a9f5858..540135ce96 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_10.binproto and b/app/src/androidTest/assets/backupTests/account_data_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_11.binproto b/app/src/androidTest/assets/backupTests/account_data_11.binproto index 7bafd52ee2..d7a5715d3e 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_11.binproto and b/app/src/androidTest/assets/backupTests/account_data_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_13.binproto b/app/src/androidTest/assets/backupTests/account_data_13.binproto index 4e7a218b5a..8c3fc91d8f 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_13.binproto and b/app/src/androidTest/assets/backupTests/account_data_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_14.binproto b/app/src/androidTest/assets/backupTests/account_data_14.binproto index cd6ec52737..d7fb074599 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_14.binproto and b/app/src/androidTest/assets/backupTests/account_data_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_16.binproto b/app/src/androidTest/assets/backupTests/account_data_16.binproto index f6fc4f80a6..3fa9092c38 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_16.binproto and b/app/src/androidTest/assets/backupTests/account_data_16.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_17.binproto b/app/src/androidTest/assets/backupTests/account_data_17.binproto index d90f3ba91c..db230fc8b0 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_17.binproto and b/app/src/androidTest/assets/backupTests/account_data_17.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_19.binproto b/app/src/androidTest/assets/backupTests/account_data_19.binproto index a25173823d..13ab22f66e 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_19.binproto and b/app/src/androidTest/assets/backupTests/account_data_19.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_20.binproto b/app/src/androidTest/assets/backupTests/account_data_20.binproto index 01ada5d0b2..f13087a105 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_20.binproto and b/app/src/androidTest/assets/backupTests/account_data_20.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_22.binproto b/app/src/androidTest/assets/backupTests/account_data_22.binproto index ccf975a2cc..11b1cec9df 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_22.binproto and b/app/src/androidTest/assets/backupTests/account_data_22.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_23.binproto b/app/src/androidTest/assets/backupTests/account_data_23.binproto index b2968801fd..7d3f46930b 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_23.binproto and b/app/src/androidTest/assets/backupTests/account_data_23.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_25.binproto b/app/src/androidTest/assets/backupTests/account_data_25.binproto index 34d548fbc3..f7cb99d37e 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_25.binproto and b/app/src/androidTest/assets/backupTests/account_data_25.binproto differ diff --git a/app/src/androidTest/assets/backupTests/account_data_26.binproto b/app/src/androidTest/assets/backupTests/account_data_26.binproto index d92dedf38d..e0b5046a0f 100644 Binary files a/app/src/androidTest/assets/backupTests/account_data_26.binproto and b/app/src/androidTest/assets/backupTests/account_data_26.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_simple_updates_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_simple_updates_09.binproto index 96d4fe6a5c..c0fb35cf9b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_simple_updates_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_simple_updates_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_simple_updates_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_simple_updates_10.binproto index c20351a0c4..7f1445badf 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_simple_updates_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_simple_updates_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_00.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_00.binproto index 63f8a80207..3eb1194207 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_00.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto index bec6c20578..5891f9ab1c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto index 0907cfca78..3d9f682c3a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto index aa6edcd0fa..c95e1666f5 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto index 35e7dcdfda..efbf24412d 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto index c82676d040..9e62fecec9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_05.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto index b1e20b5f96..3f5f30f87a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_06.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto index 25cc76c4c8..ff117dec5a 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_07.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto index e88b7d2f60..c9b062284b 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_08.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto index 66806f2c58..64b580971e 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_09.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto index 38801c695e..bd1e92988c 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_10.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto index 22abeb9a34..c2a4189738 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_11.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto index 66dafbbeaf..73c52a8eb9 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_12.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto index e5290a2876..e147e981b6 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_13.binproto differ diff --git a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto index 1668122cbb..f210e1ecdc 100644 Binary files a/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto and b/app/src/androidTest/assets/backupTests/chat_item_standard_message_with_link_preview_14.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto index d2c7a24431..861f5b165c 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_00.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto index fa38e5c5d6..efa08a6211 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto index a091cd7033..61ff259af2 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_02.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto index 34ee2c32e1..1ea3f09cb0 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto and b/app/src/androidTest/assets/backupTests/recipient_contacts_03.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_contacts_04.binproto b/app/src/androidTest/assets/backupTests/recipient_contacts_04.binproto new file mode 100644 index 0000000000..233f69b785 Binary files /dev/null and b/app/src/androidTest/assets/backupTests/recipient_contacts_04.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto index 7e9c00e1d0..c6c4dc0d7b 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_01.binproto differ diff --git a/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto b/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto index fefcdcd704..34eee1a7d2 100644 Binary files a/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto and b/app/src/androidTest/assets/backupTests/recipient_groups_02.binproto differ diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt index 24c8c815bf..005542660a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableArchiveExtensions.kt @@ -46,6 +46,9 @@ fun RecipientTable.getContactsForBackup(selfId: Long): ContactArchiveExporter { "${RecipientTable.TABLE_NAME}.${RecipientTable.PROFILE_GIVEN_NAME}", "${RecipientTable.TABLE_NAME}.${RecipientTable.PROFILE_FAMILY_NAME}", "${RecipientTable.TABLE_NAME}.${RecipientTable.PROFILE_JOINED_NAME}", + "${RecipientTable.TABLE_NAME}.${RecipientTable.NICKNAME_GIVEN_NAME}", + "${RecipientTable.TABLE_NAME}.${RecipientTable.NICKNAME_FAMILY_NAME}", + "${RecipientTable.TABLE_NAME}.${RecipientTable.NOTE}", "${RecipientTable.TABLE_NAME}.${RecipientTable.MUTE_UNTIL}", "${RecipientTable.TABLE_NAME}.${RecipientTable.CHAT_COLORS}", "${RecipientTable.TABLE_NAME}.${RecipientTable.CUSTOM_CHAT_COLORS_ID}", diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt index 6a1deb8cbc..276c5357ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt @@ -673,36 +673,34 @@ private fun BackupMessageRecord.toRemotePaymentNotificationUpdate(db: SignalData } } -private fun BackupMessageRecord.toRemoteSharedContacts(attachments: List?): List? { +private fun BackupMessageRecord.toRemoteSharedContact(attachments: List?): Contact? { if (this.sharedContacts.isNullOrEmpty()) { - return emptyList() + return null } val attachmentIdMap: Map = attachments?.associateBy { it.attachmentId } ?: emptyMap() return try { - val contacts: MutableList = LinkedList() val jsonContacts = JSONArray(sharedContacts) - - for (i in 0 until jsonContacts.length()) { - val contact: Contact = Contact.deserialize(jsonContacts.getJSONObject(i).toString()) - - if (contact.avatar != null && contact.avatar!!.attachmentId != null) { - val attachment = attachmentIdMap[contact.avatar!!.attachmentId] - - val updatedAvatar = Contact.Avatar( - contact.avatar!!.attachmentId, - attachment, - contact.avatar!!.isProfile - ) - - contacts += Contact(contact, updatedAvatar) - } else { - contacts += contact - } + if (jsonContacts.length() == 0) { + return null } - contacts + val contact: Contact = Contact.deserialize(jsonContacts.getJSONObject(0).toString()) + + return if (contact.avatar != null && contact.avatar!!.attachmentId != null) { + val attachment = attachmentIdMap[contact.avatar!!.attachmentId] + + val updatedAvatar = Contact.Avatar( + contact.avatar!!.attachmentId, + attachment, + contact.avatar!!.isProfile + ) + + Contact(contact, updatedAvatar) + } else { + contact + } } catch (e: JSONException) { Log.w(TAG, ExportSkips.failedToParseSharedContact(this.dateSent), e) null @@ -768,28 +766,28 @@ private fun BackupMessageRecord.toRemoteViewOnceMessage(mediaArchiveEnabled: Boo } private fun BackupMessageRecord.toRemoteContactMessage(mediaArchiveEnabled: Boolean, reactionRecords: List?, attachments: List?): ContactMessage? { - val sharedContacts = toRemoteSharedContacts(attachments) ?: return null + val sharedContact = toRemoteSharedContact(attachments) ?: return null - val contacts = sharedContacts.map { - ContactAttachment( - name = it.name.toRemote(), - avatar = (it.avatar?.attachment as? DatabaseAttachment)?.toRemoteMessageAttachment(mediaArchiveEnabled)?.pointer, - organization = it.organization ?: "", - number = it.phoneNumbers.map { phone -> + return ContactMessage( + contact = ContactAttachment( + name = sharedContact.name.toRemote(), + avatar = (sharedContact.avatar?.attachment as? DatabaseAttachment)?.toRemoteMessageAttachment(mediaArchiveEnabled)?.pointer, + organization = sharedContact.organization ?: "", + number = sharedContact.phoneNumbers.map { phone -> ContactAttachment.Phone( value_ = phone.number, type = phone.type.toRemote(), label = phone.label ?: "" ) }, - email = it.emails.map { email -> + email = sharedContact.emails.map { email -> ContactAttachment.Email( value_ = email.email, label = email.label ?: "", type = email.type.toRemote() ) }, - address = it.postalAddresses.map { address -> + address = sharedContact.postalAddresses.map { address -> ContactAttachment.PostalAddress( type = address.type.toRemote(), label = address.label ?: "", @@ -802,10 +800,7 @@ private fun BackupMessageRecord.toRemoteContactMessage(mediaArchiveEnabled: Bool country = address.country ?: "" ) } - ) - } - return ContactMessage( - contact = contacts, + ), reactions = reactionRecords.toRemote() ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt index a67acee845..e482d27460 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ContactArchiveExporter.kt @@ -76,6 +76,8 @@ class ContactArchiveExporter(private val cursor: Cursor, private val selfId: Lon .hideStory(RecipientTableCursorUtil.getExtras(cursor)?.hideStory() ?: false) .identityKey(cursor.requireString(IdentityTable.IDENTITY_KEY)?.let { Base64.decode(it).toByteString() }) .identityState(cursor.optionalInt(IdentityTable.VERIFIED).map { IdentityTable.VerifiedStatus.forState(it) }.orElse(IdentityTable.VerifiedStatus.DEFAULT).toRemote()) + .note(cursor.requireString(RecipientTable.NOTE) ?: "") + .nickname(cursor.readNickname()) val registeredState = RecipientTable.RegisteredState.fromId(cursor.requireInt(RecipientTable.REGISTERED)) if (registeredState == RecipientTable.RegisteredState.REGISTERED) { @@ -95,6 +97,20 @@ class ContactArchiveExporter(private val cursor: Cursor, private val selfId: Lon } } +private fun Cursor.readNickname(): Contact.Name? { + val given = this.requireString(RecipientTable.NICKNAME_GIVEN_NAME) + val family = this.requireString(RecipientTable.NICKNAME_FAMILY_NAME) + + if (given.isNullOrEmpty()) { + return null + } + + return Contact.Name( + given = given, + family = family ?: "" + ) +} + private fun Recipient.HiddenState.toRemote(): Contact.Visibility { return when (this) { Recipient.HiddenState.NOT_HIDDEN -> return Contact.Visibility.VISIBLE diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt index 3c430baa45..cbba360def 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ChatItemArchiveImporter.kt @@ -310,7 +310,7 @@ class ChatItemArchiveImporter( } if (this.contactMessage != null) { - val contacts = this.contactMessage.contact.map { backupContact -> + val contact = this.contactMessage.contact?.let { backupContact -> Contact( backupContact.name.toLocal(), backupContact.organization, @@ -345,18 +345,18 @@ class ChatItemArchiveImporter( ) } - val contactAttachments = contacts.mapNotNull { it.avatarAttachment } - if (contacts.isNotEmpty()) { + if (contact != null) { + val contactAttachment: Attachment? = contact.avatarAttachment followUp = { messageRowId -> - val attachmentMap = if (contactAttachments.isNotEmpty()) { - SignalDatabase.attachments.insertAttachmentsForMessage(messageRowId, contactAttachments, emptyList()) + val attachmentMap = if (contactAttachment != null) { + SignalDatabase.attachments.insertAttachmentsForMessage(messageRowId, listOf(contactAttachment), emptyList()) } else { emptyMap() } db.update( MessageTable.TABLE_NAME, contentValuesOf( - MessageTable.SHARED_CONTACTS to SignalDatabase.messages.getSerializedSharedContacts(attachmentMap, contacts) + MessageTable.SHARED_CONTACTS to SignalDatabase.messages.getSerializedSharedContacts(attachmentMap, listOf(contact)) ), "${MessageTable.ID} = ?", SqlUtil.buildArgs(messageRowId) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt index 0acffd8168..cac6c8cb27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/importer/ContactArchiveImporter.kt @@ -49,7 +49,10 @@ object ContactArchiveImporter { RecipientTable.PROFILE_KEY to if (profileKey == null) null else Base64.encodeWithPadding(profileKey), RecipientTable.PROFILE_SHARING to contact.profileSharing.toInt(), RecipientTable.USERNAME to contact.username, - RecipientTable.EXTRAS to contact.toLocalExtras().encode() + RecipientTable.EXTRAS to contact.toLocalExtras().encode(), + RecipientTable.NOTE to contact.note, + RecipientTable.NICKNAME_GIVEN_NAME to contact.nickname?.given, + RecipientTable.NICKNAME_FAMILY_NAME to contact.nickname?.family ) if (contact.registered != null) { diff --git a/app/src/main/protowire/Backup.proto b/app/src/main/protowire/Backup.proto index fbb5301963..48a6f248c0 100644 --- a/app/src/main/protowire/Backup.proto +++ b/app/src/main/protowire/Backup.proto @@ -147,6 +147,11 @@ message Contact { HIDDEN_MESSAGE_REQUEST = 2; } + message Name { + string given = 1; + string family = 2; + } + optional bytes aci = 1; // should be 16 bytes optional bytes pni = 2; // should be 16 bytes optional string username = 3; @@ -166,6 +171,8 @@ message Contact { bool hideStory = 13; optional bytes identityKey = 14; IdentityState identityState = 15; + Name nickname = 16; // absent iff both `given` and `family` are empty + string note = 17; } message Group { @@ -373,6 +380,7 @@ message ChatItem { PaymentNotification paymentNotification = 16; GiftBadge giftBadge = 17; ViewOnceMessage viewOnceMessage = 18; + DirectStoryReplyMessage directStoryReplyMessage = 19; // group story reply messages are not backed up } } @@ -437,10 +445,25 @@ message StandardMessage { } message ContactMessage { - repeated ContactAttachment contact = 1; + ContactAttachment contact = 1; repeated Reaction reactions = 2; } +message DirectStoryReplyMessage { + message TextReply { + Text text = 1; + FilePointer longText = 2; + } + + oneof reply { + TextReply textReply = 1; + string emoji = 2; + } + + repeated Reaction reactions = 3; + optional uint64 storySentTimestamp = 4; +} + message PaymentNotification { message TransactionDetails { message MobileCoinTxoIdentification { // Used to map to payments on the ledger @@ -1234,4 +1257,4 @@ message ChatFolder { FolderType folderType = 6; 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 -} \ No newline at end of file +}