close tcp connection after 30s of inactivity when in push_mode
This commit is contained in:
		
							parent
							
								
									856029a611
								
							
						
					
					
						commit
						9bfdbc708e
					
				| @ -60,7 +60,10 @@ public final class Config { | ||||
| 	public static final int CONNECT_DISCO_TIMEOUT = 20; | ||||
| 	public static final int MINI_GRACE_PERIOD = 750; | ||||
| 
 | ||||
| 	public static final boolean CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND = false; | ||||
| 	public static final boolean PUSH_MODE = false; 	//closes the tcp connection when going to background | ||||
| 													//and after PING_MIN_INTERVAL of inactivity | ||||
| 													//very experimental. only enable this if you want | ||||
| 													//to around with GCM push | ||||
| 
 | ||||
| 	public static final int AVATAR_SIZE = 192; | ||||
| 	public static final Bitmap.CompressFormat AVATAR_FORMAT = Bitmap.CompressFormat.WEBP; | ||||
|  | ||||
| @ -3,7 +3,9 @@ package eu.siacs.conversations.services; | ||||
| import android.content.BroadcastReceiver; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.net.ConnectivityManager; | ||||
| 
 | ||||
| import eu.siacs.conversations.Config; | ||||
| import eu.siacs.conversations.persistance.DatabaseBackend; | ||||
| 
 | ||||
| public class EventReceiver extends BroadcastReceiver { | ||||
| @ -16,8 +18,11 @@ public class EventReceiver extends BroadcastReceiver { | ||||
| 		} else { | ||||
| 			mIntentForService.setAction("other"); | ||||
| 		} | ||||
| 		if (intent.getAction().equals("ui") | ||||
| 				|| DatabaseBackend.getInstance(context).hasEnabledAccounts()) { | ||||
| 		final String action = intent.getAction(); | ||||
| 		if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION) && Config.PUSH_MODE) { | ||||
| 			return; | ||||
| 		} | ||||
| 		if (action.equals("ui") || DatabaseBackend.getInstance(context).hasEnabledAccounts()) { | ||||
| 			context.startService(mIntentForService); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -323,14 +323,15 @@ public class XmppConnectionService extends Service { | ||||
| 					joinMuc(conversation); | ||||
| 				} | ||||
| 				account.pendingConferenceJoins.clear(); | ||||
| 				scheduleWakeUpCall(Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); | ||||
| 				scheduleWakeUpCall(Config.PUSH_MODE ? Config.PING_MIN_INTERVAL : Config.PING_MAX_INTERVAL, account.getUuid().hashCode()); | ||||
| 			} else if (account.getStatus() == Account.State.OFFLINE) { | ||||
| 				resetSendingToWaiting(account); | ||||
| 				final boolean disabled = account.isOptionSet(Account.OPTION_DISABLED); | ||||
| 				final boolean pushMode = Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND | ||||
| 				final boolean listeners = checkListeners(); | ||||
| 				final boolean pushMode = Config.PUSH_MODE | ||||
| 						&& mPushManagementService.available(account) | ||||
| 						&& checkListeners(); | ||||
| 				Log.d(Config.LOGTAG,account.getJid().toBareJid()+": push mode "+Boolean.toString(pushMode)); | ||||
| 						&& listeners; | ||||
| 				Log.d(Config.LOGTAG,account.getJid().toBareJid()+": push mode="+Boolean.toString(pushMode)+" listeners="+Boolean.toString(listeners)); | ||||
| 				if (!disabled && !pushMode) { | ||||
| 					int timeToReconnect = mRandom.nextInt(20) + 10; | ||||
| 					scheduleWakeUpCall(timeToReconnect, account.getUuid().hashCode()); | ||||
| @ -582,7 +583,7 @@ public class XmppConnectionService extends Service { | ||||
| 					break; | ||||
| 				case ACTION_IDLE_PING: | ||||
| 					if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M | ||||
| 							&& !Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND) { | ||||
| 							&& !Config.PUSH_MODE) { | ||||
| 						scheduleNextIdlePing(); | ||||
| 					} | ||||
| 					break; | ||||
| @ -613,7 +614,7 @@ public class XmppConnectionService extends Service { | ||||
| 					if (account.getStatus() == Account.State.ONLINE) { | ||||
| 						long lastReceived = account.getXmppConnection().getLastPacketReceived(); | ||||
| 						long lastSent = account.getXmppConnection().getLastPingSent(); | ||||
| 						long pingInterval = "ui".equals(action) ? Config.PING_MIN_INTERVAL * 1000 : Config.PING_MAX_INTERVAL * 1000; | ||||
| 						long pingInterval = (Config.PUSH_MODE || "ui".equals(action)) ? Config.PING_MIN_INTERVAL * 1000 : Config.PING_MAX_INTERVAL * 1000; | ||||
| 						long msToNextPing = (Math.max(lastReceived, lastSent) + pingInterval) - SystemClock.elapsedRealtime(); | ||||
| 						long pingTimeoutIn = (lastSent + Config.PING_TIMEOUT * 1000) - SystemClock.elapsedRealtime(); | ||||
| 						if (lastSent > lastReceived) { | ||||
| @ -661,10 +662,18 @@ public class XmppConnectionService extends Service { | ||||
| 			} | ||||
| 		} | ||||
| 		if (pingNow) { | ||||
| 			final boolean listeners = checkListeners(); | ||||
| 			for (Account account : pingCandidates) { | ||||
| 				account.getXmppConnection().sendPing(); | ||||
| 				Log.d(Config.LOGTAG, account.getJid().toBareJid() + " send ping (action="+action+")"); | ||||
| 				this.scheduleWakeUpCall(Config.PING_TIMEOUT, account.getUuid().hashCode()); | ||||
| 				if (listeners | ||||
| 						&& Config.PUSH_MODE | ||||
| 						&& mPushManagementService.available(account)) { | ||||
| 					account.getXmppConnection().waitForPush(); | ||||
| 					cancelWakeUpCall(account.getUuid().hashCode()); | ||||
| 				} else { | ||||
| 					account.getXmppConnection().sendPing(); | ||||
| 					Log.d(Config.LOGTAG, account.getJid().toBareJid() + " send ping (action=" + action + ",listeners="+Boolean.toString(listeners)+")"); | ||||
| 					scheduleWakeUpCall(Config.PING_TIMEOUT, account.getUuid().hashCode()); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (wakeLock.isHeld()) { | ||||
| @ -801,7 +810,7 @@ public class XmppConnectionService extends Service { | ||||
| 		updateUnreadCountBadge(); | ||||
| 		toggleScreenEventReceiver(); | ||||
| 		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M | ||||
| 				&& !Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND) { | ||||
| 				&& !Config.PUSH_MODE) { | ||||
| 			scheduleNextIdlePing(); | ||||
| 		} | ||||
| 	} | ||||
| @ -1874,7 +1883,7 @@ public class XmppConnectionService extends Service { | ||||
| 					if (connection.getFeatures().csi()) { | ||||
| 						connection.sendInactive(); | ||||
| 					} | ||||
| 					if (Config.CLOSE_TCP_WHEN_SWITCHING_TO_BACKGROUND && mPushManagementService.available(account)) { | ||||
| 					if (Config.PUSH_MODE && mPushManagementService.available(account)) { | ||||
| 						connection.waitForPush(); | ||||
| 						cancelWakeUpCall(account.getUuid().hashCode()); | ||||
| 					} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch