+ if (syncMessage.getPniChangeNumber().isPresent()) {
+ final var pniChangeNumber = syncMessage.getPniChangeNumber().get();
+ logger.debug("Received PNI change number sync message, applying.");
+ if (pniChangeNumber.hasIdentityKeyPair()
+ && pniChangeNumber.hasRegistrationId()
+ && pniChangeNumber.hasSignedPreKey()
+ && !envelope.getUpdatedPni().isEmpty()) {
+ logger.debug("New PNI: {}", envelope.getUpdatedPni());
+ try {
+ final var updatedPni = PNI.parseOrThrow(envelope.getUpdatedPni());
+ context.getAccountHelper()
+ .setPni(updatedPni,
+ new IdentityKeyPair(pniChangeNumber.getIdentityKeyPair().toByteArray()),
+ new SignedPreKeyRecord(pniChangeNumber.getSignedPreKey().toByteArray()),
+ pniChangeNumber.getRegistrationId());
+ } catch (Exception e) {
+ logger.warn("Failed to handle change number message", e);
+ }
+ }
+ }