BindProcessor.java

 1package im.conversations.android.xmpp.processor;
 2
 3import android.text.TextUtils;
 4import android.util.Log;
 5
 6import eu.siacs.conversations.Config;
 7import eu.siacs.conversations.entities.Account;
 8import eu.siacs.conversations.generator.IqGenerator;
 9import eu.siacs.conversations.services.XmppConnectionService;
10import eu.siacs.conversations.xmpp.XmppConnection;
11
12import im.conversations.android.xmpp.model.stanza.Iq;
13
14public class BindProcessor implements Runnable {
15
16
17    private final XmppConnectionService service;
18    private final Account account;
19
20    public BindProcessor(XmppConnectionService service, Account account) {
21        this.service = service;
22        this.account = account;
23    }
24
25    @Override
26    public void run() {
27        final XmppConnection connection = account.getXmppConnection();
28        service.cancelAvatarFetches(account);
29        final boolean loggedInSuccessfully = account.setOption(Account.OPTION_LOGGED_IN_SUCCESSFULLY, true);
30        final boolean gainedFeature = account.setOption(Account.OPTION_HTTP_UPLOAD_AVAILABLE, connection.getFeatures().httpUpload(0));
31        if (loggedInSuccessfully || gainedFeature) {
32            service.databaseBackend.updateAccount(account);
33        }
34
35        if (loggedInSuccessfully) {
36            if (!TextUtils.isEmpty(account.getDisplayName())) {
37                Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": display name wasn't empty on first log in. publishing");
38                service.publishDisplayName(account);
39            }
40        }
41
42        account.getRoster().clearPresences();
43        synchronized (account.inProgressConferenceJoins) {
44            account.inProgressConferenceJoins.clear();
45        }
46        synchronized (account.inProgressConferencePings) {
47            account.inProgressConferencePings.clear();
48        }
49        service.getJingleConnectionManager().notifyRebound(account);
50        service.getQuickConversationsService().considerSyncBackground(false);
51
52
53        connection.fetchRoster();
54
55        if (connection.getFeatures().bookmarks2()) {
56            service.fetchBookmarks2(account);
57        } else if (!connection.getFeatures().bookmarksConversion()) {
58            service.fetchBookmarks(account);
59        }
60
61        if (connection.getFeatures().mds()) {
62            service.fetchMessageDisplayedSynchronization(account);
63        } else {
64            Log.d(Config.LOGTAG,account.getJid()+": server has no support for mds");
65        }
66        final boolean flexible = connection.getFeatures().flexibleOfflineMessageRetrieval();
67        final boolean catchup = service.getMessageArchiveService().inCatchup(account);
68        final boolean trackOfflineMessageRetrieval;
69        if (flexible && catchup && connection.isMamPreferenceAlways()) {
70            trackOfflineMessageRetrieval = false;
71            connection.sendIqPacket(IqGenerator.purgeOfflineMessages(), (packet) -> {
72                if (packet.getType() == Iq.Type.RESULT) {
73                    Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": successfully purged offline messages");
74                }
75            });
76        } else {
77            trackOfflineMessageRetrieval = true;
78        }
79        service.sendPresence(account);
80        connection.trackOfflineMessageRetrieval(trackOfflineMessageRetrieval);
81        if (service.getPushManagementService().available(account)) {
82            service.getPushManagementService().registerPushTokenOnServer(account);
83        }
84        service.connectMultiModeConversations(account);
85        service.syncDirtyContacts(account);
86
87        service.getUnifiedPushBroker().renewUnifiedPushEndpointsOnBind(account);
88
89    }
90}