From fcdcb9fd33497f93d37973705bebf121b7b75a6f Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Mon, 1 Apr 2024 19:06:08 -0400 Subject: [PATCH] Fix linked device nickname change not syncing bug. --- .../securesms/database/RecipientTable.kt | 5 +++ .../storage/ContactRecordProcessorTest.kt | 32 +++++++++++++++++++ 2 files changed, 37 insertions(+) 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 948f4e7b20..85689b964d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt @@ -4022,6 +4022,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da val profileName = ProfileName.fromParts(contact.profileGivenName.orElse(null), contact.profileFamilyName.orElse(null)) val systemName = ProfileName.fromParts(contact.systemGivenName.orElse(null), contact.systemFamilyName.orElse(null)) val username = contact.username.orElse(null) + val nickname = ProfileName.fromParts(contact.nicknameGivenName.orNull(), contact.nicknameFamilyName.orNull()) put(ACI_COLUMN, contact.aci.orElse(null)?.toString()) put(PNI_COLUMN, contact.pni.orElse(null)?.toString()) @@ -4041,6 +4042,10 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da put(STORAGE_SERVICE_ID, Base64.encodeWithPadding(contact.id.raw)) put(HIDDEN, contact.isHidden) put(PNI_SIGNATURE_VERIFIED, contact.isPniSignatureVerified.toInt()) + put(NICKNAME_GIVEN_NAME, nickname.givenName.nullIfBlank()) + put(NICKNAME_FAMILY_NAME, nickname.familyName.nullIfBlank()) + put(NICKNAME_JOINED_NAME, nickname.toString().nullIfBlank()) + put(NOTE, contact.note.orNull().nullIfBlank()) if (contact.hasUnknownFields()) { put(STORAGE_SERVICE_PROTO, Base64.encodeWithPadding(Objects.requireNonNull(contact.serializeUnknownFields()))) diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt index 88db63848a..a2a9cb4cdb 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt @@ -374,6 +374,38 @@ class ContactRecordProcessorTest { assertEquals(remote.pni.get(), result.pni.get()) } + @Test + fun `merge, nickname change, useRemote`() { + // GIVEN + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) + + val local = buildRecord( + STORAGE_ID_A, + record = ContactRecord( + aci = ACI_A.toString(), + e164 = E164_A + ) + ) + + val remote = buildRecord( + STORAGE_ID_B, + record = ContactRecord( + aci = ACI_A.toString(), + e164 = E164_A, + nickname = ContactRecord.Name(given = "Ghost", family = "Spider"), + note = "Spidey Friend" + ) + ) + + // WHEN + val result = subject.merge(remote, local, TestKeyGenerator(STORAGE_ID_C)) + + // THEN + assertEquals("Ghost", result.nicknameGivenName.get()) + assertEquals("Spider", result.nicknameFamilyName.get()) + assertEquals("Spidey Friend", result.note.get()) + } + private fun buildRecord(id: StorageId = STORAGE_ID_A, record: ContactRecord): SignalContactRecord { return SignalContactRecord(id, record) }