diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt index 8c24af39c6..4c13e3d3f4 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt @@ -788,6 +788,17 @@ class RecipientTableTest_getAndPossiblyMerge { expectChangeNumberEvent() } + test("merge, e164 follows pni+aci") { + given(E164_A, PNI_A, null) + given(null, null, ACI_A) + + process(null, PNI_A, ACI_A, pniVerified = true) + + expect(E164_A, PNI_A, ACI_A) + expectThreadMergeEvent(E164_A) + expectPniVerified() + } + test("local user, local e164 and aci provided, changeSelf=false, leave e164 alone") { given(E164_SELF, null, ACI_SELF) given(null, null, ACI_A) 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 a9cb71615c..80383c492c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt @@ -2944,10 +2944,10 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da primaryId = data.byAci, secondaryId = data.byPni ) - } else if (data.pniRecord.aci == null && data.pniRecord.e164 == data.e164) { + } else if (data.pniRecord.aci == null && (data.e164 == null || data.pniRecord.e164 == data.e164)) { // The PNI record also has the E164 on it with no ACI. We're going to be stealing all of it's fields, // so this is basically a merge with a little bit of extra prep. - breadCrumbs += "PniRecordHasMatchingE164AndNoAci" + breadCrumbs += "PniRecordHasNoAci" if (data.aciRecord.pni != null) { operations += PnpOperation.RemovePni(data.byAci) @@ -2972,10 +2972,10 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da secondaryId = data.byPni ) } else { - // The PNI record either has an ACI or a non-matching e164, meaning we need to steal what we need and leave the rest behind + // The PNI record has a different ACI, meaning we need to steal what we need and leave the rest behind breadCrumbs += if (data.pniRecord.aci != null && data.pniRecord.e164 != data.e164) { - "PniRecordHasAciAndNonMatchingE164" + "PniRecordHasAci" } else if (data.pniRecord.aci != null) { "PniRecordHasAci" } else {