diff --git a/jni/NativeFormats/JavaNativeFormatPlugin.cpp b/jni/NativeFormats/JavaNativeFormatPlugin.cpp index 93273b74b..1742de41d 100644 --- a/jni/NativeFormats/JavaNativeFormatPlugin.cpp +++ b/jni/NativeFormats/JavaNativeFormatPlugin.cpp @@ -81,6 +81,24 @@ static void fillMetaInfo(JNIEnv* env, jobject javaBook, Book &book) { } } +void fillLanguageAndEncoding(JNIEnv* env, jobject javaBook, Book &book) { + jstring javaString; + + javaString = AndroidUtil::createJavaString(env, book.language()); + if (javaString != 0) { + env->CallVoidMethod(javaBook, AndroidUtil::MID_Book_setLanguage, javaString); + env->DeleteLocalRef(javaString); + } + + javaString = AndroidUtil::createJavaString(env, book.encoding()); + if (javaString != 0) { + env->CallVoidMethod(javaBook, AndroidUtil::MID_Book_setEncoding, javaString); + env->DeleteLocalRef(javaString); + } + + env->CallVoidMethod(javaBook, AndroidUtil::MID_Book_save); +} + extern "C" JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_readMetaInfoNative(JNIEnv* env, jobject thiz, jobject javaBook) { shared_ptr plugin = findCppPlugin(env, thiz); @@ -100,7 +118,6 @@ 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) { - // TODO: implement shared_ptr plugin = findCppPlugin(env, thiz); if (plugin.isNull()) { return; @@ -111,7 +128,7 @@ JNIEXPORT void JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin return; } - //fillLanguageAndEncoding(env, javaBook, *book); + fillLanguageAndEncoding(env, javaBook, *book); } static bool initBookModel(JNIEnv *env, jobject javaModel, BookModel &model) { diff --git a/jni/NativeFormats/fbreader/src/formats/txt/TxtPlugin.cpp b/jni/NativeFormats/fbreader/src/formats/txt/TxtPlugin.cpp index 47d212810..775c5857f 100644 --- a/jni/NativeFormats/fbreader/src/formats/txt/TxtPlugin.cpp +++ b/jni/NativeFormats/fbreader/src/formats/txt/TxtPlugin.cpp @@ -43,7 +43,7 @@ bool TxtPlugin::readMetaInfo(Book &book) const { } bool TxtPlugin::readModel(BookModel &model) const { - const Book &book = *model.book(); + Book &book = *model.book(); const ZLFile &file = book.file(); shared_ptr stream = file.inputStream(); if (stream.isNull()) { @@ -56,6 +56,7 @@ bool TxtPlugin::readModel(BookModel &model) const { detector.detect(*stream, format); } + readLanguageAndEncoding(book); TxtBookReader(model, format, book.encoding()).readDocument(*stream); return true; } diff --git a/jni/NativeFormats/util/AndroidUtil.cpp b/jni/NativeFormats/util/AndroidUtil.cpp index 47beacb64..1bef42257 100644 --- a/jni/NativeFormats/util/AndroidUtil.cpp +++ b/jni/NativeFormats/util/AndroidUtil.cpp @@ -90,6 +90,7 @@ jmethodID AndroidUtil::MID_Book_setLanguage; jmethodID AndroidUtil::MID_Book_setEncoding; jmethodID AndroidUtil::MID_Book_addAuthor; jmethodID AndroidUtil::MID_Book_addTag; +jmethodID AndroidUtil::MID_Book_save; jmethodID AndroidUtil::SMID_Tag_getTag; @@ -196,6 +197,7 @@ bool AndroidUtil::init(JavaVM* jvm) { CHECK_NULL( MID_Book_setEncoding = env->GetMethodID(cls, "setEncoding", "(Ljava/lang/String;)V") ); CHECK_NULL( MID_Book_addAuthor = env->GetMethodID(cls, "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)V") ); CHECK_NULL( MID_Book_addTag = env->GetMethodID(cls, "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)V") ); + CHECK_NULL( MID_Book_save = env->GetMethodID(cls, "save", "()Z") ); env->DeleteLocalRef(cls); CHECK_NULL( cls = env->FindClass(Class_Tag) ); diff --git a/jni/NativeFormats/util/AndroidUtil.h b/jni/NativeFormats/util/AndroidUtil.h index c498a8840..1e77c5e1b 100644 --- a/jni/NativeFormats/util/AndroidUtil.h +++ b/jni/NativeFormats/util/AndroidUtil.h @@ -100,6 +100,7 @@ public: static jmethodID MID_Book_setEncoding; static jmethodID MID_Book_addAuthor; static jmethodID MID_Book_addTag; + static jmethodID MID_Book_save; static jmethodID SMID_Tag_getTag; diff --git a/proguard.cfg b/proguard.cfg index ea1a28d18..b735247e2 100755 --- a/proguard.cfg +++ b/proguard.cfg @@ -67,6 +67,7 @@ public void setEncoding(**); public void addAuthor(**,**); public void addTag(**); + public boolean save(); } -keep class org.geometerplus.fbreader.library.Tag -keepclassmembers class org.geometerplus.fbreader.library.Tag { diff --git a/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java b/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java index 7ff587301..ce05687a1 100644 --- a/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java +++ b/src/org/geometerplus/android/fbreader/preferences/EditBookInfoActivity.java @@ -73,11 +73,8 @@ class LanguagePreference extends ZLStringListPreference { ++index; } setLists(codes, names); - String language = myBook.getLanguage(); - if (language == null) { - language = ZLLanguageUtil.OTHER_LANGUAGE_CODE; - } - if (!setInitialValue(language)) { + final String language = myBook.getLanguage(); + if (language == null || !setInitialValue(language)) { setInitialValue(ZLLanguageUtil.OTHER_LANGUAGE_CODE); } } diff --git a/src/org/geometerplus/fbreader/library/Book.java b/src/org/geometerplus/fbreader/library/Book.java index 6ee31fbf2..7971a6e04 100644 --- a/src/org/geometerplus/fbreader/library/Book.java +++ b/src/org/geometerplus/fbreader/library/Book.java @@ -289,12 +289,11 @@ public class Book { final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File); if (plugin != null) { try { - System.err.println("do encoding detection"); plugin.detectLanguageAndEncoding(this); } catch (BookReadingException e) { } if (myEncoding == null) { - //setEncoding("utf-8"); + setEncoding("utf-8"); } } }