diff --git a/jni/NativeFormats/JavaNativeFormatPlugin.cpp b/jni/NativeFormats/JavaNativeFormatPlugin.cpp index c60875315..16645fbdc 100644 --- a/jni/NativeFormats/JavaNativeFormatPlugin.cpp +++ b/jni/NativeFormats/JavaNativeFormatPlugin.cpp @@ -28,13 +28,11 @@ #include "fbreader/src/library/Book.h" #include "fbreader/src/library/Tag.h" -static shared_ptr findCppPlugin(JNIEnv *env, jobject base) { - jstring fileTypeJava = AndroidUtil::Method_NativeFormatPlugin_supportedFileType->call(base); - const std::string fileTypeCpp = AndroidUtil::fromJavaString(env, fileTypeJava); - env->DeleteLocalRef(fileTypeJava); - shared_ptr plugin = PluginCollection::Instance().pluginByType(fileTypeCpp); +static shared_ptr findCppPlugin(jobject base) { + const std::string fileType = AndroidUtil::Method_NativeFormatPlugin_supportedFileType->callForCppString(base); + shared_ptr plugin = PluginCollection::Instance().pluginByType(fileType); if (plugin.isNull()) { - AndroidUtil::throwRuntimeException("Native FormatPlugin instance is NULL for type " + fileTypeCpp); + AndroidUtil::throwRuntimeException("Native FormatPlugin instance is NULL for type " + fileType); } return plugin; } @@ -101,7 +99,7 @@ void fillLanguageAndEncoding(JNIEnv* env, jobject javaBook, Book &book) { extern "C" JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_readMetaInfoNative(JNIEnv* env, jobject thiz, jobject javaBook) { - shared_ptr plugin = findCppPlugin(env, thiz); + shared_ptr plugin = findCppPlugin(thiz); if (plugin.isNull()) { return JNI_FALSE; } @@ -118,7 +116,7 @@ JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPl extern "C" JNIEXPORT void JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_detectLanguageAndEncoding(JNIEnv* env, jobject thiz, jobject javaBook) { - shared_ptr plugin = findCppPlugin(env, thiz); + shared_ptr plugin = findCppPlugin(thiz); if (plugin.isNull()) { return; } @@ -240,7 +238,7 @@ static bool initTOC(JNIEnv *env, jobject javaModel, BookModel &model) { extern "C" JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_readModelNative(JNIEnv* env, jobject thiz, jobject javaModel) { - shared_ptr plugin = findCppPlugin(env, thiz); + shared_ptr plugin = findCppPlugin(thiz); if (plugin.isNull()) { return JNI_FALSE; } @@ -287,14 +285,12 @@ JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPl extern "C" JNIEXPORT void JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_readCoverInternal(JNIEnv* env, jobject thiz, jobject file, jobjectArray box) { - shared_ptr plugin = findCppPlugin(env, thiz); + shared_ptr plugin = findCppPlugin(thiz); if (plugin.isNull()) { return; } - jstring javaPath = AndroidUtil::Method_ZLFile_getPath->call(file); - const std::string path = AndroidUtil::fromJavaString(env, javaPath); - env->DeleteLocalRef(javaPath); + const std::string path = AndroidUtil::Method_ZLFile_getPath->callForCppString(file); shared_ptr image = plugin->coverImage(ZLFile(path)); if (!image.isNull()) { diff --git a/jni/NativeFormats/fbreader/src/library/Book.cpp b/jni/NativeFormats/fbreader/src/library/Book.cpp index f77b1fa50..6d1e65fa9 100644 --- a/jni/NativeFormats/fbreader/src/library/Book.cpp +++ b/jni/NativeFormats/fbreader/src/library/Book.cpp @@ -85,25 +85,13 @@ shared_ptr Book::loadFromFile(const ZLFile &file) { */ shared_ptr Book::loadFromJavaBook(JNIEnv *env, jobject javaBook) { - jstring javaString; - jobject javaFile = AndroidUtil::Field_Book_File->value(javaBook); - javaString = AndroidUtil::Method_ZLFile_getPath->call(javaFile); - const std::string path = AndroidUtil::fromJavaString(env, javaString); - env->DeleteLocalRef(javaString); + const std::string path = AndroidUtil::Method_ZLFile_getPath->callForCppString(javaFile); env->DeleteLocalRef(javaFile); - javaString = AndroidUtil::Method_Book_getTitle->call(javaBook); - const std::string title = AndroidUtil::fromJavaString(env, javaString); - env->DeleteLocalRef(javaString); - - javaString = AndroidUtil::Method_Book_getLanguage->call(javaBook); - const std::string language = AndroidUtil::fromJavaString(env, javaString); - env->DeleteLocalRef(javaString); - - javaString = AndroidUtil::Method_Book_getEncodingNoDetection->call(javaBook); - const std::string encoding = AndroidUtil::fromJavaString(env, javaString); - env->DeleteLocalRef(javaString); + const std::string title = AndroidUtil::Method_Book_getTitle->callForCppString(javaBook); + const std::string language = AndroidUtil::Method_Book_getLanguage->callForCppString(javaBook); + const std::string encoding = AndroidUtil::Method_Book_getEncodingNoDetection->callForCppString(javaBook); return createBook(ZLFile(path), 0, encoding, language, title); } diff --git a/jni/NativeFormats/util/JniEnvelope.cpp b/jni/NativeFormats/util/JniEnvelope.cpp index 58a924cc9..0a10b1301 100644 --- a/jni/NativeFormats/util/JniEnvelope.cpp +++ b/jni/NativeFormats/util/JniEnvelope.cpp @@ -174,7 +174,7 @@ static JavaPrimitiveType FakeString("Ljava/lang/String;"); StringMethod::StringMethod(const JavaClass &cls, const std::string &name, const std::string ¶meters) : Method(cls, name, FakeString, parameters) { } -jstring StringMethod::call(jobject base, ...) { +jstring StringMethod::callForJavaString(jobject base, ...) { ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StringMethod " + myName); va_list lst; va_start(lst, base); diff --git a/jni/NativeFormats/util/JniEnvelope.h b/jni/NativeFormats/util/JniEnvelope.h index 8187168b6..877f8bc76 100644 --- a/jni/NativeFormats/util/JniEnvelope.h +++ b/jni/NativeFormats/util/JniEnvelope.h @@ -181,7 +181,7 @@ class StringMethod : public Method { public: StringMethod(const JavaClass &cls, const std::string &name, const std::string ¶meters); - jstring call(jobject base, ...); + jstring callForJavaString(jobject base, ...); std::string callForCppString(jobject base, ...); }; diff --git a/jni/NativeFormats/zlibrary/core/src/util/ZLUnicodeUtil.cpp b/jni/NativeFormats/zlibrary/core/src/util/ZLUnicodeUtil.cpp index 79063e34e..cdbf774be 100644 --- a/jni/NativeFormats/zlibrary/core/src/util/ZLUnicodeUtil.cpp +++ b/jni/NativeFormats/zlibrary/core/src/util/ZLUnicodeUtil.cpp @@ -474,7 +474,7 @@ std::string ZLUnicodeUtil::toLower(const std::string &utf8String) { JNIEnv *env = AndroidUtil::getEnv(); jstring javaString = AndroidUtil::createJavaString(env, utf8String); - jstring lowerCased = AndroidUtil::Method_java_lang_String_toLowerCase->call(javaString); + jstring lowerCased = AndroidUtil::Method_java_lang_String_toLowerCase->callForJavaString(javaString); if (javaString == lowerCased) { env->DeleteLocalRef(lowerCased); env->DeleteLocalRef(javaString); @@ -518,7 +518,7 @@ std::string ZLUnicodeUtil::toUpper(const std::string &utf8String) { JNIEnv *env = AndroidUtil::getEnv(); jstring javaString = AndroidUtil::createJavaString(env, utf8String); - jstring upperCased = AndroidUtil::Method_java_lang_String_toUpperCase->call(javaString); + jstring upperCased = AndroidUtil::Method_java_lang_String_toUpperCase->callForJavaString(javaString); if (javaString == upperCased) { env->DeleteLocalRef(upperCased); env->DeleteLocalRef(javaString); diff --git a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp index b99f07770..9ac740c0b 100644 --- a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp +++ b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp @@ -67,14 +67,9 @@ void JavaFSDir::collectFiles(std::vector &names, bool includeSymlin const jsize size = env->GetArrayLength(array); for (jsize i = 0; i < size; ++i) { jobject file = env->GetObjectArrayElement(array, i); - jstring javaPath = AndroidUtil::Method_ZLFile_getPath->call(file); + std::string path = AndroidUtil::Method_ZLFile_getPath->callForCppString(file); env->DeleteLocalRef(file); - const char *chars = env->GetStringUTFChars(javaPath, 0); - std::string path(chars); - env->ReleaseStringUTFChars(javaPath, chars); - env->DeleteLocalRef(javaPath); - size_t index = path.rfind('/'); if (index != std::string::npos) { path = path.substr(index + 1); diff --git a/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp b/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp index 8679292cf..e79ae910d 100644 --- a/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp +++ b/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp @@ -45,11 +45,7 @@ void ZLAndroidLibraryImplementation::init(int &argc, char **&argv) { std::string ZLibrary::Language() { JNIEnv *env = AndroidUtil::getEnv(); jobject locale = AndroidUtil::StaticMethod_java_util_Locale_getDefault->call(); - jstring javaLang = AndroidUtil::Method_java_util_Locale_getLanguage->call(locale); - const char *langData = env->GetStringUTFChars(javaLang, 0); - std::string lang(langData); - env->ReleaseStringUTFChars(javaLang, langData); - env->DeleteLocalRef(javaLang); + std::string lang = AndroidUtil::Method_java_util_Locale_getLanguage->callForCppString(locale); env->DeleteLocalRef(locale); return lang; } @@ -57,11 +53,7 @@ std::string ZLibrary::Language() { std::string ZLibrary::Version() { JNIEnv *env = AndroidUtil::getEnv(); jobject zlibrary = AndroidUtil::StaticMethod_ZLibrary_Instance->call(); - jstring javaVersion = (jstring)AndroidUtil::Method_ZLibrary_getVersionName->call(zlibrary); - const char *versionData = env->GetStringUTFChars(javaVersion, 0); - std::string version(versionData); - env->ReleaseStringUTFChars(javaVersion, versionData); - env->DeleteLocalRef(javaVersion); + std::string version = AndroidUtil::Method_ZLibrary_getVersionName->callForCppString(zlibrary); env->DeleteLocalRef(zlibrary); return version; }