Change summary
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 5
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 20
2 files changed, 25 insertions(+)
Detailed changes
@@ -371,14 +371,19 @@ public class XmppConnectionService extends Service {
}
final boolean flexible = account.getXmppConnection().getFeatures().flexibleOfflineMessageRetrieval();
final boolean catchup = getMessageArchiveService().inCatchup(account);
+ final boolean trackOfflineMessageRetrieval;
if (flexible && catchup && account.getXmppConnection().isMamPreferenceAlways()) {
+ trackOfflineMessageRetrieval = false;
sendIqPacket(account, mIqGenerator.purgeOfflineMessages(), (acc, packet) -> {
if (packet.getType() == IqPacket.TYPE.RESULT) {
Log.d(Config.LOGTAG, acc.getJid().asBareJid() + ": successfully purged offline messages");
}
});
+ } else {
+ trackOfflineMessageRetrieval = true;
}
sendPresence(account);
+ account.getXmppConnection().trackOfflineMessageRetrieval(trackOfflineMessageRetrieval);
if (mPushManagementService.available(account)) {
mPushManagementService.registerPushTokenOnServer(account);
}
@@ -165,6 +165,7 @@ public class XmppConnection implements Runnable {
private boolean inSmacksSession = false;
private boolean quickStartInProgress = false;
private boolean isBound = false;
+ private boolean offlineMessagesRetrieved = false;
private Element streamFeatures;
private Element boundStreamFeatures;
private StreamId streamId = null;
@@ -2200,6 +2201,7 @@ public class XmppConnection implements Runnable {
}
private void finalizeBind() {
+ this.offlineMessagesRetrieved = false;
if (bindListener != null) {
bindListener.onBind(account);
}
@@ -2727,6 +2729,24 @@ public class XmppConnection implements Runnable {
return mXmppConnectionService.getIqGenerator();
}
+ public void trackOfflineMessageRetrieval(boolean trackOfflineMessageRetrieval) {
+ if (trackOfflineMessageRetrieval) {
+ final IqPacket iqPing = new IqPacket(IqPacket.TYPE.GET);
+ iqPing.addChild("ping", Namespace.PING);
+ this.sendIqPacket(
+ iqPing,
+ (a, response) -> {
+ Log.d(
+ Config.LOGTAG,
+ account.getJid().asBareJid()
+ + ": received ping response after sending initial presence");
+ XmppConnection.this.offlineMessagesRetrieved = true;
+ });
+ } else {
+ this.offlineMessagesRetrieved = true;
+ }
+ }
+
private class MyKeyManager implements X509KeyManager {
@Override
public String chooseClientAlias(String[] strings, Principal[] principals, Socket socket) {