diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt index d02435ed97..0b79fd3b53 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt @@ -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() diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt b/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt index 94a2262d05..4661a2d0d3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/FixChangeNumberErrorMigrationJob.kt @@ -56,8 +56,14 @@ internal class FixChangeNumberErrorMigrationJob( when (val result = SignalNetwork.account.whoAmI()) { is NetworkResult.Success -> { 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.") diff --git a/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.kt b/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.kt index 31265cb30b..3baff9b1d6 100644 --- a/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.kt +++ b/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/WhoAmIResponse.kt @@ -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 ) {