NickManager.java

 1package eu.siacs.conversations.xmpp.manager;
 2
 3import com.google.common.base.Strings;
 4import com.google.common.util.concurrent.ListenableFuture;
 5import eu.siacs.conversations.entities.Contact;
 6import eu.siacs.conversations.services.QuickConversationsService;
 7import eu.siacs.conversations.services.XmppConnectionService;
 8import eu.siacs.conversations.xml.Namespace;
 9import eu.siacs.conversations.xmpp.Jid;
10import eu.siacs.conversations.xmpp.XmppConnection;
11import im.conversations.android.xmpp.NodeConfiguration;
12import im.conversations.android.xmpp.model.nick.Nick;
13import im.conversations.android.xmpp.model.pubsub.Items;
14
15public class NickManager extends AbstractManager {
16
17    private final XmppConnectionService service;
18
19    public NickManager(final XmppConnectionService service, final XmppConnection connection) {
20        super(service, connection);
21        this.service = service;
22    }
23
24    public void handleItems(final Jid from, final Items items) {
25        final var item = items.getFirstItem(Nick.class);
26        final var nick = item == null ? null : item.getContent();
27        if (from == null || Strings.isNullOrEmpty(nick)) {
28            return;
29        }
30        setNick(from, nick);
31    }
32
33    private void setNick(final Jid user, final String nick) {
34        final var account = getAccount();
35        if (user.asBareJid().equals(account.getJid().asBareJid())) {
36            account.setDisplayName(nick);
37            if (QuickConversationsService.isQuicksy()) {
38                service.getAvatarService().clear(account);
39            }
40            service.checkMucRequiresRename();
41        } else {
42            final Contact contact = account.getRoster().getContact(user);
43            if (contact.setPresenceName(nick)) {
44                connection.getManager(RosterManager.class).writeToDatabaseAsync();
45                service.getAvatarService().clear(contact);
46            }
47        }
48        service.updateConversationUi();
49        service.updateAccountUi();
50    }
51
52    public ListenableFuture<Void> publish(final String name) {
53        if (Strings.isNullOrEmpty(name)) {
54            return getManager(PepManager.class).delete(Namespace.NICK);
55        } else {
56            return getManager(PepManager.class)
57                    .publishSingleton(new Nick(name), NodeConfiguration.PRESENCE);
58        }
59    }
60
61    public void handleDelete(final Jid from) {
62        this.setNick(from, null);
63    }
64}