Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundJobScheduler.java

Issue 2686203002: [Offline pages] Creating BackgroundJobScheduler, which uses JobScheduler (Closed)
Patch Set: Addressing feedback Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..53a2865f66cb94364a8904ef9a3c558670fd3ad1
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundJobScheduler.java
@@ -0,0 +1,65 @@
+// 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;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 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;
+
+ public BackgroundJobScheduler(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void cancel() {
+ getJobScheduler().cancel(JOB_ID);
+ }
+
+ @Override
+ protected void scheduleImpl(TriggerConditions triggerConditions, long delayStartSeconds,
+ long executionDeadlineSeconds, boolean overwrite) {
+ if (!overwrite) {
+ JobInfo existingJob = getJobScheduler().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(TimeUnit.SECONDS.toMillis(delayStartSeconds))
+ .setOverrideDeadline(TimeUnit.SECONDS.toMillis(executionDeadlineSeconds))
+ .setPersisted(true) // Across device resets.
+ .setRequiredNetworkType(triggerConditions.requireUnmeteredNetwork()
+ ? JobInfo.NETWORK_TYPE_UNMETERED
+ : JobInfo.NETWORK_TYPE_ANY)
+ .setRequiresCharging(triggerConditions.requirePowerConnected())
+ .setExtras(taskExtras)
+ .build();
+
+ getJobScheduler().schedule(jobInfo);
+ }
+
+ private JobScheduler getJobScheduler() {
+ return (JobScheduler) getContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698