summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2023-08-23 17:43:25 +0200
committerArne Schwabe <arne@rfc2549.org>2023-08-23 18:12:02 +0200
commita3607c6850280f6c0144f95f2b5d2674de93a510 (patch)
tree1a6efc58c1f3d52a6e8ee4055d8af3c822146d95
parent707acc99ac525b61bab813bb56d0573e6bed1306 (diff)
Really fix crashes with keepalive job with API <= 23 (closes #1619)
-rw-r--r--main/src/main/java/de/blinkt/openvpn/core/keepVPNAlive.java35
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");
}