| Index: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundGcmScheduler.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundGcmScheduler.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundGcmScheduler.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ae8126e3323ed72e9fd7cf3a75005c5db376de04
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/BackgroundGcmScheduler.java
|
| @@ -0,0 +1,67 @@
|
| +// Copyright 2017 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.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;
|
| +
|
| +/**
|
| + * The background scheduler class is for setting GCM Network Manager tasks.
|
| + */
|
| +public class BackgroundGcmScheduler extends BackgroundScheduler {
|
| + public BackgroundGcmScheduler(Context context) {
|
| + super(context);
|
| + }
|
| +
|
| + @Override
|
| + public void cancel() {
|
| + GcmNetworkManager gcmNetworkManager = getGcmNetworkManager();
|
| + if (gcmNetworkManager == null) return;
|
| + gcmNetworkManager.cancelTask(OfflinePageUtils.TASK_TAG, ChromeBackgroundService.class);
|
| + }
|
| +
|
| + @Override
|
| + protected void scheduleImpl(TriggerConditions triggerConditions, long delayStartSeconds,
|
| + long executionDeadlineSeconds, boolean overwrite) {
|
| + GcmNetworkManager gcmNetworkManager = getGcmNetworkManager();
|
| + if (gcmNetworkManager == null) return;
|
| +
|
| + Bundle taskExtras = new Bundle();
|
| + TaskExtrasPacker.packTimeInBundle(taskExtras);
|
| + TaskExtrasPacker.packHoldWakelock(taskExtras);
|
| + TaskExtrasPacker.packTriggerConditionsInBundle(taskExtras, triggerConditions);
|
| +
|
| + Task task = new OneoffTask.Builder()
|
| + .setService(ChromeBackgroundService.class)
|
| + .setExecutionWindow(delayStartSeconds, executionDeadlineSeconds)
|
| + .setTag(OfflinePageUtils.TASK_TAG)
|
| + .setUpdateCurrent(overwrite)
|
| + .setRequiredNetwork(triggerConditions.requireUnmeteredNetwork()
|
| + ? Task.NETWORK_STATE_UNMETERED
|
| + : Task.NETWORK_STATE_CONNECTED)
|
| + .setRequiresCharging(triggerConditions.requirePowerConnected())
|
| + .setExtras(taskExtras)
|
| + .build();
|
| +
|
| + // Schedule a task using GCM network manager.
|
| + gcmNetworkManager.schedule(task);
|
| + }
|
| +
|
| + private GcmNetworkManager getGcmNetworkManager() {
|
| + if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(getContext())
|
| + == ConnectionResult.SUCCESS) {
|
| + return GcmNetworkManager.getInstance(getContext());
|
| + }
|
| + return null;
|
| + }
|
| +}
|
|
|