diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index f7d160d91a..73690d3eaf 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -2010,7 +2010,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } // Restore schedule - schedule(context, true); + schedule(context, false); // Init service int accounts = db.account().getSynchronizingAccounts().size(); @@ -2037,6 +2037,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences am.cancel(pi); boolean poll; + Long at = null; long[] schedule = getSchedule(context); if (schedule == null) poll = true; @@ -2053,17 +2054,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences AlarmManagerCompat.setAndAllowWhileIdle(am, AlarmManager.RTC_WAKEUP, next, pi); - if (sync) { - long dt = Math.abs(schedule[0] - now) / 1000; - long threshold = (schedule[1] - schedule[0]) / 5 / 1000; - if (dt < threshold) { - Log.i("Sync at schedule start dt=" + dt + " threshold=" + threshold); - ServiceUI.sync(context, null); - } + if (sync & poll) { + at = now + 30 * 1000L; + Log.i("Sync at schedule start=" + new Date(at)); } } - ServiceUI.schedule(context, poll); + ServiceUI.schedule(context, poll, at); } static long[] getSchedule(Context context) { diff --git a/app/src/main/java/eu/faircode/email/ServiceUI.java b/app/src/main/java/eu/faircode/email/ServiceUI.java index 33a2ae0c85..1a85dfe5f1 100644 --- a/app/src/main/java/eu/faircode/email/ServiceUI.java +++ b/app/src/main/java/eu/faircode/email/ServiceUI.java @@ -548,7 +548,7 @@ public class ServiceUI extends IntentService { long now = new Date().getTime(); long[] schedule = ServiceSynchronize.getSchedule(this); boolean poll = (schedule == null || (now >= schedule[0] && now < schedule[1])); - schedule(this, poll); + schedule(this, poll, null); } } @@ -562,7 +562,7 @@ public class ServiceUI extends IntentService { .setAction(account == null ? "sync" : "sync:" + account)); } - static void schedule(Context context, boolean poll) { + static void schedule(Context context, boolean poll, Long at) { Intent intent = new Intent(context, ServiceUI.class); intent.setAction("sync"); intent.putExtra("reschedule", true); @@ -572,20 +572,23 @@ public class ServiceUI extends IntentService { AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.cancel(piSync); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - boolean enabled = prefs.getBoolean("enabled", true); - int pollInterval = prefs.getInt("poll_interval", ServiceSynchronize.DEFAULT_POLL_INTERVAL); - if (poll && enabled && pollInterval > 0) { - long now = new Date().getTime(); - long interval = pollInterval * 60 * 1000L; - long next = now + interval - now % interval + 30 * 1000L; - if (next < now + interval / 5) - next += interval; + if (at == null) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean enabled = prefs.getBoolean("enabled", true); + int pollInterval = prefs.getInt("poll_interval", ServiceSynchronize.DEFAULT_POLL_INTERVAL); + if (poll && enabled && pollInterval > 0) { + long now = new Date().getTime(); + long interval = pollInterval * 60 * 1000L; + long next = now + interval - now % interval + 30 * 1000L; + if (next < now + interval / 5) + next += interval; - EntityLog.log(context, "Poll next=" + new Date(next)); + EntityLog.log(context, "Poll next=" + new Date(next)); - AlarmManagerCompat.setAndAllowWhileIdle(am, AlarmManager.RTC_WAKEUP, next, piSync); - } + AlarmManagerCompat.setAndAllowWhileIdle(am, AlarmManager.RTC_WAKEUP, next, piSync); + } + } else + AlarmManagerCompat.setAndAllowWhileIdle(am, AlarmManager.RTC_WAKEUP, at, piSync); } private static PendingIntent getBannerIntent(Context context) {