diff options
author | Arne Schwabe <arne@rfc2549.org> | 2023-08-23 17:43:25 +0200 |
---|---|---|
committer | Arne Schwabe <arne@rfc2549.org> | 2023-08-23 18:12:02 +0200 |
commit | a3607c6850280f6c0144f95f2b5d2674de93a510 (patch) | |
tree | 1a6efc58c1f3d52a6e8ee4055d8af3c822146d95 | |
parent | 707acc99ac525b61bab813bb56d0573e6bed1306 (diff) |
Really fix crashes with keepalive job with API <= 23 (closes #1619)
-rw-r--r-- | main/src/main/java/de/blinkt/openvpn/core/keepVPNAlive.java | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/core/keepVPNAlive.java b/main/src/main/java/de/blinkt/openvpn/core/keepVPNAlive.java index 5bff9eb2..b4264aba 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/keepVPNAlive.java +++ b/main/src/main/java/de/blinkt/openvpn/core/keepVPNAlive.java @@ -90,35 +90,44 @@ public class keepVPNAlive extends JobService implements VpnStatus.StateListener * strange Android build that allows lower lmits. */ long initervalMillis = Math.max(getMinPeriodMillis(), 5 * 60 * 1000L); - long flexMillis = Math.max(getMinFlexMillis(), 2 * 60 * 1000L); - jib.setPeriodic(initervalMillis, flexMillis); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + long flexMillis = Math.max(JobInfo.getMinFlexMillis(), 2 * 60 * 1000L); + jib.setPeriodic(initervalMillis, flexMillis); + } + else + { + jib.setPeriodic(initervalMillis); + } jib.setPersisted(true); - JobScheduler jobScheduler = c.getSystemService(JobScheduler.class); + JobScheduler jobScheduler = null; + jobScheduler = getJobScheduler(c); + jobScheduler.schedule(jib.build()); VpnStatus.logDebug("Scheduling VPN keep alive for VPN " + vp.mName); } - private static long getMinPeriodMillis() { + private static JobScheduler getJobScheduler(Context c) { + JobScheduler jobScheduler; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - return JobInfo.getMinPeriodMillis(); + jobScheduler = c.getSystemService(JobScheduler.class); + } else { - return 15 * 60 * 1000L; // 15 minutes + jobScheduler = (JobScheduler) c.getSystemService(JOB_SCHEDULER_SERVICE); } + return jobScheduler; } - private static long getMinFlexMillis() { + private static long getMinPeriodMillis() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - return JobInfo.getMinFlexMillis(); - } - else - { - return 5 * 60 * 1000L; // 5 minutes + return JobInfo.getMinPeriodMillis(); + } else { + return 15 * 60 * 1000L; // 15 minutes } } public static void unscheduleKeepVPNAliveJobService(Context c) { - JobScheduler jobScheduler = c.getSystemService(JobScheduler.class); + JobScheduler jobScheduler = getJobScheduler(c); jobScheduler.cancel(JOBID_KEEPVPNALIVE); VpnStatus.logDebug("Unscheduling VPN keep alive"); } |