diff --git a/java/src/com/android/inputmethod/latin/DicTraverseSession.java b/java/src/com/android/inputmethod/latin/DicTraverseSession.java index ae68e69dd..437876e05 100644 --- a/java/src/com/android/inputmethod/latin/DicTraverseSession.java +++ b/java/src/com/android/inputmethod/latin/DicTraverseSession.java @@ -22,20 +22,30 @@ public class DicTraverseSession { static { JniUtils.loadNativeLibrary(); } + private native long setDicTraverseSessionNative(String locale); + private native void initDicTraverseSessionNative( + long nativeDicTraverseSession, int[] previousWord, int previwousWordLength); + private native void releaseDicTraverseSessionNative(long nativeDicTraverseSession); private long mNativeDicTraverseSession; public DicTraverseSession(Locale locale) { mNativeDicTraverseSession = createNativeDicTraverseSession( locale != null ? locale.toString() : ""); + initSession(); } public long getSession() { return mNativeDicTraverseSession; } - private native long setDicTraverseSessionNative(String locale); - private native void releaseDicTraverseSessionNative(long nativeDicTraverseSession); + public void initSession() { + initSession(null, 0); + } + + public void initSession(int[] previousWord, int previousWordLength) { + initDicTraverseSessionNative(mNativeDicTraverseSession, previousWord, previousWordLength); + } private final long createNativeDicTraverseSession(String locale) { return setDicTraverseSessionNative(locale); diff --git a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp index e7965377c..0f5c39642 100644 --- a/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp +++ b/native/jni/com_android_inputmethod_latin_DicTraverseSession.cpp @@ -23,6 +23,8 @@ namespace latinime { void *(*DicTraverseWrapper::sDicTraverseSessionFactoryMethod)() = 0; void (*DicTraverseWrapper::sDicTraverseSessionReleaseMethod)(void *) = 0; +void (*DicTraverseWrapper::sDicTraverseSessionInitMethod)( + JNIEnv *, void *, const jintArray, const jint) = 0; static jlong latinime_setDicTraverseSession(JNIEnv *env, jobject object, jstring localejStr) { @@ -30,15 +32,21 @@ static jlong latinime_setDicTraverseSession(JNIEnv *env, jobject object, return reinterpret_cast(traverseSession); } +static void latinime_initDicTraverseSession(JNIEnv *env, jlong traverseSession, + jintArray previousWord, jint previousWordLength) { + void *ts = reinterpret_cast(traverseSession); + DicTraverseWrapper::initDicTraverseSession(env, ts, previousWord, previousWordLength); +} + static void latinime_DicTraverseSession_release( JNIEnv *env, jobject object, jlong traverseSession) { - void *pi = reinterpret_cast(traverseSession); - if (!pi) return; - DicTraverseWrapper::releaseDicTraverseSession(pi); + void *ts = reinterpret_cast(traverseSession); + DicTraverseWrapper::releaseDicTraverseSession(ts); } static JNINativeMethod sMethods[] = { {"setDicTraverseSessionNative", "(Ljava/lang/String;)J", (void*)latinime_setDicTraverseSession}, + {"initDicTraverseSessionNative", "(J[II)V", (void*)latinime_initDicTraverseSession}, {"releaseDicTraverseSessionNative", "(J)V", (void*)latinime_DicTraverseSession_release} }; diff --git a/native/jni/com_android_inputmethod_latin_DicTraverseSession.h b/native/jni/com_android_inputmethod_latin_DicTraverseSession.h index a84fe78cc..a76815d7f 100644 --- a/native/jni/com_android_inputmethod_latin_DicTraverseSession.h +++ b/native/jni/com_android_inputmethod_latin_DicTraverseSession.h @@ -31,6 +31,12 @@ class DicTraverseWrapper { } return 0; } + static void initDicTraverseSession(JNIEnv *env, void *traverseSession, + const jintArray prevWord, const jint prevWordLength) { + if (sDicTraverseSessionInitMethod) { + sDicTraverseSessionInitMethod(env, traverseSession, prevWord, prevWordLength); + } + } static void releaseDicTraverseSession(void *traverseSession) { if (sDicTraverseSessionReleaseMethod) { sDicTraverseSessionReleaseMethod(traverseSession); @@ -39,6 +45,7 @@ class DicTraverseWrapper { private: DISALLOW_IMPLICIT_CONSTRUCTORS(DicTraverseWrapper); static void *(*sDicTraverseSessionFactoryMethod)(); + static void (*sDicTraverseSessionInitMethod)(JNIEnv *, void *, const jintArray, const jint); static void (*sDicTraverseSessionReleaseMethod)(void *); }; int register_DicTraverseSession(JNIEnv *env);