Index: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundJobScheduler.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundJobScheduler.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundJobScheduler.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d556b12ef13037988b37d148e06e162e6dc65126 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundJobScheduler.java |
@@ -0,0 +1,69 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.offlinepages; |
+ |
+import android.annotation.TargetApi; |
+import android.app.job.JobInfo; |
+import android.app.job.JobScheduler; |
+import android.content.ComponentName; |
+import android.content.Context; |
+import android.os.Build; |
+import android.os.PersistableBundle; |
+ |
+/** |
+ * The background job scheduler class used for scheduling tasks using JobScheduler. |
+ */ |
+@TargetApi(Build.VERSION_CODES.N) |
+public class BackgroundJobScheduler extends BackgroundScheduler { |
+ public static final int JOB_ID = 774322033; |
+ private static final long MILLISECONDS_IN_SECOND = 1000; |
nyquist
2017/02/16 23:49:32
TimeUnit.SECONDS.toMillis(1)?
fgorski
2017/02/17 22:31:15
Done.
|
+ |
+ public BackgroundJobScheduler(Context context) { |
+ super(context); |
+ } |
+ |
+ @Override |
+ public void cancel() { |
+ JobScheduler jobScheduler = getJobScheduler(); |
+ if (jobScheduler == null) return; |
nyquist
2017/02/16 23:49:32
When will this be null? And if it is, would you wa
fgorski
2017/02/17 22:31:15
This piece of code was added, as I was trying to s
|
+ jobScheduler.cancel(JOB_ID); |
+ } |
+ |
+ @Override |
+ protected void scheduleImpl(TriggerConditions triggerConditions, long delayStartSeconds, |
+ long executionDeadlineSeconds, boolean overwrite) { |
+ JobScheduler jobScheduler = getJobScheduler(); |
+ if (jobScheduler == null) return; |
+ |
+ if (!overwrite) { |
+ JobInfo existingJob = jobScheduler.getPendingJob(JOB_ID); |
+ if (existingJob != null) return; |
+ } |
+ |
+ PersistableBundle taskExtras = new PersistableBundle(); |
+ TaskExtrasPacker.packTimeInBundle(taskExtras); |
+ TaskExtrasPacker.packTriggerConditionsInBundle(taskExtras, triggerConditions); |
+ |
+ JobInfo jobInfo = |
+ new JobInfo |
+ .Builder(JOB_ID, new ComponentName( |
+ getContext(), BackgroundSchedulerJobService.class)) |
+ .setMinimumLatency(delayStartSeconds * MILLISECONDS_IN_SECOND) |
nyquist
2017/02/16 23:49:32
How about something like: TimeUnit.SECONDS.toMilli
fgorski
2017/02/17 22:31:15
Done.
|
+ .setOverrideDeadline(executionDeadlineSeconds * MILLISECONDS_IN_SECOND) |
+ .setPersisted(true) // across device resets |
nyquist
2017/02/16 23:49:32
Nit: Double space before // and period at end of s
fgorski
2017/02/17 22:31:15
Done.
|
+ .setRequiredNetworkType(triggerConditions.requireUnmeteredNetwork() |
+ ? JobInfo.NETWORK_TYPE_UNMETERED |
+ : JobInfo.NETWORK_TYPE_ANY) |
+ .setRequiresCharging(triggerConditions.requirePowerConnected()) |
+ .setExtras(taskExtras) |
+ .build(); |
+ |
+ jobScheduler.schedule(jobInfo); |
+ } |
+ |
+ private JobScheduler getJobScheduler() { |
+ return (JobScheduler) getContext().getSystemService(Context.JOB_SCHEDULER_SERVICE); |
+ } |
+} |