void JniJsValue_OnLoad(JavaVM* vm, JNIEnv* env, void* reserved) { // precache for performance and avoid attaching threads jclass localJsValueClass = env->FindClass(PKG("JsValue")); globalJsValueClass = (jclass)env->NewGlobalRef(localJsValueClass); jsValueClassCtor = env->GetMethodID(globalJsValueClass, "<init>", "(J)V"); env->DeleteLocalRef(localJsValueClass); }
static jobject JNICALL JniGetType(JNIEnv* env, jclass clazz, jlong ptr) { AdblockPlus::NotificationType type; try { type = GetNotificationPtr(ptr)->GetType(); } CATCH_THROW_AND_RETURN(env, 0) const char* enumName = 0; switch (type) { case AdblockPlus::NotificationType::NOTIFICATION_TYPE_CRITICAL: enumName = "CRITICAL"; break; case AdblockPlus::NotificationType::NOTIFICATION_TYPE_INFORMATION: enumName = "INFORMATION"; break; case AdblockPlus::NotificationType::NOTIFICATION_TYPE_QUESTION: enumName = "QUESTION"; break; default: enumName = "INVALID"; break; } JniLocalReference<jclass> enumClass( env, env->FindClass(PKG("Notification$Type"))); jfieldID enumField = env->GetStaticFieldID( *enumClass, enumName, TYP("Notification$Type")); return env->GetStaticObjectField(*enumClass, enumField); }
static jobject JNICALL JniGetType(JNIEnv* env, jclass clazz, jlong ptr) { AdblockPlus::Filter::Type type; try { type = GetFilterPtr(ptr)->GetType(); } CATCH_THROW_AND_RETURN(env, 0) const char* enumName = 0; switch (type) { case AdblockPlus::Filter::TYPE_BLOCKING: enumName = "BLOCKING"; break; case AdblockPlus::Filter::TYPE_COMMENT: enumName = "COMMENT"; break; case AdblockPlus::Filter::TYPE_ELEMHIDE: enumName = "ELEMHIDE"; break; case AdblockPlus::Filter::TYPE_ELEMHIDE_EXCEPTION: enumName = "ELEMHIDE_EXCEPTION"; break; case AdblockPlus::Filter::TYPE_EXCEPTION: enumName = "EXCEPTION"; break; default: enumName = "INVALID"; break; } JniLocalReference<jclass> enumClass(env, env->FindClass(PKG("Filter$Type"))); jfieldID enumField = env->GetStaticFieldID(*enumClass, enumName, TYP("Filter$Type")); return env->GetStaticObjectField(*enumClass, enumField); }
JniCallbackBase::JniCallbackBase(JNIEnv* env, jobject callbackObject) : callbackObject(new JniGlobalReference<jobject>(env, callbackObject)), exceptionLoggerClass(new JniGlobalReference<jclass>(env, env->FindClass(PKG("JniExceptionHandler")))) { env->GetJavaVM(&javaVM); }
void JniThrowException(JNIEnv* env, const std::string& message) { JniLocalReference<jclass> clazz(env, env->FindClass(PKG("AdblockPlusException"))); env->ThrowNew(*clazz, message.c_str()); }
jobject NewJniNotification(JNIEnv* env, const AdblockPlus::NotificationPtr& notification) { return NewJniObject(env, notification, PKG("Notification")); }
jobject NewJniSubscription(JNIEnv* env, const AdblockPlus::SubscriptionPtr& subscription) { return NewJniObject(env, subscription, PKG("Subscription")); }
jobject NewJniFilter(JNIEnv* env, const AdblockPlus::FilterPtr& filter) { return NewJniObject(env, filter, PKG("Filter")); }
JniFilterChangeCallback::JniFilterChangeCallback(JNIEnv* env, jobject callbackObject) : JniCallbackBase(env, callbackObject), jsValueClass(new JniGlobalReference<jclass>(env, env->FindClass(PKG("JsValue")))) { }
void JniLogSystem_OnLoad(JavaVM* vm, JNIEnv* env, void* reserved) { logLevelClass = new JniGlobalReference<jclass>(env, env->FindClass(PKG("LogSystem$LogLevel"))); }