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

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: Adding null checks 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..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);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698