18fbd55229243cb66c03d5ea1f79dfb39f596590dsatok/*
2aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa * Copyright (C) 2011 The Android Open Source Project
30bbb917d12358e0264796e75dea888f244761b64Ken Wakasa *
40bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * Licensed under the Apache License, Version 2.0 (the "License");
50bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * you may not use this file except in compliance with the License.
60bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * You may obtain a copy of the License at
70bbb917d12358e0264796e75dea888f244761b64Ken Wakasa *
8aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa *      http://www.apache.org/licenses/LICENSE-2.0
90bbb917d12358e0264796e75dea888f244761b64Ken Wakasa *
100bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * Unless required by applicable law or agreed to in writing, software
110bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * distributed under the License is distributed on an "AS IS" BASIS,
120bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * See the License for the specific language governing permissions and
140bbb917d12358e0264796e75dea888f244761b64Ken Wakasa * limitations under the License.
150bbb917d12358e0264796e75dea888f244761b64Ken Wakasa */
168fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
178fbd55229243cb66c03d5ea1f79dfb39f596590dsatok#define LOG_TAG "LatinIME: jni"
188fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
19b68e73448104714e8f12f89a1e00fb10b5fd14c4Ken Wakasa#include "jni_common.h"
20b68e73448104714e8f12f89a1e00fb10b5fd14c4Ken Wakasa
218fbd55229243cb66c03d5ea1f79dfb39f596590dsatok#include "com_android_inputmethod_keyboard_ProximityInfo.h"
228fbd55229243cb66c03d5ea1f79dfb39f596590dsatok#include "com_android_inputmethod_latin_BinaryDictionary.h"
239e51c6c0c62b78eaf14f92890981f9d35702b2c9Keisuke Kuroyanagi#include "com_android_inputmethod_latin_BinaryDictionaryUtils.h"
24c4e4dfe17dd60d200b851d228ce718543900a1fcSatoshi Kataoka#include "com_android_inputmethod_latin_DicTraverseSession.h"
253b088a2f365a9ce06f58243c83cb961ea2920b7eKen Wakasa#include "defines.h"
268fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
278fbd55229243cb66c03d5ea1f79dfb39f596590dsatok/*
288fbd55229243cb66c03d5ea1f79dfb39f596590dsatok * Returns the JNI version on success, -1 on failure.
298fbd55229243cb66c03d5ea1f79dfb39f596590dsatok */
300bbb917d12358e0264796e75dea888f244761b64Ken Wakasajint JNI_OnLoad(JavaVM *vm, void *reserved) {
310bbb917d12358e0264796e75dea888f244761b64Ken Wakasa    JNIEnv *env = 0;
328fbd55229243cb66c03d5ea1f79dfb39f596590dsatok
3334710b03e6d890a61c8c570ff9e769493f6955f9Ken Wakasa    if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6) != JNI_OK) {
349fb6f47a6a11f62d134d4d6259181ac987fc1ad3satok        AKLOGE("ERROR: GetEnv failed");
35aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa        return -1;
368fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    }
37ccebd5cefe0b6b17676edd8639f62bb708a7dd2eKen Wakasa    ASSERT(env);
38aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa    if (!env) {
39aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa        AKLOGE("ERROR: JNIEnv is invalid");
40aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa        return -1;
41aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa    }
42aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa    if (!latinime::register_BinaryDictionary(env)) {
439fb6f47a6a11f62d134d4d6259181ac987fc1ad3satok        AKLOGE("ERROR: BinaryDictionary native registration failed");
449e51c6c0c62b78eaf14f92890981f9d35702b2c9Keisuke Kuroyanagi        return -1;
459e51c6c0c62b78eaf14f92890981f9d35702b2c9Keisuke Kuroyanagi    }
469e51c6c0c62b78eaf14f92890981f9d35702b2c9Keisuke Kuroyanagi    if (!latinime::register_BinaryDictionaryUtils(env)) {
479e51c6c0c62b78eaf14f92890981f9d35702b2c9Keisuke Kuroyanagi        AKLOGE("ERROR: BinaryDictionaryUtils native registration failed");
48aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa        return -1;
498fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    }
50aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa    if (!latinime::register_DicTraverseSession(env)) {
51c4e4dfe17dd60d200b851d228ce718543900a1fcSatoshi Kataoka        AKLOGE("ERROR: DicTraverseSession native registration failed");
52aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa        return -1;
53c4e4dfe17dd60d200b851d228ce718543900a1fcSatoshi Kataoka    }
54aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa    if (!latinime::register_ProximityInfo(env)) {
559fb6f47a6a11f62d134d4d6259181ac987fc1ad3satok        AKLOGE("ERROR: ProximityInfo native registration failed");
56aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa        return -1;
578fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    }
588fbd55229243cb66c03d5ea1f79dfb39f596590dsatok    /* success -- return valid version number */
59aaefc4b30c2cfac105374eb2ae83cf34c975a0ccKen Wakasa    return JNI_VERSION_1_6;
608fbd55229243cb66c03d5ea1f79dfb39f596590dsatok}
61ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa
62ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasanamespace latinime {
63ad0c6d7b3635f0c1d92a3e4d895909234b7a2f0dKen Wakasaint registerNativeMethods(JNIEnv *env, const char *const className, const JNINativeMethod *methods,
64ad0c6d7b3635f0c1d92a3e4d895909234b7a2f0dKen Wakasa        const int numMethods) {
65ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa    jclass clazz = env->FindClass(className);
665460ea389d83722ac98abaef8a2bb9900fb571e7Ken Wakasa    if (!clazz) {
679fb6f47a6a11f62d134d4d6259181ac987fc1ad3satok        AKLOGE("Native registration unable to find class '%s'", className);
68ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa        return JNI_FALSE;
69ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa    }
7063b48311b0167179404f7b1a005218bb46359fccKen Wakasa    if (env->RegisterNatives(clazz, methods, numMethods) != 0) {
719fb6f47a6a11f62d134d4d6259181ac987fc1ad3satok        AKLOGE("RegisterNatives failed for '%s'", className);
72ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa        env->DeleteLocalRef(clazz);
73ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa        return JNI_FALSE;
74ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa    }
75ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa    env->DeleteLocalRef(clazz);
76ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa    return JNI_TRUE;
77ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa}
78ce9e52a12a6af8fca0eba42aaae24602fbd5c998Ken Wakasa} // namespace latinime
79