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

native code simplification (introduced JString class)

This commit is contained in:
Nikolay Pultsin 2014-04-07 21:02:52 +01:00
parent 48cdfee8a2
commit fdb21b67dc
4 changed files with 71 additions and 83 deletions

View file

@ -218,10 +218,8 @@ bool AndroidUtil::init(JavaVM* jvm) {
}
jobject AndroidUtil::createJavaFile(JNIEnv *env, const std::string &path) {
jstring javaPath = createJavaString(env, path);
jobject javaFile = StaticMethod_ZLFile_createFileByPath->call(javaPath);
env->DeleteLocalRef(javaPath);
return javaFile;
JString javaPath(env, path, false);
return StaticMethod_ZLFile_createFileByPath->call(javaPath.j());
}
jobject AndroidUtil::createJavaEncryptionInfo(JNIEnv *env, shared_ptr<FileEncryptionInfo> info) {
@ -229,25 +227,18 @@ jobject AndroidUtil::createJavaEncryptionInfo(JNIEnv *env, shared_ptr<FileEncryp
return 0;
}
jstring uri = createJavaString(env, info->Uri);
jstring method = createJavaString(env, info->Method);
jstring algorithm = createJavaString(env, info->Algorithm);
jstring contentId = createJavaString(env, info->ContentId);
JString uri(env, info->Uri, false);
JString method(env, info->Method, false);
JString algorithm(env, info->Algorithm, false);
JString contentId(env, info->ContentId, false);
jobject javaInfo = Constructor_FileEncryptionInfo->call(uri, method, algorithm, contentId);
env->DeleteLocalRef(contentId);
env->DeleteLocalRef(algorithm);
env->DeleteLocalRef(method);
env->DeleteLocalRef(uri);
return javaInfo;
return Constructor_FileEncryptionInfo->call(uri.j(), method.j(), algorithm.j(), contentId.j());
}
jobject AndroidUtil::createJavaImage(JNIEnv *env, const ZLFileImage &image) {
jstring javaMimeType = createJavaString(env, image.mimeType());
JString javaMimeType(env, image.mimeType());
jobject javaFile = createJavaFile(env, image.file().path());
jstring javaEncoding = createJavaString(env, image.encoding());
JString javaEncoding(env, image.encoding());
std::vector<jint> offsets, sizes;
const ZLFileImage::Blocks &blocks = image.blocks();
@ -261,7 +252,7 @@ jobject AndroidUtil::createJavaImage(JNIEnv *env, const ZLFileImage &image) {
jobject javaEncryptionInfo = createJavaEncryptionInfo(env, image.encryptionInfo());
jobject javaImage = Constructor_ZLFileImage->call(
javaMimeType, javaFile, javaEncoding,
javaMimeType.j(), javaFile, javaEncoding.j(),
javaOffsets, javaSizes, javaEncryptionInfo
);
@ -269,9 +260,7 @@ jobject AndroidUtil::createJavaImage(JNIEnv *env, const ZLFileImage &image) {
env->DeleteLocalRef(javaEncryptionInfo);
}
env->DeleteLocalRef(javaEncoding);
env->DeleteLocalRef(javaFile);
env->DeleteLocalRef(javaMimeType);
env->DeleteLocalRef(javaOffsets);
env->DeleteLocalRef(javaSizes);
@ -288,8 +277,14 @@ std::string AndroidUtil::fromJavaString(JNIEnv *env, jstring from) {
return result;
}
jstring AndroidUtil::createJavaString(JNIEnv* env, shared_ptr<std::string> str) {
return str.isNull() ? 0 : createJavaString(env, *str);
JString::JString(JNIEnv* env, const std::string &str, bool emptyIsNull) : myEnv(env) {
myJ = (emptyIsNull && str.empty()) ? 0 : env->NewStringUTF(str.c_str());
}
JString::~JString() {
if (myJ != 0) {
myEnv->DeleteLocalRef(myJ);
}
}
jstring AndroidUtil::createJavaString(JNIEnv* env, const std::string &str) {