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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java

Issue 1869323003: [NTP Snippets] Scheduler: Fetch on Wifi (without charging) only 6AM-10PM (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@snippets_merge_controller
Patch Set: remove fudge Created 4 years, 8 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/ntp/snippets/SnippetsLauncher.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
index f8dd2c5d59dd7c3637434a21572e726d4ecd46d3..0f33f69bc7c7b7a1e1eb5dbeb5c364a5681469f4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsLauncher.java
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.ntp.snippets;
import android.content.Context;
import com.google.android.gms.gcm.GcmNetworkManager;
+import com.google.android.gms.gcm.OneoffTask;
import com.google.android.gms.gcm.PeriodicTask;
import com.google.android.gms.gcm.Task;
@@ -18,6 +19,8 @@ import org.chromium.chrome.browser.ChromeBackgroundService;
import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler;
+import java.util.Date;
+
/**
* The {@link SnippetsLauncher} singleton is created and owned by the C++ browser.
*
@@ -26,10 +29,15 @@ import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler;
public class SnippetsLauncher {
private static final String TAG = "SnippetsLauncher";
+ // Task tags for fetching snippets.
public static final String TASK_TAG_WIFI_CHARGING = "FetchSnippetsWifiCharging";
public static final String TASK_TAG_WIFI = "FetchSnippetsWifi";
public static final String TASK_TAG_FALLBACK = "FetchSnippetsFallback";
+ // Task tag for re-scheduling the snippet fetching. This is used to support different fetching
+ // intervals during different times of day.
+ public static final String TASK_TAG_RESCHEDULE = "RescheduleSnippets";
+
// The instance of SnippetsLauncher currently owned by a C++ SnippetsLauncherAndroid, if any.
// If it is non-null then the browser is running.
private static SnippetsLauncher sInstance;
@@ -90,7 +98,7 @@ public class SnippetsLauncher {
}
}
- private static PeriodicTask buildTask(
+ private static PeriodicTask buildFetchTask(
String tag, long periodSeconds, int requiredNetwork, boolean requiresCharging) {
return new PeriodicTask.Builder()
.setService(ChromeBackgroundService.class)
@@ -103,21 +111,51 @@ public class SnippetsLauncher {
.build();
}
+ private static OneoffTask buildRescheduleTask(Date date) {
+ Date now = new Date();
+ // Convert from milliseconds to seconds, rounding up.
+ long delaySeconds = (now.getTime() - date.getTime() + 999) / 1000;
+ final long intervalSeconds = 15 * 60;
+ return new OneoffTask.Builder()
+ .setService(ChromeBackgroundService.class)
+ .setTag(TASK_TAG_RESCHEDULE)
+ .setExecutionWindow(delaySeconds, delaySeconds + intervalSeconds)
+ .setRequiredNetwork(Task.NETWORK_STATE_ANY)
+ .setRequiresCharging(false)
+ .setPersisted(true)
+ .setUpdateCurrent(true)
+ .build();
+ }
+
+ private void scheduleOrCancelFetchTask(
+ String taskTag, long period, int requiredNetwork, boolean requiresCharging) {
+ if (period > 0) {
+ mScheduler.schedule(buildFetchTask(taskTag, period, requiredNetwork, requiresCharging));
+ } else {
+ mScheduler.cancelTask(taskTag, ChromeBackgroundService.class);
+ }
+ }
+
@CalledByNative
- private boolean schedule(
- long periodWifiChargingSeconds, long periodWifiSeconds, long periodFallbackSeconds) {
+ private boolean schedule(long periodWifiChargingSeconds, long periodWifiSeconds,
+ long periodFallbackSeconds, long rescheduleTime) {
if (!mGCMEnabled) return false;
Log.d(TAG, "Scheduling: " + periodWifiChargingSeconds + " " + periodWifiSeconds + " "
+ periodFallbackSeconds);
// Google Play Services may not be up to date, if the application was not installed through
// the Play Store. In this case, scheduling the task will fail silently.
try {
- mScheduler.schedule(buildTask(TASK_TAG_WIFI_CHARGING, periodWifiChargingSeconds,
- Task.NETWORK_STATE_UNMETERED, true));
- mScheduler.schedule(buildTask(
- TASK_TAG_WIFI, periodWifiSeconds, Task.NETWORK_STATE_UNMETERED, false));
- mScheduler.schedule(buildTask(
- TASK_TAG_FALLBACK, periodFallbackSeconds, Task.NETWORK_STATE_CONNECTED, false));
+ scheduleOrCancelFetchTask(TASK_TAG_WIFI_CHARGING, periodWifiChargingSeconds,
+ Task.NETWORK_STATE_UNMETERED, true);
+ scheduleOrCancelFetchTask(
+ TASK_TAG_WIFI, periodWifiSeconds, Task.NETWORK_STATE_UNMETERED, false);
+ scheduleOrCancelFetchTask(
+ TASK_TAG_FALLBACK, periodFallbackSeconds, Task.NETWORK_STATE_CONNECTED, false);
+ if (rescheduleTime > 0) {
+ mScheduler.schedule(buildRescheduleTask(new Date(rescheduleTime)));
+ } else {
+ mScheduler.cancelTask(TASK_TAG_RESCHEDULE, ChromeBackgroundService.class);
+ }
} catch (IllegalArgumentException e) {
// Disable GCM for the remainder of this session.
mGCMEnabled = false;
@@ -131,18 +169,7 @@ public class SnippetsLauncher {
private boolean unschedule() {
if (!mGCMEnabled) return false;
Log.i(TAG, "Unscheduling");
- try {
- mScheduler.cancelTask(TASK_TAG_WIFI_CHARGING, ChromeBackgroundService.class);
- mScheduler.cancelTask(TASK_TAG_WIFI, ChromeBackgroundService.class);
- mScheduler.cancelTask(TASK_TAG_FALLBACK, ChromeBackgroundService.class);
- } catch (IllegalArgumentException e) {
- // This occurs when SnippetsLauncherService is not found in the application
- // manifest. Disable GCM for the remainder of this session.
- mGCMEnabled = false;
- // Return false so that the failure will be logged.
- return false;
- }
- return true;
+ return schedule(0, 0, 0, 0);
}
}

Powered by Google App Engine
This is Rietveld 408576698