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