diff --git a/src/main/java/eu/siacs/conversations/entities/Contact.java b/src/main/java/eu/siacs/conversations/entities/Contact.java index 7160be735851c17cff9aefcd1a048fcfef59a99a..eeab0e9993d3a228bf06c965dc134462ba38d69f 100644 --- a/src/main/java/eu/siacs/conversations/entities/Contact.java +++ b/src/main/java/eu/siacs/conversations/entities/Contact.java @@ -312,13 +312,16 @@ public class Contact implements ListItem, Blockable { } } - public void setPgpKeyId(long keyId) { + public boolean setPgpKeyId(long keyId) { + final long previousKeyId = getPgpKeyId(); synchronized (this.keys) { try { this.keys.put("pgp_keyid", keyId); + return previousKeyId != keyId; } catch (final JSONException ignored) { } } + return false; } public void setOption(int option) { diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java index 2e956b4a27f9bde6b36307ac62e5d35679e6dbf6..064015cdcc1423f89c00031ad0f778501e4f0161 100644 --- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java @@ -311,7 +311,9 @@ public class PresenceParser extends AbstractParser implements if (pgp != null && x != null) { Element status = packet.findChild("status"); String msg = status != null ? status.getContent() : ""; - contact.setPgpKeyId(pgp.fetchKeyId(account, msg, x.getContent())); + if (contact.setPgpKeyId(pgp.fetchKeyId(account, msg, x.getContent()))) { + mXmppConnectionService.syncRoster(account); + } } boolean online = sizeBefore < contact.getPresences().size(); mXmppConnectionService.onContactStatusChanged.onContactStatusChanged(contact, online);