// Copyright 2014 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.

// This file is autogenerated by
//     weex_core_debug/Source/WeexCore/platform/android/jniprebuild/jni_generator.py
// For
//     com/taobao/weex/base/SystemMessageHandler

#ifndef com_taobao_weex_base_SystemMessageHandler_JNI
#define com_taobao_weex_base_SystemMessageHandler_JNI

#include <jni.h>

//#include "base/android/jni_int_wrapper.h"

// Step 1: forward declarations.
namespace {
const char kSystemMessageHandlerClassPath[] =
    "com/taobao/weex/base/SystemMessageHandler";
// Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_SystemMessageHandler_clazz = NULL;
#define SystemMessageHandler_clazz(env) g_SystemMessageHandler_clazz

}  // namespace

static void RunWork(JNIEnv* env, jobject jcaller,
    jlong delegateNative);

// Step 2: method stubs.

static intptr_t g_SystemMessageHandler_create = 0;
static base::android::ScopedLocalJavaRef<jobject>
    Java_SystemMessageHandler_create(JNIEnv* env, jlong
    messagePumpDelegateNative) {
  /* Must call RegisterNativesImpl()  */
  //CHECK_CLAZZ(env, SystemMessageHandler_clazz(env),
  //    SystemMessageHandler_clazz(env), NULL);
  jmethodID method_id =
      base::android::GetMethod(
      env, SystemMessageHandler_clazz(env),
      base::android::STATIC_METHOD,
      "create",

"("
"J"
")"
"Lcom/taobao/weex/base/SystemMessageHandler;",
      &g_SystemMessageHandler_create);

  jobject ret =
      env->CallStaticObjectMethod(SystemMessageHandler_clazz(env),
          method_id, messagePumpDelegateNative);
  base::android::CheckException(env);
  return base::android::ScopedLocalJavaRef<jobject>(env, ret);
}

static intptr_t g_SystemMessageHandler_scheduleWork = 0;
static void Java_SystemMessageHandler_scheduleWork(JNIEnv* env, jobject obj) {
  /* Must call RegisterNativesImpl()  */
  //CHECK_CLAZZ(env, obj,
  //    SystemMessageHandler_clazz(env));
  jmethodID method_id =
      base::android::GetMethod(
      env, SystemMessageHandler_clazz(env),
      base::android::INSTANCE_METHOD,
      "scheduleWork",

"("
")"
"V",
      &g_SystemMessageHandler_scheduleWork);

     env->CallVoidMethod(obj,
          method_id);
  base::android::CheckException(env);

}

static intptr_t g_SystemMessageHandler_stop = 0;
static void Java_SystemMessageHandler_stop(JNIEnv* env, jobject obj) {
  /* Must call RegisterNativesImpl()  */
  //CHECK_CLAZZ(env, obj,
  //    SystemMessageHandler_clazz(env));
  jmethodID method_id =
      base::android::GetMethod(
      env, SystemMessageHandler_clazz(env),
      base::android::INSTANCE_METHOD,
      "stop",

"("
")"
"V",
      &g_SystemMessageHandler_stop);

     env->CallVoidMethod(obj,
          method_id);
  base::android::CheckException(env);

}

// Step 3: RegisterNatives.

static const JNINativeMethod kMethodsSystemMessageHandler[] = {
    { "nativeRunWork",
"("
"J"
")"
"V", reinterpret_cast<void*>(RunWork) },
};

static bool RegisterNativesImpl(JNIEnv* env) {

  g_SystemMessageHandler_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
      base::android::GetClass(env, kSystemMessageHandlerClassPath).Get()));

  const int kMethodsSystemMessageHandlerSize =
      sizeof(kMethodsSystemMessageHandler)/sizeof(kMethodsSystemMessageHandler[0]);

  if (env->RegisterNatives(SystemMessageHandler_clazz(env),
                           kMethodsSystemMessageHandler,
                           kMethodsSystemMessageHandlerSize) < 0) {
    //jni_generator::HandleRegistrationError(
    //    env, SystemMessageHandler_clazz(env), __FILE__);
    return false;
  }

  return true;
}

#endif  // com_taobao_weex_base_SystemMessageHandler_JNI
