diff --git a/core/src/main/java/org/jivesoftware/spark/ui/RosterDialog.java b/core/src/main/java/org/jivesoftware/spark/ui/RosterDialog.java index 931539407..df17c8302 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/RosterDialog.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/RosterDialog.java @@ -519,7 +519,7 @@ public class RosterDialog implements ActionListener { boolean isNewContact = userEntry == null || userEntry.getGroups().isEmpty(); if (isNewContact) { try { - roster.preApproveAndCreateEntry(jid, nickname, new String[]{group}); + addContactToRoster(jid, nickname, new String[]{group}, roster); return true; } catch (XMPPException | SmackException | InterruptedException e) { @@ -540,6 +540,17 @@ public class RosterDialog implements ActionListener { } } + private void addContactToRoster(BareJid contactJid, String displayName, String[] parentNames, Roster roster) throws SmackException, XMPPException.XMPPErrorException, InterruptedException { + if (roster.isSubscriptionPreApprovalSupported()) { + try { + roster.preApproveAndCreateEntry(contactJid, displayName, parentNames); + } catch (SmackException.FeatureNotSupportedException ignored) { + } + } else { + roster.createItemAndRequestSubscription(contactJid, displayName, parentNames); + } + } + public List getAccounts() { List list = new ArrayList<>(); for (Transport transport : TransportUtils.getTransports()) {