Support nullable number in whoami response.

This commit is contained in:
Greyson Parrelli
2026-09-02 16:11:27 -03:00
committed by Alex Hart
parent 478b18aed8
commit 7a27b6e40f
3 changed files with 12 additions and 6 deletions
@@ -210,9 +210,9 @@ class ChangeNumberViewModel : ViewModel() {
return@launch
}
if (reattempt) {
Log.i(TAG, "Reattempting local change.\n Local state (e164=${SignalStore.account.e164}, pni=${SignalStore.account.pni})\n Remote state (e164=${whoAmI.number}, pni=$remotePni)")
repository.changeLocalNumber(whoAmI.number, remotePni)
if (reattempt && remoteE164 != null) {
Log.i(TAG, "Reattempting local change.\n Local state (e164=${SignalStore.account.e164}, pni=${SignalStore.account.pni})\n Remote state (e164=$remoteE164, pni=$remotePni)")
repository.changeLocalNumber(remoteE164, remotePni)
}
SignalStore.misc.unlockChangeNumber()
@@ -56,8 +56,14 @@ internal class FixChangeNumberErrorMigrationJob(
when (val result = SignalNetwork.account.whoAmI()) {
is NetworkResult.Success<WhoAmIResponse> -> {
val serverPni = result.result.pni?.let { ServiceId.PNI.parseOrNull(it) } ?: return
val serverE164 = result.result.number
if (result.result.number == SignalStore.account.e164 && serverPni == SignalStore.account.pni) {
if (serverE164 == null) {
Log.i(TAG, "Server reports no e164 for this account, skipping.")
return
}
if (serverE164 == SignalStore.account.e164 && serverPni == SignalStore.account.pni) {
Log.i(TAG, "No number or PNI mismatch detected.")
return
}
@@ -66,7 +72,7 @@ internal class FixChangeNumberErrorMigrationJob(
if (pendingPniIdentityMatchesServer(pendingChangeNumberMetadata, serverPni)) {
Log.w(TAG, "PNI identity key matches server. Fixing local number/PNI...")
ChangeNumberRepository().changeLocalNumber(result.result.number, serverPni)
ChangeNumberRepository().changeLocalNumber(serverE164, serverPni)
Log.w(TAG, "Done!")
} else {
Log.w(TAG, "Server PNI identity does not match pending metadata (or could not be verified); cannot safely reconcile. Enqueuing AccountConsistencyWorkerJob.")
@@ -9,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
data class WhoAmIResponse @JsonCreator constructor(
@JsonProperty("uuid") val aci: String? = null,
@JsonProperty val pni: String? = null,
@JsonProperty val number: String,
@JsonProperty val number: String? = null,
@JsonProperty val usernameHash: String? = null,
@JsonProperty val entitlements: Entitlements? = null
) {