| 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 38f5eeb4207d97f925e5173bfe6e18c0af568290..27b23c758d308affb20055833482f0e8b18bbb9f 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
|
| @@ -4,48 +4,42 @@
|
|
|
| package org.chromium.chrome.browser.offlinepages;
|
|
|
| -import android.content.Context;
|
| -import android.os.Build;
|
| +import android.os.Bundle;
|
| +
|
| +import org.chromium.base.ContextUtils;
|
| +import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory;
|
| +import org.chromium.components.background_task_scheduler.TaskIds;
|
| +import org.chromium.components.background_task_scheduler.TaskInfo;
|
|
|
| import java.util.concurrent.TimeUnit;
|
|
|
| /**
|
| - * The background scheduler class is for setting GCM Network Manager tasks.
|
| + * Class responsible for scheduling and canceling offline page related background tasks.
|
| */
|
| -public abstract class BackgroundScheduler {
|
| - private static final long ONE_WEEK_IN_SECONDS = TimeUnit.DAYS.toSeconds(7);
|
| - private static final long FIVE_MINUTES_IN_SECONDS = TimeUnit.MINUTES.toSeconds(5);
|
| - private static final long NO_DELAY = 0;
|
| +public class BackgroundScheduler {
|
| + static final long ONE_WEEK_IN_MILLISECONDS = TimeUnit.DAYS.toMillis(7);
|
| + static final long FIVE_MINUTES_IN_MILLISECONDS = TimeUnit.MINUTES.toSeconds(5);
|
| + static final long NO_DELAY = 0;
|
| private static final boolean OVERWRITE = true;
|
|
|
| - /**
|
| - * Context used by the scheduler to access services. Extracted to a field, to clean up method
|
| - * signatures.
|
| - */
|
| - private Context mContext;
|
| + private static class LazyHolder {
|
| + static final BackgroundScheduler INSTANCE = new BackgroundScheduler();
|
| + }
|
|
|
| - /**
|
| - * 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) {
|
| - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
| - return new BackgroundJobScheduler(context);
|
| - } else {
|
| - return new BackgroundGcmScheduler(context);
|
| - }
|
| + /** Provides an instance of BackgroundScheduler for given context and current API level. */
|
| + public static BackgroundScheduler getInstance() {
|
| + return LazyHolder.INSTANCE;
|
| }
|
|
|
| - protected BackgroundScheduler(Context context) {
|
| - mContext = context;
|
| + /** Cancels a background tasks. */
|
| + public void cancel() {
|
| + BackgroundTaskSchedulerFactory.getScheduler().cancel(
|
| + ContextUtils.getApplicationContext(), TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID);
|
| }
|
|
|
| - /** Schedules a GCM Network Manager task for provided triggering conditions. */
|
| + /** Schedules a background task for provided triggering conditions. */
|
| public void schedule(TriggerConditions triggerConditions) {
|
| - scheduleImpl(triggerConditions, NO_DELAY, ONE_WEEK_IN_SECONDS, OVERWRITE);
|
| + scheduleImpl(triggerConditions, NO_DELAY, ONE_WEEK_IN_MILLISECONDS, OVERWRITE);
|
| }
|
|
|
| /**
|
| @@ -55,34 +49,41 @@ public abstract class BackgroundScheduler {
|
| * and/or queue updates. This is a backup task in case processing is killed by the
|
| * system.
|
| */
|
| - public void scheduleBackup(TriggerConditions triggerConditions, long delayStartSeconds) {
|
| - scheduleImpl(triggerConditions, delayStartSeconds, ONE_WEEK_IN_SECONDS, !OVERWRITE);
|
| + public void scheduleBackup(TriggerConditions triggerConditions, long delayStartMs) {
|
| + scheduleImpl(triggerConditions, delayStartMs, ONE_WEEK_IN_MILLISECONDS, !OVERWRITE);
|
| }
|
|
|
| - /** 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.
|
| + * Method for rescheduling a background task for offline pages in the event of OS upgrade or
|
| + * GooglePlayServices upgrade.
|
| + * We use the least restrictive trigger conditions. A wakeup will cause the queue to be
|
| + * checked, and the trigger conditions will be replaced by the current trigger conditions
|
| + * needed.
|
| */
|
| - protected abstract void scheduleImpl(TriggerConditions triggerConditions,
|
| - long delayStartSeconds, long executionDeadlineSeconds, boolean overwrite);
|
| -
|
| - /** @return Context used to access OS services. */
|
| - protected Context getContext() {
|
| - return mContext;
|
| + public void reschedule() {
|
| + TriggerConditions triggerConditions = new TriggerConditions(false, 0, false);
|
| + scheduleBackup(triggerConditions, FIVE_MINUTES_IN_MILLISECONDS);
|
| }
|
|
|
| - /**
|
| - * If GooglePlayServices upgrades, any outstaning tasks will be lost.
|
| - * Set a reminder to wake up and check the task queue if an upgrade happens.
|
| - */
|
| - public void rescheduleOfflinePagesTasksOnUpgrade() {
|
| - // We use the least restrictive trigger conditions. A wakeup will cause
|
| - // the queue to be checked, and the trigger conditions will be replaced by
|
| - // the current trigger conditions needed.
|
| - TriggerConditions triggerConditions = new TriggerConditions(false, 0, false);
|
| - scheduleBackup(triggerConditions, FIVE_MINUTES_IN_SECONDS);
|
| + protected void scheduleImpl(TriggerConditions triggerConditions, long delayStartMs,
|
| + long executionDeadlineMs, boolean overwrite) {
|
| + Bundle taskExtras = new Bundle();
|
| + TaskExtrasPacker.packTimeInBundle(taskExtras);
|
| + TaskExtrasPacker.packTriggerConditionsInBundle(taskExtras, triggerConditions);
|
| +
|
| + TaskInfo taskInfo =
|
| + TaskInfo.createOneOffTask(TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID,
|
| + OfflineBackgroundTask.class, delayStartMs, executionDeadlineMs)
|
| + .setRequiredNetworkType(triggerConditions.requireUnmeteredNetwork()
|
| + ? TaskInfo.NETWORK_TYPE_UNMETERED
|
| + : TaskInfo.NETWORK_TYPE_ANY)
|
| + .setUpdateCurrent(overwrite)
|
| + .setIsPersisted(true)
|
| + .setExtras(taskExtras)
|
| + .setRequiresCharging(triggerConditions.requirePowerConnected())
|
| + .build();
|
| +
|
| + BackgroundTaskSchedulerFactory.getScheduler().schedule(
|
| + ContextUtils.getApplicationContext(), taskInfo);
|
| }
|
| }
|
|
|