// 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 org.chromium.base.Callback;
import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
/**
* Provides Java scheduling support from native offlining code as
* well as JNI interface to tell native code to start processing
* queued requests.
*/
@JNINamespace("offline_pages::android")
public class BackgroundSchedulerBridge {
// Starts processing of one or more queued background requests.
// Returns whether processing was started and that caller should
// expect a callback (once processing has completed or terminated).
// If processing was already active or not able to process for
// some other reason, returns false and this calling instance will
// not receive a callback.
// TODO(dougarnett): consider adding policy check api to let caller
// separately determine if not allowed by policy.
public static boolean startProcessing(
DeviceConditions deviceConditions, Callback<Boolean> callback) {
return nativeStartProcessing(deviceConditions.isPowerConnected(),
deviceConditions.getBatteryPercentage(), deviceConditions.getNetConnectionType(),
callback);
}
@CalledByNative
private static void schedule(TriggerConditions triggerConditions) {
BackgroundScheduler.schedule(ContextUtils.getApplicationContext(), triggerConditions);
}
@CalledByNative
private static void backupSchedule(TriggerConditions triggerConditions, long delayInSeconds) {
BackgroundScheduler.schedule(ContextUtils.getApplicationContext(), triggerConditions);
}
@CalledByNative
private static void unschedule() {
BackgroundScheduler.unschedule(ContextUtils.getApplicationContext());
}
/**
* Used by native code to create and pass up Java object encapsulating the
* trigger conditions.
*/
@CalledByNative
private static TriggerConditions createTriggerConditions(boolean requirePowerConnected,
int minimumBatteryPercentage, boolean requireUnmeteredNetwork) {
return new TriggerConditions(
requirePowerConnected, minimumBatteryPercentage, requireUnmeteredNetwork);
}
/** Instructs the native RequestCoordinator to start processing. */
private static native boolean nativeStartProcessing(boolean powerConnected,
int batteryPercentage, int netConnectionType, Callback<Boolean> callback);
}