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])); |
+} |