diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 4188e26885..398aa6dc06 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -32,7 +32,6 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.os.Handler; -import android.os.Looper; import android.os.PowerManager; import android.text.TextUtils; @@ -80,6 +79,7 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar private static final int PI_SEND = 1; private static final int RETRY_MAX = 3; + private static final int CONNECTIVITY_DELAY = 5000; // milliseconds @Override public void onCreate() { @@ -174,6 +174,8 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); cm.unregisterNetworkCallback(networkCallback); + handler.removeCallbacks(_checkConnectivity); + owner.stop(); handling.clear(); @@ -281,52 +283,47 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar }; private void checkConnectivity() { - if (Looper.myLooper() == Looper.getMainLooper()) - _checkConnectivity(); - else - handler.post(new Runnable() { - @Override - public void run() { - _checkConnectivity(); + handler.postDelayed(_checkConnectivity, CONNECTIVITY_DELAY); + } + + private Runnable _checkConnectivity = new Runnable() { + @Override + public void run() { + Network active = ConnectionHelper.getActiveNetwork(ServiceSend.this); + boolean restart = !Objects.equals(lastActive, active); + if (restart) { + lastActive = active; + EntityLog.log(ServiceSend.this, "Service send active=" + active); + + if (lastSuitable) { + EntityLog.log(ServiceSend.this, "Service send restart"); + lastSuitable = false; + owner.stop(); + handling.clear(); } - }); - } + } - private void _checkConnectivity() { - Network active = ConnectionHelper.getActiveNetwork(this); - boolean restart = !Objects.equals(lastActive, active); - if (restart) { - lastActive = active; - EntityLog.log(this, "Service send active=" + active); + boolean suitable = ConnectionHelper.getNetworkState(ServiceSend.this).isSuitable(); + if (lastSuitable != suitable) { + lastSuitable = suitable; + EntityLog.log(ServiceSend.this, "Service send suitable=" + suitable); - if (lastSuitable) { - EntityLog.log(this, "Service send restart"); - lastSuitable = false; - owner.stop(); - handling.clear(); + try { + NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + nm.notify(Helper.NOTIFICATION_SEND, getNotificationService().build()); + } catch (Throwable ex) { + Log.w(ex); + } + + if (suitable) + owner.start(); + else { + owner.stop(); + handling.clear(); + } } } - - boolean suitable = ConnectionHelper.getNetworkState(this).isSuitable(); - if (lastSuitable != suitable) { - lastSuitable = suitable; - EntityLog.log(this, "Service send suitable=" + suitable); - - try { - NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - nm.notify(Helper.NOTIFICATION_SEND, getNotificationService().build()); - } catch (Throwable ex) { - Log.w(ex); - } - - if (suitable) - owner.start(); - else { - owner.stop(); - handling.clear(); - } - } - } + }; private void processOperations(List ops) { try {