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

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: 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/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 eef945bdcfd64adb46014b0bad1f12e7e34417c4..f5c28cc1635bc497b0a2ad65c47380caee430d03 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,88 +5,68 @@
package org.chromium.chrome.browser.offlinepages;
import android.content.Context;
-import android.os.Bundle;
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.GoogleApiAvailability;
-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;
+import java.util.concurrent.TimeUnit;
/**
* The background scheduler class is for setting GCM Network Manager tasks.
*/
-public class BackgroundScheduler {
- private static final long ONE_WEEK_IN_SECONDS = 60 * 60 * 24 * 7;
+public abstract class BackgroundScheduler {
+ private static final long ONE_WEEK_IN_SECONDS = TimeUnit.DAYS.toSeconds(7);
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.
+ */
+ 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 void schedule(Context context, TriggerConditions triggerConditions) {
- schedule(context, triggerConditions, NO_DELAY, OVERWRITE);
+ public static BackgroundScheduler getInstance(Context context) {
+ // TODO(fgorski): Enable JobScheduler for >= N_MR1 once service implemented.
+ 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 = getGcmNetworkManager(context);
- if (gcmNetworkManager == null) return;
- 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 = getGcmNetworkManager(context);
- if (gcmNetworkManager == null) return;
-
- 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();
-
- gcmNetworkManager.schedule(task);
- }
+ protected abstract void scheduleImpl(TriggerConditions triggerConditions,
+ long delayStartSeconds, long executionDeadlineSeconds, boolean overwrite);
- private static GcmNetworkManager getGcmNetworkManager(Context context) {
- if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)
- == ConnectionResult.SUCCESS) {
- return GcmNetworkManager.getInstance(context);
- }
- return null;
+ /** @return Context used to access OS services. */
+ protected Context getContext() {
+ return mContext;
}
/**

Powered by Google App Engine
This is Rietveld 408576698