// Copyright (c) 2012 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
//     base/android/jni_generator/jni_generator.py
// For
//     org/chromium/foo/Foo

#ifndef org_chromium_foo_Foo_JNI
#define org_chromium_foo_Foo_JNI

#include <jni.h>

#include "base/android/jni_generator/jni_generator_helper.h"

#include "base/android/jni_int_wrapper.h"

// Step 1: forward declarations.
namespace {
const char kFooClassPath[] = "org/chromium/foo/Foo";
// Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_Foo_clazz = NULL;

}  // namespace

static void DoSomething(JNIEnv* env, jclass jcaller,
    jobject callback1,
    jobject callback2);

// Step 2: method stubs.

static base::subtle::AtomicWord g_Foo_calledByNative = 0;
static void Java_Foo_calledByNative(JNIEnv* env, jobject callback1,
    jobject callback2) {
  /* Must call RegisterNativesImpl()  */
  CHECK_CLAZZ(env, g_Foo_clazz,
      g_Foo_clazz);
  jmethodID method_id =
      base::android::MethodID::LazyGet<
      base::android::MethodID::TYPE_STATIC>(
      env, g_Foo_clazz,
      "calledByNative",

"("
"Lorg/chromium/foo/Bar1$Callback;"
"Lorg/chromium/foo/Bar2$Callback;"
")"
"V",
      &g_Foo_calledByNative);

     env->CallStaticVoidMethod(g_Foo_clazz,
          method_id, callback1, callback2);
  jni_generator::CheckException(env);

}

// Step 3: RegisterNatives.

static const JNINativeMethod kMethodsFoo[] = {
    { "nativeDoSomething",
"("
"Lorg/chromium/foo/Bar1$Callback;"
"Lorg/chromium/foo/Bar2$Callback;"
")"
"V", reinterpret_cast<void*>(DoSomething) },
};

static bool RegisterNativesImpl(JNIEnv* env) {
  g_Foo_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
      base::android::GetClass(env, kFooClassPath).obj()));

  const int kMethodsFooSize = arraysize(kMethodsFoo);

  if (env->RegisterNatives(g_Foo_clazz,
                           kMethodsFoo,
                           kMethodsFooSize) < 0) {
    jni_generator::HandleRegistrationError(
        env, g_Foo_clazz, __FILE__);
    return false;
  }

  return true;
}

#endif  // org_chromium_foo_Foo_JNI
