config option to reset attempt counts when changing network (default=true)

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/Config.java                         |  1 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 26 
2 files changed, 19 insertions(+), 8 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/Config.java 🔗

@@ -29,6 +29,7 @@ public final class Config {
 	public static final boolean NO_PROXY_LOOKUP = false; //useful to debug ibb
 	public static final boolean DISABLE_STRING_PREP = false; // setting to true might increase startup performance
 	public static final boolean EXTENDED_SM_LOGGING = true; // log stanza counts
+	public static final boolean RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE = true; //setting to true might increase power consumption
 
 	public static final long MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;
 	public static final long MAM_MAX_CATCHUP =  MILLISECONDS_IN_DAY / 2;

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

@@ -424,6 +424,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 		final String action = intent == null ? null : intent.getAction();
 		if (action != null) {
 			switch (action) {
+				case ConnectivityManager.CONNECTIVITY_ACTION:
+					if (hasInternetConnection() && Config.RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE) {
+						resetAllAttemptCounts(true);
+					}
+					break;
 				case ACTION_MERGE_PHONE_CONTACTS:
 					if (mRestoredFromDatabase) {
 						PhoneHelper.loadPhoneContacts(getApplicationContext(),
@@ -442,14 +447,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 					toggleForegroundService();
 					break;
 				case ACTION_TRY_AGAIN:
-					for(Account account : accounts) {
-						if (account.hasErrorStatus()) {
-							final XmppConnection connection = account.getXmppConnection();
-							if (connection != null) {
-								connection.resetAttemptCount();
-							}
-						}
-					}
+					resetAllAttemptCounts(false);
 					break;
 				case ACTION_DISABLE_ACCOUNT:
 					try {
@@ -531,6 +529,18 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
 		return START_STICKY;
 	}
 
+	private void resetAllAttemptCounts(boolean reallyAll) {
+		Log.d(Config.LOGTAG,"resetting all attepmt counts");
+		for(Account account : accounts) {
+			if (account.hasErrorStatus() || reallyAll) {
+				final XmppConnection connection = account.getXmppConnection();
+				if (connection != null) {
+					connection.resetAttemptCount();
+				}
+			}
+		}
+	}
+
 	public boolean hasInternetConnection() {
 		ConnectivityManager cm = (ConnectivityManager) getApplicationContext()
 			.getSystemService(Context.CONNECTIVITY_SERVICE);