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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b447399a387674022800cc023561dbf6237c0bb4 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java |
@@ -0,0 +1,59 @@ |
+// Copyright 2016 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.content.Context; |
+import android.os.Bundle; |
+import android.os.SystemClock; |
+ |
+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 { |
+ /** Bundle key for the timestamp in milliseconds when the request started. */ |
+ private static final String DATE_TAG = "Date"; |
+ private static final long ONE_WEEK_IN_SECONDS = 60 * 60 * 24 * 7; |
+ |
+ /** |
+ * For the given Triggering conditions, start a new GCM Network Manager request. |
+ */ |
+ public static void schedule(Context context) { |
+ // Get the GCM Network Scheduler. |
+ GcmNetworkManager gcmNetworkManager = GcmNetworkManager.getInstance(context); |
+ |
+ // TODO(petewil): Move the bundle packing and unpacking into a new SchedulerBridge |
+ // class which can be mocked, and calls the static BackgroundSchdeulerBridge. |
+ // TODO(petewil): Add the triggering conditions into the argument bundle. |
+ // Triggering conditions will include network state and charging requirements, maybe |
+ // also battery percentage. |
+ Bundle taskExtras = new Bundle(); |
+ taskExtras.putLong(DATE_TAG, SystemClock.elapsedRealtime()); |
+ |
+ Task task = new OneoffTask.Builder() |
+ .setService(ChromeBackgroundService.class) |
+ .setExecutionWindow(0, ONE_WEEK_IN_SECONDS) |
+ .setTag(OfflinePageUtils.TASK_TAG) |
+ .setUpdateCurrent(true) |
+ .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED) |
+ .setRequiresCharging(false) |
+ .setExtras(taskExtras) |
+ .build(); |
+ |
+ gcmNetworkManager.schedule(task); |
+ } |
+ |
+ /** |
+ * Cancel any outstanding GCM Network Manager requests. |
+ */ |
+ public static void unschedule(Context context) { |
+ // TODO(petewil): Take our task off the task queue. |
+ } |
+} |