mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 09:49:19 +02:00
JavaClass class is used widely
This commit is contained in:
parent
4f6ef22b33
commit
18e14a29de
8 changed files with 110 additions and 141 deletions
|
@ -72,11 +72,11 @@ void PluginCollection::deleteInstance() {
|
||||||
|
|
||||||
PluginCollection::PluginCollection() {
|
PluginCollection::PluginCollection() {
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
JNIEnv *env = AndroidUtil::getEnv();
|
||||||
jclass cls = env->FindClass(AndroidUtil::Class_PluginCollection);
|
jobject instance = AndroidUtil::StaticMethod_PluginCollection_Instance->call(
|
||||||
jobject instance = AndroidUtil::StaticMethod_PluginCollection_Instance->call(cls);
|
AndroidUtil::Class_PluginCollection->j()
|
||||||
|
);
|
||||||
myJavaInstance = env->NewGlobalRef(instance);
|
myJavaInstance = env->NewGlobalRef(instance);
|
||||||
env->DeleteLocalRef(instance);
|
env->DeleteLocalRef(instance);
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginCollection::~PluginCollection() {
|
PluginCollection::~PluginCollection() {
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
#include "Library.h"
|
#include "Library.h"
|
||||||
|
|
||||||
|
|
||||||
shared_ptr<Library> Library::ourInstance;
|
shared_ptr<Library> Library::ourInstance;
|
||||||
|
|
||||||
Library &Library::Instance() {
|
Library &Library::Instance() {
|
||||||
|
@ -33,20 +32,14 @@ Library &Library::Instance() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Library::Library() {
|
Library::Library() {
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
|
||||||
jclass paths = env->FindClass(AndroidUtil::Class_Paths);
|
|
||||||
myPathsClass = (jclass)env->NewGlobalRef(paths);
|
|
||||||
env->DeleteLocalRef(paths);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Library::~Library() {
|
Library::~Library() {
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
|
||||||
env->DeleteGlobalRef(myPathsClass);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Library::cacheDirectory() const {
|
std::string Library::cacheDirectory() const {
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
JNIEnv *env = AndroidUtil::getEnv();
|
||||||
jstring res = (jstring)AndroidUtil::StaticMethod_Paths_cacheDirectory->call(myPathsClass);
|
jstring res = (jstring)AndroidUtil::StaticMethod_Paths_cacheDirectory->call(AndroidUtil::Class_Paths->j());
|
||||||
const char *data = env->GetStringUTFChars(res, 0);
|
const char *data = env->GetStringUTFChars(res, 0);
|
||||||
std::string str(data);
|
std::string str(data);
|
||||||
env->ReleaseStringUTFChars(res, data);
|
env->ReleaseStringUTFChars(res, data);
|
||||||
|
|
|
@ -20,13 +20,10 @@
|
||||||
#ifndef __LIBRARY_H__
|
#ifndef __LIBRARY_H__
|
||||||
#define __LIBRARY_H__
|
#define __LIBRARY_H__
|
||||||
|
|
||||||
#include <jni.h>
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <shared_ptr.h>
|
#include <shared_ptr.h>
|
||||||
|
|
||||||
|
|
||||||
class Library {
|
class Library {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -42,9 +39,6 @@ public:
|
||||||
~Library();
|
~Library();
|
||||||
|
|
||||||
std::string cacheDirectory() const;
|
std::string cacheDirectory() const;
|
||||||
|
|
||||||
private:
|
|
||||||
jclass myPathsClass;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __LIBRARY_H__ */
|
#endif /* __LIBRARY_H__ */
|
||||||
|
|
|
@ -138,11 +138,9 @@ jobject Tag::javaTag(JNIEnv *env) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject javaName = env->NewStringUTF(myName.c_str());
|
jobject javaName = env->NewStringUTF(myName.c_str());
|
||||||
jclass cls = env->FindClass(AndroidUtil::Class_Tag);
|
jobject tag = AndroidUtil::StaticMethod_Tag_getTag->call(AndroidUtil::Class_Tag->j(), parentTag, javaName);
|
||||||
jobject tag = AndroidUtil::StaticMethod_Tag_getTag->call(cls, parentTag, javaName);
|
|
||||||
myJavaTag = env->NewGlobalRef(tag);
|
myJavaTag = env->NewGlobalRef(tag);
|
||||||
env->DeleteLocalRef(tag);
|
env->DeleteLocalRef(tag);
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
env->DeleteLocalRef(javaName);
|
env->DeleteLocalRef(javaName);
|
||||||
return myJavaTag;
|
return myJavaTag;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,23 +25,24 @@
|
||||||
|
|
||||||
JavaVM *AndroidUtil::ourJavaVM = 0;
|
JavaVM *AndroidUtil::ourJavaVM = 0;
|
||||||
|
|
||||||
|
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_RuntimeException;
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_String;
|
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_String;
|
||||||
const char * const AndroidUtil::Class_java_util_Collection = "java/util/Collection";
|
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Collection;
|
||||||
const char * const AndroidUtil::Class_java_util_Locale = "java/util/Locale";
|
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Locale;
|
||||||
const char * const AndroidUtil::Class_java_io_InputStream = "java/io/InputStream";
|
shared_ptr<JavaClass> AndroidUtil::Class_java_io_InputStream;
|
||||||
const char * const AndroidUtil::Class_ZLibrary = "org/geometerplus/zlibrary/core/library/ZLibrary";
|
shared_ptr<JavaClass> AndroidUtil::Class_ZLibrary;
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_NativeFormatPlugin;
|
shared_ptr<JavaClass> AndroidUtil::Class_NativeFormatPlugin;
|
||||||
const char * const AndroidUtil::Class_PluginCollection = "org/geometerplus/fbreader/formats/PluginCollection";
|
shared_ptr<JavaClass> AndroidUtil::Class_PluginCollection;
|
||||||
const char * const AndroidUtil::Class_Encoding = "org/geometerplus/zlibrary/core/encodings/Encoding";
|
shared_ptr<JavaClass> AndroidUtil::Class_Encoding;
|
||||||
const char * const AndroidUtil::Class_EncodingConverter = "org/geometerplus/zlibrary/core/encodings/EncodingConverter";
|
shared_ptr<JavaClass> AndroidUtil::Class_EncodingConverter;
|
||||||
const char * const AndroidUtil::Class_JavaEncodingCollection = "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection";
|
shared_ptr<JavaClass> AndroidUtil::Class_JavaEncodingCollection;
|
||||||
const char * const AndroidUtil::Class_Paths = "org/geometerplus/fbreader/Paths";
|
shared_ptr<JavaClass> AndroidUtil::Class_Paths;
|
||||||
const char * const AndroidUtil::Class_ZLFile = "org/geometerplus/zlibrary/core/filesystem/ZLFile";
|
shared_ptr<JavaClass> AndroidUtil::Class_ZLFile;
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLFileImage;
|
shared_ptr<JavaClass> AndroidUtil::Class_ZLFileImage;
|
||||||
const char * const AndroidUtil::Class_Book = "org/geometerplus/fbreader/library/Book";
|
shared_ptr<JavaClass> AndroidUtil::Class_Book;
|
||||||
const char * const AndroidUtil::Class_Tag = "org/geometerplus/fbreader/library/Tag";
|
shared_ptr<JavaClass> AndroidUtil::Class_Tag;
|
||||||
const char * const AndroidUtil::Class_NativeBookModel = "org/geometerplus/fbreader/bookmodel/NativeBookModel";
|
shared_ptr<JavaClass> AndroidUtil::Class_NativeBookModel;
|
||||||
//const char * const AndroidUtil::Class_BookReadingException = "org/geometerplus/fbreader/bookmodel/BookReadingException";
|
//shared_ptr<JavaClass> AndroidUtil::Class_BookReadingException;
|
||||||
|
|
||||||
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toLowerCase;
|
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toLowerCase;
|
||||||
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toUpperCase;
|
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toUpperCase;
|
||||||
|
@ -122,107 +123,93 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
ourJavaVM = jvm;
|
ourJavaVM = jvm;
|
||||||
|
|
||||||
JNIEnv *env = getEnv();
|
JNIEnv *env = getEnv();
|
||||||
jclass cls;
|
|
||||||
|
Class_java_lang_RuntimeException = new JavaClass(env, "java/lang/RuntimeException");
|
||||||
|
|
||||||
Class_java_lang_String = new JavaClass(env, "java/lang/String");
|
Class_java_lang_String = new JavaClass(env, "java/lang/String");
|
||||||
Method_java_lang_String_toLowerCase = new StringMethod(*Class_java_lang_String, "toLowerCase", "()");
|
Method_java_lang_String_toLowerCase = new StringMethod(*Class_java_lang_String, "toLowerCase", "()");
|
||||||
Method_java_lang_String_toUpperCase = new StringMethod(*Class_java_lang_String, "toUpperCase", "()");
|
Method_java_lang_String_toUpperCase = new StringMethod(*Class_java_lang_String, "toUpperCase", "()");
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_java_util_Collection) );
|
Class_java_util_Collection = new JavaClass(env, "java/util/Collection");
|
||||||
CHECK_NULL( MID_java_util_Collection_toArray = env->GetMethodID(cls, "toArray", "()[Ljava/lang/Object;") );
|
CHECK_NULL( MID_java_util_Collection_toArray = env->GetMethodID(Class_java_util_Collection->j(), "toArray", "()[Ljava/lang/Object;") );
|
||||||
//CHECK_NULL( MID_java_util_Collection_add = env->GetMethodID(cls, "add", "(Ljava/lang/Object;)Z") );
|
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_java_util_Locale) );
|
Class_java_util_Locale = new JavaClass(env, "java/util/Locale");
|
||||||
StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(env, cls, "getDefault", "java/util/Locale", "()");
|
StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(env, Class_java_util_Locale->j(), "getDefault", "java/util/Locale", "()");
|
||||||
Method_java_util_Locale_getLanguage = new StringMethod(env, cls, "getLanguage", "()");
|
Method_java_util_Locale_getLanguage = new StringMethod(*Class_java_util_Locale, "getLanguage", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_java_io_InputStream) );
|
Class_java_io_InputStream = new JavaClass(env, "java/io/InputStream");
|
||||||
Method_java_io_InputStream_close = new VoidMethod(env, cls, "close", "()");
|
Method_java_io_InputStream_close = new VoidMethod(env, Class_java_io_InputStream->j(), "close", "()");
|
||||||
Method_java_io_InputStream_read = new IntMethod(env, cls, "read", "([BII)");
|
Method_java_io_InputStream_read = new IntMethod(env, Class_java_io_InputStream->j(), "read", "([BII)");
|
||||||
Method_java_io_InputStream_skip = new LongMethod(env, cls, "skip", "(J)");
|
Method_java_io_InputStream_skip = new LongMethod(env, Class_java_io_InputStream->j(), "skip", "(J)");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_ZLibrary) );
|
Class_ZLibrary = new JavaClass(env, "org/geometerplus/zlibrary/core/library/ZLibrary");
|
||||||
StaticMethod_ZLibrary_Instance = new StaticObjectMethod(env, cls, "Instance", "org/geometerplus/zlibrary/core/library/ZLibrary", "()");
|
StaticMethod_ZLibrary_Instance = new StaticObjectMethod(env, Class_ZLibrary->j(), "Instance", "org/geometerplus/zlibrary/core/library/ZLibrary", "()");
|
||||||
Method_ZLibrary_getVersionName = new StringMethod(env, cls, "getVersionName", "()");
|
Method_ZLibrary_getVersionName = new StringMethod(*Class_ZLibrary, "getVersionName", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
Class_NativeFormatPlugin = new JavaClass(env, "org/geometerplus/fbreader/formats/NativeFormatPlugin");
|
Class_NativeFormatPlugin = new JavaClass(env, "org/geometerplus/fbreader/formats/NativeFormatPlugin");
|
||||||
Constructor_NativeFormatPlugin = new Constructor(*Class_NativeFormatPlugin, "(Ljava/lang/String;)V");
|
Constructor_NativeFormatPlugin = new Constructor(*Class_NativeFormatPlugin, "(Ljava/lang/String;)V");
|
||||||
Method_NativeFormatPlugin_supportedFileType = new StringMethod(*Class_NativeFormatPlugin, "supportedFileType", "()");
|
Method_NativeFormatPlugin_supportedFileType = new StringMethod(*Class_NativeFormatPlugin, "supportedFileType", "()");
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_PluginCollection) );
|
Class_PluginCollection = new JavaClass(env, "org/geometerplus/fbreader/formats/PluginCollection");
|
||||||
StaticMethod_PluginCollection_Instance = new StaticObjectMethod(env, cls, "Instance", "org/geometerplus/fbreader/formats/PluginCollection", "()");
|
StaticMethod_PluginCollection_Instance = new StaticObjectMethod(env, Class_PluginCollection->j(), "Instance", "org/geometerplus/fbreader/formats/PluginCollection", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_Encoding) );
|
Class_Encoding = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/Encoding");
|
||||||
Method_Encoding_createConverter = new ObjectMethod(env, cls, "createConverter", "org/geometerplus/zlibrary/core/encodings/EncodingConverter", "()");
|
Method_Encoding_createConverter = new ObjectMethod(env, Class_Encoding->j(), "createConverter", "org/geometerplus/zlibrary/core/encodings/EncodingConverter", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_EncodingConverter) );
|
Class_EncodingConverter = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/EncodingConverter");
|
||||||
CHECK_NULL( FID_EncodingConverter_Name = env->GetFieldID(cls, "Name", "Ljava/lang/String;") );
|
CHECK_NULL( FID_EncodingConverter_Name = env->GetFieldID(Class_EncodingConverter->j(), "Name", "Ljava/lang/String;") );
|
||||||
Method_EncodingConverter_convert = new IntMethod(env, cls, "convert", "([BII[BI)");
|
Method_EncodingConverter_convert = new IntMethod(env, Class_EncodingConverter->j(), "convert", "([BII[BI)");
|
||||||
Method_EncodingConverter_reset = new VoidMethod(env, cls, "reset", "()");
|
Method_EncodingConverter_reset = new VoidMethod(env, Class_EncodingConverter->j(), "reset", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_JavaEncodingCollection) );
|
Class_JavaEncodingCollection = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection");
|
||||||
StaticMethod_JavaEncodingCollection_Instance = new StaticObjectMethod(env, cls, "Instance", "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection", "()");
|
StaticMethod_JavaEncodingCollection_Instance = new StaticObjectMethod(env, Class_JavaEncodingCollection->j(), "Instance", "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection", "()");
|
||||||
Method_JavaEncodingCollection_getEncoding_String = new ObjectMethod(env, cls, "getEncoding", "org/geometerplus/zlibrary/core/encodings/Encoding", "(Ljava/lang/String;)");
|
Method_JavaEncodingCollection_getEncoding_String = new ObjectMethod(env, Class_JavaEncodingCollection->j(), "getEncoding", "org/geometerplus/zlibrary/core/encodings/Encoding", "(Ljava/lang/String;)");
|
||||||
Method_JavaEncodingCollection_getEncoding_int = new ObjectMethod(env, cls, "getEncoding", "org/geometerplus/zlibrary/core/encodings/Encoding", "(I)");
|
Method_JavaEncodingCollection_getEncoding_int = new ObjectMethod(env, Class_JavaEncodingCollection->j(), "getEncoding", "org/geometerplus/zlibrary/core/encodings/Encoding", "(I)");
|
||||||
Method_JavaEncodingCollection_providesConverterFor = new BooleanMethod(env, cls, "providesConverterFor", "(Ljava/lang/String;)");
|
Method_JavaEncodingCollection_providesConverterFor = new BooleanMethod(env, Class_JavaEncodingCollection->j(), "providesConverterFor", "(Ljava/lang/String;)");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_ZLFile) );
|
Class_ZLFile = new JavaClass(env, "org/geometerplus/zlibrary/core/filesystem/ZLFile");
|
||||||
StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(env, cls, "createFileByPath", "org/geometerplus/zlibrary/core/filesystem/ZLFile", "(Ljava/lang/String;)");
|
StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(env, Class_ZLFile->j(), "createFileByPath", "org/geometerplus/zlibrary/core/filesystem/ZLFile", "(Ljava/lang/String;)");
|
||||||
Method_ZLFile_children = new ObjectMethod(env, cls, "children", "java/util/List", "()");
|
Method_ZLFile_children = new ObjectMethod(env, Class_ZLFile->j(), "children", "java/util/List", "()");
|
||||||
Method_ZLFile_exists = new BooleanMethod(env, cls, "exists", "()");
|
Method_ZLFile_exists = new BooleanMethod(env, Class_ZLFile->j(), "exists", "()");
|
||||||
Method_ZLFile_isDirectory = new BooleanMethod(env, cls, "isDirectory", "()");
|
Method_ZLFile_isDirectory = new BooleanMethod(env, Class_ZLFile->j(), "isDirectory", "()");
|
||||||
Method_ZLFile_getInputStream = new ObjectMethod(env, cls, "getInputStream", "java/io/InputStream", "()");
|
Method_ZLFile_getInputStream = new ObjectMethod(env, Class_ZLFile->j(), "getInputStream", "java/io/InputStream", "()");
|
||||||
Method_ZLFile_getPath = new StringMethod(env, cls, "getPath", "()");
|
Method_ZLFile_getPath = new StringMethod(*Class_ZLFile, "getPath", "()");
|
||||||
Method_ZLFile_size = new LongMethod(env, cls, "size", "()");
|
Method_ZLFile_size = new LongMethod(env, Class_ZLFile->j(), "size", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
Class_ZLFileImage = new JavaClass(env, "org/geometerplus/zlibrary/core/image/ZLFileImage");
|
Class_ZLFileImage = new JavaClass(env, "org/geometerplus/zlibrary/core/image/ZLFileImage");
|
||||||
Constructor_ZLFileImage = new Constructor(*Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;II)V");
|
Constructor_ZLFileImage = new Constructor(*Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;II)V");
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_Paths) );
|
Class_Paths = new JavaClass(env, "org/geometerplus/fbreader/Paths");
|
||||||
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(env, cls, "cacheDirectory", "java/lang/String", "()");
|
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(env, Class_Paths->j(), "cacheDirectory", "java/lang/String", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_Book) );
|
Class_Book = new JavaClass(env, "org/geometerplus/fbreader/library/Book");
|
||||||
CHECK_NULL( FID_Book_File = env->GetFieldID(cls, "File", "Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;") );
|
CHECK_NULL( FID_Book_File = env->GetFieldID(Class_Book->j(), "File", "Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;") );
|
||||||
Method_Book_getTitle = new StringMethod(env, cls, "getTitle", "()");
|
Method_Book_getTitle = new StringMethod(*Class_Book, "getTitle", "()");
|
||||||
Method_Book_getLanguage = new StringMethod(env, cls, "getLanguage", "()");
|
Method_Book_getLanguage = new StringMethod(*Class_Book, "getLanguage", "()");
|
||||||
Method_Book_getEncodingNoDetection = new StringMethod(env, cls, "getEncodingNoDetection", "()");
|
Method_Book_getEncodingNoDetection = new StringMethod(*Class_Book, "getEncodingNoDetection", "()");
|
||||||
Method_Book_setTitle = new VoidMethod(env, cls, "setTitle", "(Ljava/lang/String;)");
|
Method_Book_setTitle = new VoidMethod(env, Class_Book->j(), "setTitle", "(Ljava/lang/String;)");
|
||||||
Method_Book_setSeriesInfo = new VoidMethod(env, cls, "setSeriesInfo", "(Ljava/lang/String;F)");
|
Method_Book_setSeriesInfo = new VoidMethod(env, Class_Book->j(), "setSeriesInfo", "(Ljava/lang/String;F)");
|
||||||
Method_Book_setLanguage = new VoidMethod(env, cls, "setLanguage", "(Ljava/lang/String;)");
|
Method_Book_setLanguage = new VoidMethod(env, Class_Book->j(), "setLanguage", "(Ljava/lang/String;)");
|
||||||
Method_Book_setEncoding = new VoidMethod(env, cls, "setEncoding", "(Ljava/lang/String;)");
|
Method_Book_setEncoding = new VoidMethod(env, Class_Book->j(), "setEncoding", "(Ljava/lang/String;)");
|
||||||
Method_Book_addAuthor = new VoidMethod(env, cls, "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)");
|
Method_Book_addAuthor = new VoidMethod(env, Class_Book->j(), "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)");
|
||||||
Method_Book_addTag = new VoidMethod(env, cls, "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)");
|
Method_Book_addTag = new VoidMethod(env, Class_Book->j(), "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)");
|
||||||
Method_Book_save = new BooleanMethod(env, cls, "save", "()");
|
Method_Book_save = new BooleanMethod(env, Class_Book->j(), "save", "()");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_Tag) );
|
Class_Tag = new JavaClass(env, "org/geometerplus/fbreader/library/Tag");
|
||||||
StaticMethod_Tag_getTag = new StaticObjectMethod(env, cls, "getTag", "org/geometerplus/fbreader/library/Tag", "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)");
|
StaticMethod_Tag_getTag = new StaticObjectMethod(env, Class_Tag->j(), "getTag", "org/geometerplus/fbreader/library/Tag", "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_NativeBookModel) );
|
Class_NativeBookModel = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/NativeBookModel");
|
||||||
CHECK_NULL( FID_NativeBookModel_Book = env->GetFieldID(cls, "Book", "Lorg/geometerplus/fbreader/library/Book;") );
|
CHECK_NULL( FID_NativeBookModel_Book = env->GetFieldID(Class_NativeBookModel->j(), "Book", "Lorg/geometerplus/fbreader/library/Book;") );
|
||||||
Method_NativeBookModel_initInternalHyperlinks = new VoidMethod(env, cls, "initInternalHyperlinks", "(Ljava/lang/String;Ljava/lang/String;I)");
|
Method_NativeBookModel_initInternalHyperlinks = new VoidMethod(env, Class_NativeBookModel->j(), "initInternalHyperlinks", "(Ljava/lang/String;Ljava/lang/String;I)");
|
||||||
Method_NativeBookModel_initTOC = new VoidMethod(env, cls, "initTOC", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;[I[I)");
|
Method_NativeBookModel_initTOC = new VoidMethod(env, Class_NativeBookModel->j(), "initTOC", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;[I[I)");
|
||||||
Method_NativeBookModel_createTextModel = new ObjectMethod(env, cls, "createTextModel", "org/geometerplus/zlibrary/text/model/ZLTextModel", "(Ljava/lang/String;Ljava/lang/String;I[I[I[I[I[BLjava/lang/String;Ljava/lang/String;I)");
|
Method_NativeBookModel_createTextModel = new ObjectMethod(env, Class_NativeBookModel->j(), "createTextModel", "org/geometerplus/zlibrary/text/model/ZLTextModel", "(Ljava/lang/String;Ljava/lang/String;I[I[I[I[I[BLjava/lang/String;Ljava/lang/String;I)");
|
||||||
Method_NativeBookModel_setBookTextModel = new VoidMethod(env, cls, "setBookTextModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
Method_NativeBookModel_setBookTextModel = new VoidMethod(env, Class_NativeBookModel->j(), "setBookTextModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
||||||
Method_NativeBookModel_setFootnoteModel = new VoidMethod(env, cls, "setFootnoteModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
Method_NativeBookModel_setFootnoteModel = new VoidMethod(env, Class_NativeBookModel->j(), "setFootnoteModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
||||||
Method_NativeBookModel_addImage = new VoidMethod(env, cls, "addImage", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/image/ZLImage;)");
|
Method_NativeBookModel_addImage = new VoidMethod(env, Class_NativeBookModel->j(), "addImage", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/image/ZLImage;)");
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CHECK_NULL( cls = env->FindClass(Class_BookReadingException) );
|
Class_BookReadingException = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/BookReadingException");
|
||||||
CHECK_NULL( StaticMethod_BookReadingException_throwForFile = env->GetStaticMethodID(cls, "throwForFile", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;)V") );
|
StaticMethod_BookReadingException_throwForFile = new StaticVoidMethod(*Class_BookReadingException, "throwForFile", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;)V") );
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -230,9 +217,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
|
|
||||||
jobject AndroidUtil::createJavaFile(JNIEnv *env, const std::string &path) {
|
jobject AndroidUtil::createJavaFile(JNIEnv *env, const std::string &path) {
|
||||||
jstring javaPath = env->NewStringUTF(path.c_str());
|
jstring javaPath = env->NewStringUTF(path.c_str());
|
||||||
jclass cls = env->FindClass(Class_ZLFile);
|
jobject javaFile = StaticMethod_ZLFile_createFileByPath->call(Class_ZLFile->j(), javaPath);
|
||||||
jobject javaFile = StaticMethod_ZLFile_createFileByPath->call(cls, javaPath);
|
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
env->DeleteLocalRef(javaPath);
|
env->DeleteLocalRef(javaPath);
|
||||||
return javaFile;
|
return javaFile;
|
||||||
}
|
}
|
||||||
|
@ -306,9 +291,7 @@ jbyteArray AndroidUtil::createJavaByteArray(JNIEnv *env, const std::vector<jbyte
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message) {
|
void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message) {
|
||||||
// TODO: possible memory leak
|
env->ThrowNew(Class_java_lang_RuntimeException->j(), message.c_str());
|
||||||
jclass cls = env->FindClass("java/lang/RuntimeException");
|
|
||||||
env->ThrowNew(cls, message.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -46,23 +46,24 @@ private:
|
||||||
static JavaVM *ourJavaVM;
|
static JavaVM *ourJavaVM;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static shared_ptr<JavaClass> Class_java_lang_RuntimeException;
|
||||||
static shared_ptr<JavaClass> Class_java_lang_String;
|
static shared_ptr<JavaClass> Class_java_lang_String;
|
||||||
static const char * const Class_java_util_Collection;
|
static shared_ptr<JavaClass> Class_java_util_Collection;
|
||||||
static const char * const Class_java_util_Locale;
|
static shared_ptr<JavaClass> Class_java_util_Locale;
|
||||||
static const char * const Class_java_io_InputStream;
|
static shared_ptr<JavaClass> Class_java_io_InputStream;
|
||||||
static const char * const Class_ZLibrary;
|
static shared_ptr<JavaClass> Class_ZLibrary;
|
||||||
static const char * const Class_ZLFile;
|
static shared_ptr<JavaClass> Class_ZLFile;
|
||||||
static shared_ptr<JavaClass> Class_ZLFileImage;
|
static shared_ptr<JavaClass> Class_ZLFileImage;
|
||||||
static shared_ptr<JavaClass> Class_NativeFormatPlugin;
|
static shared_ptr<JavaClass> Class_NativeFormatPlugin;
|
||||||
static const char * const Class_PluginCollection;
|
static shared_ptr<JavaClass> Class_PluginCollection;
|
||||||
static const char * const Class_Encoding;
|
static shared_ptr<JavaClass> Class_Encoding;
|
||||||
static const char * const Class_EncodingConverter;
|
static shared_ptr<JavaClass> Class_EncodingConverter;
|
||||||
static const char * const Class_JavaEncodingCollection;
|
static shared_ptr<JavaClass> Class_JavaEncodingCollection;
|
||||||
static const char * const Class_Paths;
|
static shared_ptr<JavaClass> Class_Paths;
|
||||||
static const char * const Class_Book;
|
static shared_ptr<JavaClass> Class_Book;
|
||||||
static const char * const Class_Tag;
|
static shared_ptr<JavaClass> Class_Tag;
|
||||||
static const char * const Class_NativeBookModel;
|
static shared_ptr<JavaClass> Class_NativeBookModel;
|
||||||
//static const char * const Class_BookReadingException;
|
//static shared_ptr<JavaClass> Class_BookReadingException;
|
||||||
|
|
||||||
static shared_ptr<StringMethod> Method_java_lang_String_toLowerCase;
|
static shared_ptr<StringMethod> Method_java_lang_String_toLowerCase;
|
||||||
static shared_ptr<StringMethod> Method_java_lang_String_toUpperCase;
|
static shared_ptr<StringMethod> Method_java_lang_String_toUpperCase;
|
||||||
|
|
|
@ -49,13 +49,13 @@ bool JavaEncodingConverterProvider::providesConverter(const std::string &encodin
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
JNIEnv *env = AndroidUtil::getEnv();
|
||||||
jclass cls = env->FindClass(AndroidUtil::Class_JavaEncodingCollection);
|
jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call(
|
||||||
jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call(cls);
|
AndroidUtil::Class_JavaEncodingCollection->j()
|
||||||
|
);
|
||||||
jstring encodingName = AndroidUtil::createJavaString(env, encoding);
|
jstring encodingName = AndroidUtil::createJavaString(env, encoding);
|
||||||
jboolean result = AndroidUtil::Method_JavaEncodingCollection_providesConverterFor->call(collection, encodingName);
|
jboolean result = AndroidUtil::Method_JavaEncodingCollection_providesConverterFor->call(collection, encodingName);
|
||||||
env->DeleteLocalRef(encodingName);
|
env->DeleteLocalRef(encodingName);
|
||||||
env->DeleteLocalRef(collection);
|
env->DeleteLocalRef(collection);
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
return result != 0;
|
return result != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,15 +65,15 @@ shared_ptr<ZLEncodingConverter> JavaEncodingConverterProvider::createConverter(c
|
||||||
|
|
||||||
JavaEncodingConverter::JavaEncodingConverter(const std::string &encoding) {
|
JavaEncodingConverter::JavaEncodingConverter(const std::string &encoding) {
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
JNIEnv *env = AndroidUtil::getEnv();
|
||||||
jclass cls = env->FindClass(AndroidUtil::Class_JavaEncodingCollection);
|
jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call(
|
||||||
jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call(cls);
|
AndroidUtil::Class_JavaEncodingCollection->j()
|
||||||
|
);
|
||||||
jstring encodingName = AndroidUtil::createJavaString(env, encoding);
|
jstring encodingName = AndroidUtil::createJavaString(env, encoding);
|
||||||
jobject javaEncoding = AndroidUtil::Method_JavaEncodingCollection_getEncoding_String->call(collection, encodingName);
|
jobject javaEncoding = AndroidUtil::Method_JavaEncodingCollection_getEncoding_String->call(collection, encodingName);
|
||||||
myJavaConverter = AndroidUtil::Method_Encoding_createConverter->call(javaEncoding);
|
myJavaConverter = AndroidUtil::Method_Encoding_createConverter->call(javaEncoding);
|
||||||
env->DeleteLocalRef(javaEncoding);
|
env->DeleteLocalRef(javaEncoding);
|
||||||
env->DeleteLocalRef(encodingName);
|
env->DeleteLocalRef(encodingName);
|
||||||
env->DeleteLocalRef(collection);
|
env->DeleteLocalRef(collection);
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
|
|
||||||
myBufferLength = 32768;
|
myBufferLength = 32768;
|
||||||
myInBuffer = env->NewByteArray(myBufferLength);
|
myInBuffer = env->NewByteArray(myBufferLength);
|
||||||
|
|
|
@ -44,28 +44,28 @@ void ZLAndroidLibraryImplementation::init(int &argc, char **&argv) {
|
||||||
|
|
||||||
std::string ZLibrary::Language() {
|
std::string ZLibrary::Language() {
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
JNIEnv *env = AndroidUtil::getEnv();
|
||||||
jclass cls = env->FindClass(AndroidUtil::Class_java_util_Locale);
|
jobject locale = AndroidUtil::StaticMethod_java_util_Locale_getDefault->call(
|
||||||
jobject locale = AndroidUtil::StaticMethod_java_util_Locale_getDefault->call(cls);
|
AndroidUtil::Class_java_util_Locale->j()
|
||||||
|
);
|
||||||
jstring javaLang = (jstring)AndroidUtil::Method_java_util_Locale_getLanguage->call(locale);
|
jstring javaLang = (jstring)AndroidUtil::Method_java_util_Locale_getLanguage->call(locale);
|
||||||
const char *langData = env->GetStringUTFChars(javaLang, 0);
|
const char *langData = env->GetStringUTFChars(javaLang, 0);
|
||||||
std::string lang(langData);
|
std::string lang(langData);
|
||||||
env->ReleaseStringUTFChars(javaLang, langData);
|
env->ReleaseStringUTFChars(javaLang, langData);
|
||||||
env->DeleteLocalRef(javaLang);
|
env->DeleteLocalRef(javaLang);
|
||||||
env->DeleteLocalRef(locale);
|
env->DeleteLocalRef(locale);
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
return lang;
|
return lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ZLibrary::Version() {
|
std::string ZLibrary::Version() {
|
||||||
JNIEnv *env = AndroidUtil::getEnv();
|
JNIEnv *env = AndroidUtil::getEnv();
|
||||||
jclass cls = env->FindClass(AndroidUtil::Class_ZLibrary);
|
jobject zlibrary = AndroidUtil::StaticMethod_ZLibrary_Instance->call(
|
||||||
jobject zlibrary = AndroidUtil::StaticMethod_ZLibrary_Instance->call(cls);
|
AndroidUtil::Class_ZLibrary->j()
|
||||||
|
);
|
||||||
jstring javaVersion = (jstring)AndroidUtil::Method_ZLibrary_getVersionName->call(zlibrary);
|
jstring javaVersion = (jstring)AndroidUtil::Method_ZLibrary_getVersionName->call(zlibrary);
|
||||||
const char *versionData = env->GetStringUTFChars(javaVersion, 0);
|
const char *versionData = env->GetStringUTFChars(javaVersion, 0);
|
||||||
std::string version(versionData);
|
std::string version(versionData);
|
||||||
env->ReleaseStringUTFChars(javaVersion, versionData);
|
env->ReleaseStringUTFChars(javaVersion, versionData);
|
||||||
env->DeleteLocalRef(javaVersion);
|
env->DeleteLocalRef(javaVersion);
|
||||||
env->DeleteLocalRef(zlibrary);
|
env->DeleteLocalRef(zlibrary);
|
||||||
env->DeleteLocalRef(cls);
|
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue