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