From a3607c6850280f6c0144f95f2b5d2674de93a510 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Wed, 23 Aug 2023 17:43:25 +0200 Subject: Really fix crashes with keepalive job with API <= 23 (closes #1619) --- .../java/de/blinkt/openvpn/core/keepVPNAlive.java | 35 ++++++++++++++-------- 1 file 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"); } -- cgit v1.2.3