Chromium Code Reviews| 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); |
| + } |
| +} |