Skip to content

Commit 55caa0f

Browse files
SessionHero01SessionHero01
andauthored
Update AGP & provide a logging interface (#13)
Co-authored-by: SessionHero01 <[email protected]>
1 parent d49511b commit 55caa0f

File tree

3 files changed

+50
-45
lines changed

3 files changed

+50
-45
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
agp = "8.10.0"
2+
agp = "8.10.1"
33
kotlin = "2.1.10"
44

55
[libraries]

library/src/main/cpp/logging.cpp

Lines changed: 31 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,40 @@
11
#include <jni.h>
2-
#include <android/log.h>
32
#include <string_view>
43
#include <functional>
54

65
#include "session/logging.hpp"
76
#include "session/log_level.h"
87

9-
#define LOG_TAG "LibSession"
10-
11-
extern "C" JNIEXPORT void JNICALL
12-
Java_network_loki_messenger_libsession_1util_util_Logger_initLogger(JNIEnv* env, jclass clazz) {
13-
session::add_logger([](std::string_view msg, std::string_view category, session::LogLevel level) {
14-
android_LogPriority prio = ANDROID_LOG_VERBOSE;
15-
16-
switch (level.level) {
17-
case LOG_LEVEL_TRACE:
18-
prio = ANDROID_LOG_VERBOSE;
19-
break;
20-
21-
case LOG_LEVEL_DEBUG:
22-
prio = ANDROID_LOG_DEBUG;
23-
break;
24-
25-
case LOG_LEVEL_INFO:
26-
prio = ANDROID_LOG_INFO;
27-
break;
28-
29-
case LOG_LEVEL_WARN:
30-
prio = ANDROID_LOG_WARN;
31-
break;
32-
33-
case LOG_LEVEL_ERROR:
34-
case LOG_LEVEL_CRITICAL:
35-
prio = ANDROID_LOG_ERROR;
36-
break;
37-
38-
default:
39-
prio = ANDROID_LOG_INFO;
40-
break;
8+
#include "jni_utils.h"
9+
10+
using namespace jni_utils;
11+
12+
extern "C"
13+
JNIEXPORT void JNICALL
14+
Java_network_loki_messenger_libsession_1util_util_Logger_00024Companion_addLogger(JNIEnv *env, jclass clazz,
15+
jobject logger) {
16+
JavaVM *vm = nullptr;
17+
env->GetJavaVM(&vm);
18+
if (!vm) {
19+
env->ThrowNew(env->FindClass("java/lang/RuntimeException"), "Failed to get JavaVM");
20+
return;
21+
}
22+
23+
jmethodID logMethod = env->GetMethodID(env->GetObjectClass(logger), "log",
24+
"(Ljava/lang/String;Ljava/lang/String;I)V");
25+
26+
auto loggerRef = env->NewGlobalRef(logger);
27+
session::add_logger([vm, logMethod, loggerRef](std::string_view msg, std::string_view category, session::LogLevel level) {
28+
JNIEnv *env = nullptr;
29+
vm->AttachCurrentThread(&env, nullptr);
30+
if (!env) {
31+
return; // Failed to attach thread, cannot log
4132
}
4233

43-
__android_log_print(prio, LOG_TAG, "%.*s [%.*s]",
44-
static_cast<int>(msg.size()), msg.data(),
45-
static_cast<int>(category.size()), category.data());
46-
});
47-
}
34+
env->CallVoidMethod(loggerRef, logMethod,
35+
JavaLocalRef(env, env->NewStringUTF(msg.data())).get(),
36+
JavaLocalRef(env, env->NewStringUTF(category.data())).get(),
37+
static_cast<jint>(level.level)
38+
);
39+
});
40+
}
Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
package network.loki.messenger.libsession_util.util
22

3-
object Logger {
3+
typealias LogLevel = Int
44

5-
init {
6-
System.loadLibrary("session_util")
7-
}
5+
interface Logger {
6+
fun log(message: String, category: String, level: LogLevel)
7+
8+
companion object {
9+
const val LOG_LEVEL_TRACE: LogLevel = 0
10+
const val LOG_LEVEL_DEBUG: LogLevel = 1
11+
const val LOG_LEVEL_INFO: LogLevel = 2
12+
const val LOG_LEVEL_WARN: LogLevel = 3
13+
const val LOG_LEVEL_ERROR: LogLevel = 4
14+
const val LOG_LEVEL_CRITICAL: LogLevel = 5
15+
const val LOG_LEVEL_OFF: LogLevel = 6
816

9-
@JvmStatic
10-
external fun initLogger()
17+
init {
18+
System.loadLibrary("session_util")
19+
}
20+
21+
external fun addLogger(logger: Logger)
22+
}
1123
}

0 commit comments

Comments
 (0)