From 9ead7ac646dfc78174a388506841f20c820c5510 Mon Sep 17 00:00:00 2001 From: SessionHero01 Date: Mon, 23 Jun 2025 15:59:56 +1000 Subject: [PATCH] Update AGP & provide a logging interface --- gradle/libs.versions.toml | 2 +- library/src/main/cpp/logging.cpp | 69 +++++++++---------- .../messenger/libsession_util/util/Logger.kt | 24 +++++-- 3 files changed, 50 insertions(+), 45 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 29b309d..d47521d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.10.0" +agp = "8.10.1" kotlin = "2.1.10" [libraries] diff --git a/library/src/main/cpp/logging.cpp b/library/src/main/cpp/logging.cpp index 3f39b4a..547df2a 100644 --- a/library/src/main/cpp/logging.cpp +++ b/library/src/main/cpp/logging.cpp @@ -1,47 +1,40 @@ #include -#include #include #include #include "session/logging.hpp" #include "session/log_level.h" -#define LOG_TAG "LibSession" - -extern "C" JNIEXPORT void JNICALL -Java_network_loki_messenger_libsession_1util_util_Logger_initLogger(JNIEnv* env, jclass clazz) { - session::add_logger([](std::string_view msg, std::string_view category, session::LogLevel level) { - android_LogPriority prio = ANDROID_LOG_VERBOSE; - - switch (level.level) { - case LOG_LEVEL_TRACE: - prio = ANDROID_LOG_VERBOSE; - break; - - case LOG_LEVEL_DEBUG: - prio = ANDROID_LOG_DEBUG; - break; - - case LOG_LEVEL_INFO: - prio = ANDROID_LOG_INFO; - break; - - case LOG_LEVEL_WARN: - prio = ANDROID_LOG_WARN; - break; - - case LOG_LEVEL_ERROR: - case LOG_LEVEL_CRITICAL: - prio = ANDROID_LOG_ERROR; - break; - - default: - prio = ANDROID_LOG_INFO; - break; +#include "jni_utils.h" + +using namespace jni_utils; + +extern "C" +JNIEXPORT void JNICALL +Java_network_loki_messenger_libsession_1util_util_Logger_00024Companion_addLogger(JNIEnv *env, jclass clazz, + jobject logger) { + JavaVM *vm = nullptr; + env->GetJavaVM(&vm); + if (!vm) { + env->ThrowNew(env->FindClass("java/lang/RuntimeException"), "Failed to get JavaVM"); + return; + } + + jmethodID logMethod = env->GetMethodID(env->GetObjectClass(logger), "log", + "(Ljava/lang/String;Ljava/lang/String;I)V"); + + auto loggerRef = env->NewGlobalRef(logger); + session::add_logger([vm, logMethod, loggerRef](std::string_view msg, std::string_view category, session::LogLevel level) { + JNIEnv *env = nullptr; + vm->AttachCurrentThread(&env, nullptr); + if (!env) { + return; // Failed to attach thread, cannot log } - __android_log_print(prio, LOG_TAG, "%.*s [%.*s]", - static_cast(msg.size()), msg.data(), - static_cast(category.size()), category.data()); -}); -} \ No newline at end of file + env->CallVoidMethod(loggerRef, logMethod, + JavaLocalRef(env, env->NewStringUTF(msg.data())).get(), + JavaLocalRef(env, env->NewStringUTF(category.data())).get(), + static_cast(level.level) + ); + }); +} diff --git a/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt b/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt index afb20e2..60ded2d 100644 --- a/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt +++ b/library/src/main/java/network/loki/messenger/libsession_util/util/Logger.kt @@ -1,11 +1,23 @@ package network.loki.messenger.libsession_util.util -object Logger { +typealias LogLevel = Int - init { - System.loadLibrary("session_util") - } +interface Logger { + fun log(message: String, category: String, level: LogLevel) + + companion object { + const val LOG_LEVEL_TRACE: LogLevel = 0 + const val LOG_LEVEL_DEBUG: LogLevel = 1 + const val LOG_LEVEL_INFO: LogLevel = 2 + const val LOG_LEVEL_WARN: LogLevel = 3 + const val LOG_LEVEL_ERROR: LogLevel = 4 + const val LOG_LEVEL_CRITICAL: LogLevel = 5 + const val LOG_LEVEL_OFF: LogLevel = 6 - @JvmStatic - external fun initLogger() + init { + System.loadLibrary("session_util") + } + + external fun addLogger(logger: Logger) + } } \ No newline at end of file