aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2019-02-04 19:17:39 +0100
committerChristian Schneppe <christian@pix-art.de>2019-02-04 19:17:39 +0100
commit303bc8519361f42d013f46b172dea44d06753413 (patch)
tree205cc0a0d00b397e5108dcd38eb162b8ceb089dd /src/main/java/de/pixart/messenger/services/XmppConnectionService.java
parentb1f6d2d926aafdff624ccd5e02fbcab029de96b5 (diff)
schedule another ping 30s after connectivity_change
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index ec3256b46..12d163203 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -177,6 +177,7 @@ public class XmppConnectionService extends Service {
public static final String ACTION_IDLE_PING = "idle_ping";
public static final String ACTION_FCM_TOKEN_REFRESH = "fcm_token_refresh";
public static final String ACTION_FCM_MESSAGE_RECEIVED = "fcm_message_received";
+ private static final String ACTION_POST_CONNECTIVITY_CHANGE = "de.pixart.messenger.POST_CONNECTIVITY_CHANGE";
public static final String FDroid = "org.fdroid.fdroid";
public static final String PlayStore = "com.android.vending";
private static final String SETTING_LAST_ACTIVITY_TS = "last_activity_timestamp";
@@ -594,8 +595,13 @@ public class XmppConnectionService extends Service {
final String uuid = intent.getStringExtra("uuid");
switch (action) {
case ConnectivityManager.CONNECTIVITY_ACTION:
- if (hasInternetConnection() && Config.RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE) {
- resetAllAttemptCounts(true, false);
+ if (hasInternetConnection()) {
+ if (Config.POST_CONNECTIVITY_CHANGE_PING_INTERVAL > 0) {
+ schedulePostConnectivityChange();
+ }
+ if (Config.RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE) {
+ resetAllAttemptCounts(true, false);
+ }
}
break;
case Intent.ACTION_SHUTDOWN:
@@ -708,7 +714,7 @@ public class XmppConnectionService extends Service {
}
synchronized (this) {
WakeLockHelper.acquire(wakeLock);
- boolean pingNow = ConnectivityManager.CONNECTIVITY_ACTION.equals(action);
+ boolean pingNow = ConnectivityManager.CONNECTIVITY_ACTION.equals(action) || (Config.POST_CONNECTIVITY_CHANGE_PING_INTERVAL > 0 && ACTION_POST_CONNECTIVITY_CHANGE.equals(action));
HashSet<Account> pingCandidates = new HashSet<>();
for (Account account : accounts) {
pingNow |= processAccountState(account,
@@ -1341,6 +1347,26 @@ public class XmppConnectionService extends Service {
}
}
+ private void schedulePostConnectivityChange() {
+ final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
+ if (alarmManager == null) {
+ return;
+ }
+ final long triggerAtMillis = SystemClock.elapsedRealtime() + (Config.POST_CONNECTIVITY_CHANGE_PING_INTERVAL * 1000);
+ final Intent intent = new Intent(this, EventReceiver.class);
+ intent.setAction(ACTION_POST_CONNECTIVITY_CHANGE);
+ try {
+ final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ alarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtMillis, pendingIntent);
+ } else {
+ alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtMillis, pendingIntent);
+ }
+ } catch (RuntimeException e) {
+ Log.e(Config.LOGTAG, "unable to schedule alarm for post connectivity change", e);
+ }
+ }
+
public void scheduleWakeUpCall(int seconds, int requestCode) {
final long timeToWake = SystemClock.elapsedRealtime() + (seconds < 0 ? 1 : seconds + 1) * 1000;
final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);