Merge branch 'master' into development

Daniel Gultsch created

Change summary

build.gradle                                                             |  2 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 15 
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java            |  2 
3 files changed, 13 insertions(+), 6 deletions(-)

Detailed changes

build.gradle 🔗

@@ -45,7 +45,7 @@ android {
 	defaultConfig {
 		minSdkVersion 14
 		targetSdkVersion 21
-		versionCode 69
+		versionCode 70
 		versionName "1.5.0-alpha"
 	}
 

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -483,9 +483,16 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 						long lastSent = account.getXmppConnection().getLastPingSent();
 						long pingInterval = "ui".equals(action) ? Config.PING_MIN_INTERVAL * 1000 : Config.PING_MAX_INTERVAL * 1000;
 						long msToNextPing = (Math.max(lastReceived,lastSent) + pingInterval) - SystemClock.elapsedRealtime();
-						if (lastSent > lastReceived && (lastSent +  Config.PING_TIMEOUT * 1000) < SystemClock.elapsedRealtime()) {
-							Log.d(Config.LOGTAG, account.getJid().toBareJid()+ ": ping timeout");
-							this.reconnectAccount(account, true);
+						long pingTimeoutIn = (lastSent + Config.PING_TIMEOUT * 1000) - SystemClock.elapsedRealtime();
+						if (lastSent > lastReceived) {
+							if (pingTimeoutIn < 0) {
+								long age = (SystemClock.elapsedRealtime() - account.getXmppConnection().getLastConnect()) / 1000;
+								Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": ping timeout. connection age was: "+age+"s");
+								this.reconnectAccount(account, true);
+							} else {
+								int secs = (int) (pingTimeoutIn / 1000);
+								this.scheduleWakeUpCall(secs,account.getUuid().hashCode());
+							}
 						} else if (msToNextPing <= 0) {
 							account.getXmppConnection().sendPing();
 							Log.d(Config.LOGTAG, account.getJid().toBareJid()+" send ping");
@@ -614,7 +621,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 	}
 
 	protected void scheduleWakeUpCall(int seconds, int requestCode) {
-		final long timeToWake = SystemClock.elapsedRealtime() + (seconds + 1) * 1000;
+		final long timeToWake = SystemClock.elapsedRealtime() + (seconds < 0 ? 1 : seconds + 1) * 1000;
 
 		Context context = getApplicationContext();
 		AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -921,7 +921,7 @@ public class XmppConnection implements Runnable {
 			++stanzasSent;
 		}
 		tagWriter.writeStanzaAsync(packet);
-		if (packet instanceof MessagePacket && packet.getId() != null && this.streamId != null) {
+		if (packet instanceof MessagePacket && packet.getId() != null && getFeatures().sm()) {
 			if (Config.EXTENDED_SM_LOGGING) {
 				Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": requesting ack for message stanza #" + stanzasSent);
 			}