diff --git a/app/app.iml b/app/app.iml
index d01f501f..a0ade757 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -42,12 +42,6 @@
-
-
-
-
-
-
@@ -56,6 +50,12 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/eu/faircode/netguard/ServiceJob.java b/app/src/main/java/eu/faircode/netguard/ServiceJob.java
index 4b5e6ff8..e52eb23e 100644
--- a/app/src/main/java/eu/faircode/netguard/ServiceJob.java
+++ b/app/src/main/java/eu/faircode/netguard/ServiceJob.java
@@ -177,6 +177,35 @@ public class ServiceJob extends JobService {
}
private static void submit(PersistableBundle bundle, Context context) {
+ JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+
+ for (JobInfo pending : scheduler.getAllPendingJobs()) {
+ String type = pending.getExtras().getString("type");
+ if (type != null && type.equals(bundle.getString("type"))) {
+ if (type.equals("rule")) {
+ String pkg = pending.getExtras().getString("package");
+ if (pkg != null && pkg.equals(bundle.getString("package"))) {
+ Log.i(TAG, "Canceling id=" + pending.getId());
+ scheduler.cancel(pending.getId());
+ }
+ } else if (type.equals("host")) {
+ String pkg = pending.getExtras().getString("package");
+ int version = pending.getExtras().getInt("version");
+ int protocol = pending.getExtras().getInt("protocol");
+ String daddr = pending.getExtras().getString("daddr");
+ int dport = pending.getExtras().getInt("dport");
+ if (pkg != null && pkg.equals(bundle.getString("package")) &&
+ version == bundle.getInt("version") &&
+ protocol == bundle.getInt("protocol") &&
+ daddr != null && daddr.equals(bundle.getString("daddr")) &&
+ dport == bundle.getInt("dport")) {
+ Log.i(TAG, "Canceling id=" + pending.getId());
+ scheduler.cancel(pending.getId());
+ }
+ }
+ }
+ }
+
ComponentName serviceName = new ComponentName(context, ServiceJob.class);
JobInfo job = new JobInfo.Builder(++id, serviceName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
@@ -184,8 +213,6 @@ public class ServiceJob extends JobService {
.setExtras(bundle)
.setPersisted(true)
.build();
-
- JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(job);
Log.i(TAG, "Scheduled job=" + job.getId());