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}