From d5baa93a48ce53ea81bfa3af7f7267ecdc860f8b Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 31 Oct 2020 10:27:42 +0100 Subject: [PATCH] Always short backoff on charging --- app/src/main/java/eu/faircode/email/Helper.java | 13 +++++++++++++ app/src/main/java/eu/faircode/email/Log.java | 1 + .../java/eu/faircode/email/ServiceSynchronize.java | 10 ++++++---- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index 5a0c33ce40..ffb45dde84 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -37,6 +37,7 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Color; import android.net.Uri; +import android.os.BatteryManager; import android.os.Build; import android.os.Bundle; import android.os.Environment; @@ -423,6 +424,18 @@ public class Helper { return null; } + static boolean isCharging(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) + return false; + try { + BatteryManager bm = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE); + return bm.isCharging(); + } catch (Throwable ex) { + Log.e(ex); + return false; + } + } + static boolean isPlayStoreInstall() { return BuildConfig.PLAY_STORE_RELEASE; } diff --git a/app/src/main/java/eu/faircode/email/Log.java b/app/src/main/java/eu/faircode/email/Log.java index 8b40834552..e4c9530942 100644 --- a/app/src/main/java/eu/faircode/email/Log.java +++ b/app/src/main/java/eu/faircode/email/Log.java @@ -1292,6 +1292,7 @@ public class Log { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) ignoring = pm.isIgnoringBatteryOptimizations(BuildConfig.APPLICATION_ID); sb.append(String.format("Battery optimizations: %b\r\n", !ignoring)); + sb.append(String.format("Charging: %b\r\n", Helper.isCharging(context))); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index a1bdeec6cf..7b85427045 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1711,7 +1711,8 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences long fail_threshold = account.poll_interval * 60 * 1000L * 2 / 3; if (account.last_connected == null || now - account.last_connected < fail_threshold) { - if (state.getBackoff() == CONNECT_BACKOFF_START) { + if (state.getBackoff() == CONNECT_BACKOFF_START && + !Helper.isCharging(this)) { fast_fails++; if (fast_fails == 1) first_fail = now; @@ -1838,9 +1839,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (backoff < max) state.setBackoff(backoff * 2); - else if (backoff == max) - state.setBackoff(CONNECT_BACKOFF_ALARM_START * 60); - else if (backoff < CONNECT_BACKOFF_ALARM_MAX * 60) + else if (backoff == max) { + if (!Helper.isCharging(this)) + state.setBackoff(CONNECT_BACKOFF_ALARM_START * 60); + } else if (backoff < CONNECT_BACKOFF_ALARM_MAX * 60) state.setBackoff(backoff * 2); }