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

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

Issue 2686203002: [Offline pages] Creating BackgroundJobScheduler, which uses JobScheduler (Closed)
Patch Set: Updating the OS version for BackgroundScheduler#getInstance 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/BackgroundScheduler.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java
index 28e96617a52b2cf40ab1f2454e20e75a424b0e47..1a151ea4a0446f761af86a990729439ee5c943a0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java
@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.offlinepages;
import android.content.Context;
+import android.os.Build;
import android.os.Bundle;
import com.google.android.gms.gcm.GcmNetworkManager;
@@ -21,50 +22,64 @@ public class BackgroundScheduler {
private static final long NO_DELAY = 0;
private static final boolean OVERWRITE = true;
- /**
- * For the given Triggering conditions, start a new GCM Network Manager request.
- */
- public static void schedule(Context context, TriggerConditions triggerConditions) {
- schedule(context, triggerConditions, NO_DELAY, OVERWRITE);
+ private Context mContext;
Pete Williamson 2017/02/10 02:10:42 Why hold onto the context? As I recall, we need a
fgorski 2017/02/10 19:26:00 It makes sense to add it for 2 reasons: * All meth
Pete Williamson 2017/02/10 22:45:22 I'm OK with leaving the code as is, but I still th
+
+ /** @return An instance of BackgroundScheduler for given context, relevant to the API level. */
Pete Williamson 2017/02/10 02:10:42 nit: relevant to the API level. -> for the current
fgorski 2017/02/10 19:26:00 Done.
+ public static BackgroundScheduler getInstance(Context context) {
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N) {
+ return new BackgroundScheduler(context);
+ }
+
+ return new BackgroundJobScheduler(context);
Pete Williamson 2017/02/10 02:10:42 I'm not sure we are ready to turn this on yet, a l
fgorski 2017/02/10 19:26:00 We are not. I added a TODO to leave it for next pa
+ }
+
+ protected BackgroundScheduler(Context context) {
+ mContext = context;
+ }
+
+ protected Context getContext() {
+ return mContext;
+ }
+
+ /** Schedules a GCM Network Manager task for provided triggering conditions. */
+ public void schedule(TriggerConditions triggerConditions) {
+ scheduleImpl(getContext(), triggerConditions, NO_DELAY, ONE_WEEK_IN_SECONDS, OVERWRITE);
Pete Williamson 2017/02/10 02:10:43 It might be cleaner to move the GCM impl into its
fgorski 2017/02/10 19:26:00 Done. I thought about that earlier, but I was tryi
}
/**
* If there is no currently scheduled task, then start a GCM Network Manager request
- * for the given Triggering conditions but delayed to run after {@code delayStartSecs}.
+ * for the given Triggering conditions but delayed to run after {@code delayStartSeconds}.
* Typically, the Request Coordinator will overwrite this task after task processing
* and/or queue updates. This is a backup task in case processing is killed by the
* system.
*/
- public static void backupSchedule(
- Context context, TriggerConditions triggerConditions, long delayStartSecs) {
- schedule(context, triggerConditions, delayStartSecs, !OVERWRITE);
+ public void backupSchedule(TriggerConditions triggerConditions, long delayStartSeconds) {
+ scheduleImpl(getContext(), triggerConditions, delayStartSeconds, ONE_WEEK_IN_SECONDS,
+ !OVERWRITE);
}
/**
* Cancel any outstanding GCM Network Manager requests.
*/
- public static void unschedule(Context context) {
- // Get the GCM Network Scheduler.
- GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(context);
- gcmNetworkManager.cancelTask(OfflinePageUtils.TASK_TAG, ChromeBackgroundService.class);
+ public void unschedule() {
+ GcmNetworkManager.getInstance(getContext())
+ .cancelTask(OfflinePageUtils.TASK_TAG, ChromeBackgroundService.class);
}
/**
* For the given Triggering conditions, start a new GCM Network Manager request allowed
* to run after {@code delayStartSecs} seconds.
*/
- private static void schedule(Context context, TriggerConditions triggerConditions,
- long delayStartSecs, boolean overwrite) {
- // Get the GCM Network Scheduler.
- GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(context);
-
+ protected void scheduleImpl(Context context, TriggerConditions triggerConditions,
+ long delayStartSeconds, long executionDeadlineSeconds, boolean overwrite) {
Bundle taskExtras = new Bundle();
TaskExtrasPacker.packTimeInBundle(taskExtras);
+ TaskExtrasPacker.packHoldWakelock(taskExtras);
TaskExtrasPacker.packTriggerConditionsInBundle(taskExtras, triggerConditions);
Task task = new OneoffTask.Builder()
.setService(ChromeBackgroundService.class)
- .setExecutionWindow(delayStartSecs, ONE_WEEK_IN_SECONDS)
+ .setExecutionWindow(delayStartSeconds, executionDeadlineSeconds)
.setTag(OfflinePageUtils.TASK_TAG)
.setUpdateCurrent(overwrite)
.setRequiredNetwork(triggerConditions.requireUnmeteredNetwork()
@@ -74,7 +89,8 @@ public class BackgroundScheduler {
.setExtras(taskExtras)
.build();
- gcmNetworkManager.schedule(task);
+ // Schedule a task using GCM network manager.
+ GcmNetworkManager.getInstance(context).schedule(task);
}
/**

Powered by Google App Engine
This is Rietveld 408576698