Chromium Code Reviews| 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..9dfce1f06772111689b11047e9c6abded5b30e9f |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundScheduler.java |
| @@ -0,0 +1,61 @@ |
| +// 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 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.Date; |
| + |
| +/** |
| + * 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. */ |
| + public static final String DATE_TAG = "Date"; |
|
dewittj
2016/05/25 23:16:45
nit: private
Pete Williamson
2016/05/25 23:59:57
Done.
|
| + 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): Today this puts timestamp, add triggering conditions into bundle. |
| + // Triggering conditions will include network state and charging requirements, maybe |
| + // also battery percentage. |
| + Bundle taskExtras = new Bundle(); |
| + Date now = new Date(); |
| + taskExtras.putLong(DATE_TAG, now.getTime()); |
| + |
| + // Create a task. |
| + 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(); |
| + |
| + // Schedule the task. |
| + 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. |
| + } |
| +} |