[android] Reformatted a bit.

This commit is contained in:
Dmitry Yunitsky 2016-04-26 12:26:54 +03:00 committed by Alex Zolotarev
parent 047052ec86
commit 1bc43d6319
2 changed files with 217 additions and 217 deletions

View file

@ -19,188 +19,188 @@ jclass g_bookmarkClazz;
extern "C"
{
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM * jvm, void *)
{
g_jvm = jvm;
jni::InitSystemLog();
jni::InitAssertLog();
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM * jvm, void *)
{
g_jvm = jvm;
jni::InitSystemLog();
jni::InitAssertLog();
JNIEnv * env = jni::GetEnv();
g_mapObjectClazz = jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/MapObject");
g_bookmarkClazz = jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/Bookmark");
JNIEnv * env = jni::GetEnv();
g_mapObjectClazz = jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/MapObject");
g_bookmarkClazz = jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/Bookmark");
return JNI_VERSION_1_6;
}
return JNI_VERSION_1_6;
}
JNIEXPORT void JNICALL
JNI_OnUnload(JavaVM *, void *)
{
g_jvm = 0;
JNIEnv * env = jni::GetEnv();
env->DeleteGlobalRef(g_mapObjectClazz);
env->DeleteGlobalRef(g_bookmarkClazz);
}
JNIEXPORT void JNICALL
JNI_OnUnload(JavaVM *, void *)
{
g_jvm = 0;
JNIEnv * env = jni::GetEnv();
env->DeleteGlobalRef(g_mapObjectClazz);
env->DeleteGlobalRef(g_bookmarkClazz);
}
} // extern "C"
namespace jni
{
JNIEnv * GetEnv()
{
JNIEnv * env;
if (JNI_OK != g_jvm->GetEnv((void **)&env, JNI_VERSION_1_6))
MYTHROW(RootException, ("Can't get JNIEnv. Was thread attached to JVM?"));
JNIEnv * GetEnv()
{
JNIEnv * env;
if (JNI_OK != g_jvm->GetEnv((void **)&env, JNI_VERSION_1_6))
MYTHROW(RootException, ("Can't get JNIEnv. Was thread attached to JVM?"));
return env;
return env;
}
JavaVM * GetJVM()
{
ASSERT(g_jvm, ("JVM is not initialized"));
return g_jvm;
}
jmethodID GetMethodID(JNIEnv * env, jobject obj, char const * fn, char const * sig)
{
TScopedLocalClassRef clazz(env, env->GetObjectClass(obj));
ASSERT(clazz.get(), ("Can't get class: ", DescribeException()));
jmethodID mid = env->GetMethodID(clazz.get(), fn, sig);
ASSERT(mid, ("Can't get methodID", fn, sig, DescribeException()));
return mid;
}
jmethodID GetConstructorID(JNIEnv * env, jclass clazz, char const * sig)
{
jmethodID const ctorID = env->GetMethodID(clazz, "<init>", sig);
ASSERT(ctorID, (DescribeException()));
return ctorID;
}
jclass GetGlobalClassRef(JNIEnv * env, char const * sig)
{
jclass klass = env->FindClass(sig);
ASSERT(klass, ("Can't get class : ", DescribeException()));
return static_cast<jclass>(env->NewGlobalRef(klass));
}
string ToNativeString(JNIEnv * env, jstring str)
{
string result;
char const * utfBuffer = env->GetStringUTFChars(str, 0);
if (utfBuffer)
{
result = utfBuffer;
env->ReleaseStringUTFChars(str, utfBuffer);
}
return result;
}
string ToNativeString(JNIEnv * env, jbyteArray const & bytes)
{
int const len = env->GetArrayLength(bytes);
vector<char> buffer(len);
env->GetByteArrayRegion(bytes, 0, len, reinterpret_cast<jbyte *>(buffer.data()));
return string(buffer.data(), len);
}
jstring ToJavaString(JNIEnv * env, char const * s)
{
return env->NewStringUTF(s);
}
jobjectArray ToJavaStringArray(JNIEnv * env, vector<string> const & src)
{
return ToJavaArray(env, GetStringClass(env), src,
[](JNIEnv * env, string const & item)
{
return ToJavaString(env, item.c_str());
});
}
jclass GetStringClass(JNIEnv * env)
{
return env->FindClass(GetStringClassName());
}
char const * GetStringClassName()
{
return "java/lang/String";
}
struct global_ref_deleter
{
void operator()(jobject * ref)
{
GetEnv()->DeleteGlobalRef(*ref);
delete ref;
}
};
shared_ptr<jobject> make_global_ref(jobject obj)
{
jobject * ref = new jobject;
*ref = GetEnv()->NewGlobalRef(obj);
return shared_ptr<jobject>(ref, global_ref_deleter());
}
string DescribeException()
{
JNIEnv * env = GetEnv();
if (env->ExceptionCheck())
{
jthrowable e = env->ExceptionOccurred();
// have to clear the exception before JNI will work again.
env->ExceptionClear();
jclass eclass = env->GetObjectClass(e);
jmethodID mid = env->GetMethodID(eclass, "toString", "()Ljava/lang/String;");
jstring jErrorMsg = (jstring) env->CallObjectMethod(e, mid);
return ToNativeString(env, jErrorMsg);
}
JavaVM * GetJVM()
{
ASSERT(g_jvm, ("JVM is not initialized"));
return g_jvm;
}
return "";
}
jmethodID GetMethodID(JNIEnv * env, jobject obj, char const * fn, char const * sig)
{
TScopedLocalClassRef clazz(env, env->GetObjectClass(obj));
ASSERT(clazz.get(), ("Can't get class: ", DescribeException()));
jobject GetNewParcelablePointD(JNIEnv * env, m2::PointD const & point)
{
jclass klass = env->FindClass("com/mapswithme/maps/bookmarks/data/ParcelablePointD");
ASSERT ( klass, () );
jmethodID methodID = GetConstructorID(env, klass, "(DD)V");
jmethodID mid = env->GetMethodID(clazz.get(), fn, sig);
ASSERT(mid, ("Can't get methodID", fn, sig, DescribeException()));
return mid;
}
return env->NewObject(klass, methodID,
static_cast<jdouble>(point.x),
static_cast<jdouble>(point.y));
}
jmethodID GetConstructorID(JNIEnv * env, jclass clazz, char const * sig)
{
jmethodID const ctorID = env->GetMethodID(clazz, "<init>", sig);
ASSERT(ctorID, (DescribeException()));
return ctorID;
}
jobject GetNewPoint(JNIEnv * env, m2::PointD const & point)
{
return GetNewPoint(env, m2::PointI(static_cast<int>(point.x), static_cast<int>(point.y)));
}
jclass GetGlobalClassRef(JNIEnv * env, char const * sig)
{
jclass klass = env->FindClass(sig);
ASSERT(klass, ("Can't get class : ", DescribeException()));
return static_cast<jclass>(env->NewGlobalRef(klass));
}
jobject GetNewPoint(JNIEnv * env, m2::PointI const & point)
{
jclass klass = env->FindClass("android/graphics/Point");
ASSERT ( klass, () );
jmethodID methodID = GetConstructorID(env, klass, "(II)V");
string ToNativeString(JNIEnv * env, jstring str)
{
string result;
char const * utfBuffer = env->GetStringUTFChars(str, 0);
if (utfBuffer)
{
result = utfBuffer;
env->ReleaseStringUTFChars(str, utfBuffer);
}
return result;
}
return env->NewObject(klass, methodID,
static_cast<jint>(point.x),
static_cast<jint>(point.y));
}
string ToNativeString(JNIEnv * env, jbyteArray const & bytes)
{
int const len = env->GetArrayLength(bytes);
vector<char> buffer(len);
env->GetByteArrayRegion(bytes, 0, len, reinterpret_cast<jbyte *>(buffer.data()));
return string(buffer.data(), len);
}
jstring ToJavaString(JNIEnv * env, char const * s)
{
return env->NewStringUTF(s);
}
jobjectArray ToJavaStringArray(JNIEnv * env, vector<string> const & src)
{
return ToJavaArray(env, GetStringClass(env), src,
[](JNIEnv * env, string const & item)
{
return ToJavaString(env, item.c_str());
});
}
jclass GetStringClass(JNIEnv * env)
{
return env->FindClass(GetStringClassName());
}
char const * GetStringClassName()
{
return "java/lang/String";
}
struct global_ref_deleter
{
void operator()(jobject * ref)
{
GetEnv()->DeleteGlobalRef(*ref);
delete ref;
}
};
shared_ptr<jobject> make_global_ref(jobject obj)
{
jobject * ref = new jobject;
*ref = GetEnv()->NewGlobalRef(obj);
return shared_ptr<jobject>(ref, global_ref_deleter());
}
string DescribeException()
{
JNIEnv * env = GetEnv();
if (env->ExceptionCheck())
{
jthrowable e = env->ExceptionOccurred();
// have to clear the exception before JNI will work again.
env->ExceptionClear();
jclass eclass = env->GetObjectClass(e);
jmethodID mid = env->GetMethodID(eclass, "toString", "()Ljava/lang/String;");
jstring jErrorMsg = (jstring) env->CallObjectMethod(e, mid);
return ToNativeString(env, jErrorMsg);
}
return "";
}
jobject GetNewParcelablePointD(JNIEnv * env, m2::PointD const & point)
{
jclass klass = env->FindClass("com/mapswithme/maps/bookmarks/data/ParcelablePointD");
ASSERT ( klass, () );
jmethodID methodID = GetConstructorID(env, klass, "(DD)V");
return env->NewObject(klass, methodID,
static_cast<jdouble>(point.x),
static_cast<jdouble>(point.y));
}
jobject GetNewPoint(JNIEnv * env, m2::PointD const & point)
{
return GetNewPoint(env, m2::PointI(static_cast<int>(point.x), static_cast<int>(point.y)));
}
jobject GetNewPoint(JNIEnv * env, m2::PointI const & point)
{
jclass klass = env->FindClass("android/graphics/Point");
ASSERT ( klass, () );
jmethodID methodID = GetConstructorID(env, klass, "(II)V");
return env->NewObject(klass, methodID,
static_cast<jint>(point.x),
static_cast<jint>(point.y));
}
// This util method dumps content of local and global reference jni tables to logcat for debug and testing purposes
void DumpDalvikReferenceTables()
{
JNIEnv * env = GetEnv();
jclass vm_class = env->FindClass("dalvik/system/VMDebug");
jmethodID dump_mid = env->GetStaticMethodID(vm_class, "dumpReferenceTables", "()V");
env->CallStaticVoidMethod(vm_class, dump_mid);
env->DeleteLocalRef(vm_class);
}
// This util method dumps content of local and global reference jni tables to logcat for debug and testing purposes
void DumpDalvikReferenceTables()
{
JNIEnv * env = GetEnv();
jclass vm_class = env->FindClass("dalvik/system/VMDebug");
jmethodID dump_mid = env->GetStaticMethodID(vm_class, "dumpReferenceTables", "()V");
env->CallStaticVoidMethod(vm_class, dump_mid);
env->DeleteLocalRef(vm_class);
}
} // namespace jni

View file

@ -14,56 +14,56 @@ extern jclass g_bookmarkClazz;
namespace jni
{
JNIEnv * GetEnv();
JavaVM * GetJVM();
JNIEnv * GetEnv();
JavaVM * GetJVM();
jmethodID GetMethodID(JNIEnv * env, jobject obj, char const * fn, char const * sig);
jmethodID GetConstructorID(JNIEnv * env, jclass clazz, char const * sig);
jmethodID GetMethodID(JNIEnv * env, jobject obj, char const * fn, char const * sig);
jmethodID GetConstructorID(JNIEnv * env, jclass clazz, char const * sig);
// Result value should be DeleteGlobalRef`ed by caller
jclass GetGlobalClassRef(JNIEnv * env, char const * s);
// Result value should be DeleteGlobalRef`ed by caller
jclass GetGlobalClassRef(JNIEnv * env, char const * s);
string ToNativeString(JNIEnv * env, jstring str);
// Converts UTF-8 array to native UTF-8 string. Result differs from simple GetStringUTFChars call for characters greater than U+10000,
// since jni uses modified UTF (MUTF-8) for strings.
string ToNativeString(JNIEnv * env, jbyteArray const & utfBytes);
jstring ToJavaString(JNIEnv * env, char const * s);
inline jstring ToJavaString(JNIEnv * env, string const & s)
{
return ToJavaString(env, s.c_str());
}
jclass GetStringClass(JNIEnv * env);
char const * GetStringClassName();
string DescribeException();
shared_ptr<jobject> make_global_ref(jobject obj);
using TScopedLocalRef = ScopedLocalRef<jobject>;
using TScopedLocalClassRef = ScopedLocalRef<jclass>;
using TScopedLocalObjectArrayRef = ScopedLocalRef<jobjectArray>;
using TScopedLocalIntArrayRef = ScopedLocalRef<jintArray>;
using TScopedLocalByteArrayRef = ScopedLocalRef<jbyteArray>;
jobject GetNewParcelablePointD(JNIEnv * env, m2::PointD const & point);
jobject GetNewPoint(JNIEnv * env, m2::PointD const & point);
jobject GetNewPoint(JNIEnv * env, m2::PointI const & point);
template<typename TValue, typename TToJavaFn>
jobjectArray ToJavaArray(JNIEnv * env, jclass clazz, vector<TValue> const & src, TToJavaFn && toJavaFn)
{
int const size = src.size();
auto jArray = env->NewObjectArray(size, clazz, 0);
for (size_t i = 0; i < size; i++)
{
TScopedLocalRef jItem(env, toJavaFn(env, src[i]));
env->SetObjectArrayElement(jArray, i, jItem.get());
}
return jArray;
}
jobjectArray ToJavaStringArray(JNIEnv * env, vector<string> const & src);
void DumpDalvikReferenceTables();
string ToNativeString(JNIEnv * env, jstring str);
// Converts UTF-8 array to native UTF-8 string. Result differs from simple GetStringUTFChars call for characters greater than U+10000,
// since jni uses modified UTF (MUTF-8) for strings.
string ToNativeString(JNIEnv * env, jbyteArray const & utfBytes);
jstring ToJavaString(JNIEnv * env, char const * s);
inline jstring ToJavaString(JNIEnv * env, string const & s)
{
return ToJavaString(env, s.c_str());
}
jclass GetStringClass(JNIEnv * env);
char const * GetStringClassName();
string DescribeException();
shared_ptr<jobject> make_global_ref(jobject obj);
using TScopedLocalRef = ScopedLocalRef<jobject>;
using TScopedLocalClassRef = ScopedLocalRef<jclass>;
using TScopedLocalObjectArrayRef = ScopedLocalRef<jobjectArray>;
using TScopedLocalIntArrayRef = ScopedLocalRef<jintArray>;
using TScopedLocalByteArrayRef = ScopedLocalRef<jbyteArray>;
jobject GetNewParcelablePointD(JNIEnv * env, m2::PointD const & point);
jobject GetNewPoint(JNIEnv * env, m2::PointD const & point);
jobject GetNewPoint(JNIEnv * env, m2::PointI const & point);
template<typename TValue, typename TToJavaFn>
jobjectArray ToJavaArray(JNIEnv * env, jclass clazz, vector<TValue> const & src, TToJavaFn && toJavaFn)
{
int const size = src.size();
auto jArray = env->NewObjectArray(size, clazz, 0);
for (size_t i = 0; i < size; i++)
{
TScopedLocalRef jItem(env, toJavaFn(env, src[i]));
env->SetObjectArrayElement(jArray, i, jItem.get());
}
return jArray;
}
jobjectArray ToJavaStringArray(JNIEnv * env, vector<string> const & src);
void DumpDalvikReferenceTables();
}