Manager : removeLinkedDevices updates isMultiDevice and saves the account

Manager : addDevice, getLinkedDevices save the account

SignalAccount : save/load isMultiDevice
SignalAccount : save profileKey
SignalAccount : registrationLockPin doesn't automagically becomes the "null" string, and stays null if null
This commit is contained in:
Vincent Olivier 2018-11-20 17:47:10 -05:00 committed by AsamK
parent 7e897fa6d0
commit cf972e5b6c
2 changed files with 9 additions and 1 deletions

View file

@ -248,11 +248,15 @@ public class Manager implements Signal {
public List<DeviceInfo> getLinkedDevices() throws IOException {
List<DeviceInfo> devices = accountManager.getDevices();
account.setMultiDevice(devices.size() > 1);
account.save();
return devices;
}
public void removeLinkedDevices(int deviceId) throws IOException {
accountManager.removeDevice(deviceId);
List<DeviceInfo> devices = accountManager.getDevices();
account.setMultiDevice(devices.size() > 1);
account.save();
}
public void addDeviceLink(URI linkUri) throws IOException, InvalidKeyException {
@ -267,6 +271,7 @@ public class Manager implements Signal {
accountManager.addDevice(deviceIdentifier, deviceKey, identityKeyPair, Optional.of(account.getProfileKey()), verificationCode);
account.setMultiDevice(true);
account.save();
}
private List<PreKeyRecord> generatePreKeys() {

View file

@ -135,10 +135,11 @@ public class SignalAccount {
if (node != null) {
deviceId = node.asInt();
}
if (rootNode.has("isMultiDevice")) isMultiDevice = Util.getNotNullNode(rootNode, "isMultiDevice").asBoolean();
username = Util.getNotNullNode(rootNode, "username").asText();
password = Util.getNotNullNode(rootNode, "password").asText();
JsonNode pinNode = rootNode.get("registrationLockPin");
registrationLockPin = pinNode == null ? null : pinNode.asText();
registrationLockPin = pinNode == null || pinNode.isNull() ? null : pinNode.asText();
if (rootNode.has("signalingKey")) {
signalingKey = Util.getNotNullNode(rootNode, "signalingKey").asText();
}
@ -189,11 +190,13 @@ public class SignalAccount {
ObjectNode rootNode = jsonProcessor.createObjectNode();
rootNode.put("username", username)
.put("deviceId", deviceId)
.put("isMultiDevice", isMultiDevice)
.put("password", password)
.put("registrationLockPin", registrationLockPin)
.put("signalingKey", signalingKey)
.put("preKeyIdOffset", preKeyIdOffset)
.put("nextSignedPreKeyId", nextSignedPreKeyId)
.put("profileKey", Base64.encodeBytes(profileKey))
.put("registered", registered)
.putPOJO("axolotlStore", signalProtocolStore)
.putPOJO("groupStore", groupStore)