From 77674b0730575813abd31ccf57fdb7c5e3b698ef Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 18 Jan 2021 22:57:15 +0100 Subject: [PATCH] cld3 binding --- .../main/java/eu/faircode/email/TextHelper.java | 12 ++++++++++++ app/src/main/jni/fairemail.cc | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/TextHelper.java b/app/src/main/java/eu/faircode/email/TextHelper.java index aef3e28bd0..7e9ed51d7e 100644 --- a/app/src/main/java/eu/faircode/email/TextHelper.java +++ b/app/src/main/java/eu/faircode/email/TextHelper.java @@ -41,11 +41,23 @@ import java.util.Locale; import java.util.Set; public class TextHelper { + static { + System.loadLibrary("fairemail"); + } + + private static native String jni_language(byte[] octets); + static Locale detectLanguage(Context context, String text) { // Why not ML kit? https://developers.google.com/ml-kit/terms if (TextUtils.isEmpty(text)) return null; + if (BuildConfig.DEBUG) { + // https://github.com/google/cld3 + String lang = jni_language(text.getBytes()); + return Locale.forLanguageTag(lang); + } + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) return null; diff --git a/app/src/main/jni/fairemail.cc b/app/src/main/jni/fairemail.cc index 886594e0cd..89918230c4 100644 --- a/app/src/main/jni/fairemail.cc +++ b/app/src/main/jni/fairemail.cc @@ -7,6 +7,7 @@ #include #include "compact_enc_det/compact_enc_det.h" +#include "cld_3/src/nnet_language_identifier.h" void log_android(int prio, const char *fmt, ...) { if (prio >= ANDROID_LOG_DEBUG) { @@ -57,6 +58,22 @@ Java_eu_faircode_email_CharsetHelper_jni_1detect(JNIEnv *env, jclass type, jbyte (jboolean) is_reliable); } +extern "C" +JNIEXPORT jstring JNICALL +Java_eu_faircode_email_TextHelper_jni_1language(JNIEnv *env, jclass clazz, jbyteArray _octets) { + int len = env->GetArrayLength(_octets); + jbyte *octets = env->GetByteArrayElements(_octets, nullptr); + + std::string text(reinterpret_cast(octets), len); + + chrome_lang_id::NNetLanguageIdentifier lang_id(0, 1000); + const chrome_lang_id::NNetLanguageIdentifier::Result result = lang_id.FindLanguage(text); + + env->ReleaseByteArrayElements(_octets, octets, JNI_ABORT); + + return env->NewStringUTF(result.language.c_str()); +} + extern "C" JNIEXPORT jint JNICALL Java_eu_faircode_email_EmailService_jni_1socket_1keep_1alive(