| Index: adblock-android/jni/JniUpdater.cpp |
| diff --git a/adblock-android/jni/JniUpdater.cpp b/adblock-android/jni/JniUpdater.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0e9a7150d64b1eaedeba02a3c6aca8f5534061c5 |
| --- /dev/null |
| +++ b/adblock-android/jni/JniUpdater.cpp |
| @@ -0,0 +1,122 @@ |
| +/* |
| + * This file is part of Adblock Plus <https://adblockplus.org/>, |
| + * Copyright (C) 2006-present eyeo GmbH |
| + * |
| + * Adblock Plus is free software: you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License version 3 as |
| + * published by the Free Software Foundation. |
| + * |
| + * Adblock Plus is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| + */ |
| + |
| +#include <AdblockPlus.h> |
| +#include "Utils.h" |
| +#include "JniCallbacks.h" |
| +#include <thread> |
| +#include "JniPlatform.h" |
| + |
| +namespace |
| +{ |
| + AdblockPlus::Updater& GetUpdaterRef(jlong jniPlatformPtr) |
| + { |
| + return JniLongToTypePtr<JniPlatform>(jniPlatformPtr)->platform->GetUpdater(); |
| + } |
| +} |
| + |
| +static void JNICALL JniRemoveUpdateAvailableCallback(JNIEnv* env, jclass clazz, |
| + jlong ptr) |
| +{ |
| + AdblockPlus::Updater& engine = GetUpdaterRef(ptr); |
| + try |
| + { |
| + engine.RemoveUpdateAvailableCallback(); |
| + } |
| + CATCH_AND_THROW(env) |
| +} |
| + |
| +static void JNICALL JniSetUpdateAvailableCallback(JNIEnv* env, jclass clazz, |
| + jlong ptr, jlong callbackPtr) |
| +{ |
| + AdblockPlus::Updater& updater = GetUpdaterRef(ptr); |
| + JniUpdateAvailableCallback* const callback = |
| + JniLongToTypePtr<JniUpdateAvailableCallback>(callbackPtr); |
| + |
| + const AdblockPlus::Updater::UpdateAvailableCallback updateAvailableCallback = |
| + std::bind(&JniUpdateAvailableCallback::Callback, callback, |
| + std::placeholders::_1); |
| + try |
| + { |
| + updater.SetUpdateAvailableCallback(updateAvailableCallback); |
| + } |
| + CATCH_AND_THROW(env) |
| +} |
| + |
| +static void JNICALL JniForceUpdateCheck(JNIEnv* env, jclass clazz, jlong ptr, jlong updaterPtr) |
| +{ |
| + AdblockPlus::Updater& updater = GetUpdaterRef(ptr); |
| + JniUpdateCheckDoneCallback* callback = |
| + JniLongToTypePtr<JniUpdateCheckDoneCallback>(updaterPtr); |
| + |
| + AdblockPlus::Updater::UpdateCheckDoneCallback |
| + updateCheckDoneCallback = 0; |
| + |
| + if (updaterPtr) |
| + { |
| + updateCheckDoneCallback = |
| + std::bind(&JniUpdateCheckDoneCallback::Callback, callback, |
| + std::placeholders::_1); |
| + } |
| + |
| + try |
| + { |
| + updater.ForceUpdateCheck(updateCheckDoneCallback); |
| + } |
| + CATCH_AND_THROW(env) |
| +} |
| + |
| +static jobject JNICALL JniGetPref(JNIEnv* env, jclass clazz, jlong ptr, jstring jPref) |
| +{ |
| + AdblockPlus::Updater& updater = GetUpdaterRef(ptr); |
| + |
| + std::string pref = JniJavaToStdString(env, jPref); |
| + |
| + try |
| + { |
| + return NewJniJsValue(env, updater.GetPref(pref)); |
| + } |
| + CATCH_THROW_AND_RETURN(env, 0) |
| +} |
| + |
| +static void JNICALL JniSetPref(JNIEnv* env, jclass clazz, jlong ptr, jstring jPref, jlong jsValue) |
| +{ |
| + AdblockPlus::Updater& updater = GetUpdaterRef(ptr); |
| + |
| + std::string pref = JniJavaToStdString(env, jPref); |
| + const AdblockPlus::JsValue& value = JniGetJsValue(jsValue); |
| + |
| + try |
| + { |
| + updater.SetPref(pref, value); |
| + } |
| + CATCH_AND_THROW(env) |
| +} |
| + |
| +static JNINativeMethod methods[] = |
| +{ |
| + { (char*)"setUpdateAvailableCallback", (char*)"(JJ)V", (void*)JniSetUpdateAvailableCallback }, |
| + { (char*)"removeUpdateAvailableCallback", (char*)"(J)V", (void*)JniRemoveUpdateAvailableCallback }, |
| + { (char*)"forceUpdateCheck", (char*)"(JJ)V", (void*)JniForceUpdateCheck }, |
| + { (char*)"getPref", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*)JniGetPref }, |
| + { (char*)"setPref", (char*)"(JLjava/lang/String;J)V", (void*)JniSetPref } |
| +}; |
| + |
| +extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_libadblockplus_Updater_registerNatives(JNIEnv *env, jclass clazz) |
| +{ |
| + env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])); |
| +} |