1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-03 09:49:19 +02:00

BookReadingException can be thrown from native code

This commit is contained in:
Nikolay Pultsin 2012-03-22 23:47:22 +00:00
parent 5f6223353d
commit 0e476c760c
4 changed files with 32 additions and 3 deletions

View file

@ -17,6 +17,8 @@
* 02110-1301, USA.
*/
#include <ZLFile.h>
#include "AndroidUtil.h"
JavaVM *AndroidUtil::ourJavaVM = 0;
@ -37,6 +39,7 @@ const char * const AndroidUtil::Class_ZLFile = "org/geometerplus/zlibrary/core/f
const char * const AndroidUtil::Class_Book = "org/geometerplus/fbreader/library/Book";
const char * const AndroidUtil::Class_Tag = "org/geometerplus/fbreader/library/Tag";
const char * const AndroidUtil::Class_NativeBookModel = "org/geometerplus/fbreader/bookmodel/NativeBookModel";
const char * const AndroidUtil::Class_BookReadingException = "org/geometerplus/fbreader/bookmodel/BookReadingException";
jmethodID AndroidUtil::MID_java_lang_String_toLowerCase;
jmethodID AndroidUtil::MID_java_lang_String_toUpperCase;
@ -103,6 +106,8 @@ jmethodID AndroidUtil::MID_NativeBookModel_createTextModel;
jmethodID AndroidUtil::MID_NativeBookModel_setBookTextModel;
jmethodID AndroidUtil::MID_NativeBookModel_setFootnoteModel;
jmethodID AndroidUtil::SMID_BookReadingException_throwForFile;
JNIEnv *AndroidUtil::getEnv() {
JNIEnv *env;
ourJavaVM->GetEnv((void **)&env, JNI_VERSION_1_2);
@ -216,6 +221,10 @@ bool AndroidUtil::init(JavaVM* jvm) {
CHECK_NULL( MID_NativeBookModel_setFootnoteModel = env->GetMethodID(cls, "setFootnoteModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)V") );
env->DeleteLocalRef(cls);
CHECK_NULL( cls = env->FindClass(Class_BookReadingException) );
CHECK_NULL( SMID_BookReadingException_throwForFile = env->GetStaticMethodID(cls, "throwForFile", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;)V") );
env->DeleteLocalRef(cls);
return true;
}
@ -299,6 +308,14 @@ void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message)
env->ThrowNew(cls, message.c_str());
}
void AndroidUtil::throwBookReadingException(JNIEnv *env, const std::string &resourceId, const std::string &filePath) {
// TODO: implement
void AndroidUtil::throwBookReadingException(const std::string &resourceId, const ZLFile &file) {
JNIEnv *env = getEnv();
jclass cls = env->FindClass("org/geometerplus/fbreader/bookmodel/BookReadingException");
env->CallStaticVoidMethod(
cls,
SMID_BookReadingException_throwForFile,
AndroidUtil::createJavaString(env, resourceId),
AndroidUtil::createZLFile(env, file.path())
);
// TODO: clear cls & ZLFile object references
}