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

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: 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/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..7149015b2af43d64f595405ec1b9e88b370d2391 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,76 +5,66 @@
package org.chromium.chrome.browser.offlinepages;
import android.content.Context;
-import android.os.Bundle;
-
-import com.google.android.gms.gcm.GcmNetworkManager;
-import com.google.android.gms.gcm.OneoffTask;
-import com.google.android.gms.gcm.Task;
-
-import org.chromium.chrome.browser.ChromeBackgroundService;
/**
* The background scheduler class is for setting GCM Network Manager tasks.
*/
-public class BackgroundScheduler {
+public abstract class BackgroundScheduler {
private static final long ONE_WEEK_IN_SECONDS = 60 * 60 * 24 * 7;
nyquist 2017/02/16 23:49:32 Nit: TimeUnit.DAYS.toSeconds(7) ?
fgorski 2017/02/17 22:31:15 Done.
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.
+ * Context used by the scheduler to access services. Extracted to a field, to clean up method
+ * signatures.
*/
- public static void schedule(Context context, TriggerConditions triggerConditions) {
- schedule(context, triggerConditions, NO_DELAY, OVERWRITE);
+ private Context mContext;
+
+ /**
+ * Provides an instance of BackgroundScheduler for given context and current API level.
+ * <p>
+ * Warning: Don't cache the returned value, as it is bound to {@code context}. Consumers should
+ * simply get an instance every time.
+ * @return An instance of BackgroundScheduler.
+ */
+ public static BackgroundScheduler getInstance(Context context) {
+ // TODO(fgorski): Enable JobScheduler for >= N_MR1 once service implemented.
nyquist 2017/02/16 23:49:32 If a user upgrades the OS, do we need to force-can
fgorski 2017/02/17 22:31:15 We thought about that: The first job that comes w
nyquist 2017/02/21 18:40:13 Yeah, I think that should work. And yeah; I do thi
+ return new BackgroundGcmScheduler(context);
+ }
+
+ protected BackgroundScheduler(Context context) {
+ mContext = context;
+ }
+
+ /** Schedules a GCM Network Manager task for provided triggering conditions. */
+ public void schedule(TriggerConditions triggerConditions) {
+ scheduleImpl(triggerConditions, NO_DELAY, ONE_WEEK_IN_SECONDS, OVERWRITE);
}
/**
* 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 scheduleBackup(TriggerConditions triggerConditions, long delayStartSeconds) {
+ scheduleImpl(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);
- }
+ /** Cancel any outstanding GCM Network Manager requests. */
+ public abstract void cancel();
/**
* 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);
-
- Bundle taskExtras = new Bundle();
- TaskExtrasPacker.packTimeInBundle(taskExtras);
- TaskExtrasPacker.packTriggerConditionsInBundle(taskExtras, triggerConditions);
-
- Task task = new OneoffTask.Builder()
- .setService(ChromeBackgroundService.class)
- .setExecutionWindow(delayStartSecs, ONE_WEEK_IN_SECONDS)
- .setTag(OfflinePageUtils.TASK_TAG)
- .setUpdateCurrent(overwrite)
- .setRequiredNetwork(triggerConditions.requireUnmeteredNetwork()
- ? Task.NETWORK_STATE_UNMETERED
- : Task.NETWORK_STATE_CONNECTED)
- .setRequiresCharging(triggerConditions.requirePowerConnected())
- .setExtras(taskExtras)
- .build();
+ protected abstract void scheduleImpl(TriggerConditions triggerConditions,
+ long delayStartSeconds, long executionDeadlineSeconds, boolean overwrite);
- gcmNetworkManager.schedule(task);
+ /** @return Context used to access OS services. */
+ protected Context getContext() {
+ return mContext;
}
/**

Powered by Google App Engine
This is Rietveld 408576698