Cancel overalpping submits

This commit is contained in:
M66B 2016-07-08 10:37:24 +02:00
parent e9bd13a17d
commit c5e136d4bc
2 changed files with 35 additions and 8 deletions

View File

@ -42,12 +42,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/allDebug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/allDebug/renderscript" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/allDebug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/all/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/all/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAllDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAllDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAllDebug/assets" type="java-test-resource" />
@ -56,6 +50,12 @@
<sourceFolder url="file://$MODULE_DIR$/src/testAllDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAllDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAllDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/all/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/all/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/all/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/all/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/all/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/all/assets" type="java-resource" />

View File

@ -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());