// This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h #include "CKeyEventWrapper.h" #include "os.h" namespace irr { namespace jni { jclass CKeyEventWrapper::Class_KeyEvent = 0; jmethodID CKeyEventWrapper::Method_constructor = 0; jmethodID CKeyEventWrapper::Method_getUnicodeChar = 0; CKeyEventWrapper::CKeyEventWrapper(JNIEnv *jniEnv, int action, int code) : JniEnv(jniEnv), JniKeyEvent(0) { if (JniEnv) { if (!Class_KeyEvent) { // Find java classes & functions on first call os::Printer::log("CKeyEventWrapper first initialize", ELL_DEBUG); jclass localClass = JniEnv->FindClass("android/view/KeyEvent"); if (localClass) { Class_KeyEvent = reinterpret_cast(JniEnv->NewGlobalRef(localClass)); } Method_constructor = JniEnv->GetMethodID(Class_KeyEvent, "", "(II)V"); Method_getUnicodeChar = JniEnv->GetMethodID(Class_KeyEvent, "getUnicodeChar", "(I)I"); } if (Class_KeyEvent && Method_constructor) { JniKeyEvent = JniEnv->NewObject(Class_KeyEvent, Method_constructor, action, code); } else { os::Printer::log("CKeyEventWrapper didn't find JNI classes/methods", ELL_WARNING); } } } CKeyEventWrapper::~CKeyEventWrapper() { JniEnv->DeleteLocalRef(JniKeyEvent); } int CKeyEventWrapper::getUnicodeChar(int metaState) { return JniEnv->CallIntMethod(JniKeyEvent, Method_getUnicodeChar, metaState); } } // namespace jni } // namespace irr