#ifndef BASE_ANDROID_TASK_SCHEDULER_TASK_RUNNER_ANDROID_H_
#define BASE_ANDROID_TASK_SCHEDULER_TASK_RUNNER_ANDROID_H_
#include <memory>
#include "base/android/jni_weak_ref.h"
#include "base/android/task_scheduler/task_traits_android.h"
#include "base/base_export.h"
#include "base/functional/callback_forward.h"
#include "base/task/single_thread_task_runner.h"
namespace base {
enum class TaskRunnerType { BASE, SEQUENCED, SINGLE_THREAD };
class BASE_EXPORT TaskRunnerAndroid {
public:
explicit TaskRunnerAndroid(scoped_refptr<TaskRunner> task_runner,
TaskRunnerType type);
TaskRunnerAndroid(const TaskRunnerAndroid&) = delete;
TaskRunnerAndroid& operator=(const TaskRunnerAndroid&) = delete;
~TaskRunnerAndroid();
void Destroy(JNIEnv* env);
void PostDelayedTask(JNIEnv* env,
const base::android::JavaRef<jobject>& task,
jlong delay,
jstring runnable_class_name);
bool BelongsToCurrentThread(JNIEnv* env);
static std::unique_ptr<TaskRunnerAndroid> Create(jint task_runner_type,
jint j_task_traits);
using UiThreadTaskRunnerCallback =
RepeatingCallback<scoped_refptr<base::SingleThreadTaskRunner>(
::TaskTraits)>;
static void SetUiThreadTaskRunnerCallback(
UiThreadTaskRunnerCallback callback);
private:
const scoped_refptr<TaskRunner> task_runner_;
const TaskRunnerType type_;
};
}
#endif