From 74f197caedf00df80c411f6cfb299fae5822adba Mon Sep 17 00:00:00 2001 From: JosJuice Date: Mon, 6 Jul 2020 16:57:49 +0200 Subject: Android: Expose a proper interface for C++ IniFile class Replaces the inflexible INI functions in NativeLibrary. --- Source/Android/jni/AndroidCommon/IDCache.cpp | 51 ++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'Source/Android/jni/AndroidCommon/IDCache.cpp') diff --git a/Source/Android/jni/AndroidCommon/IDCache.cpp b/Source/Android/jni/AndroidCommon/IDCache.cpp index 32160edaee..8383f8ed68 100644 --- a/Source/Android/jni/AndroidCommon/IDCache.cpp +++ b/Source/Android/jni/AndroidCommon/IDCache.cpp @@ -30,6 +30,12 @@ static jclass s_linked_hash_map_class; static jmethodID s_linked_hash_map_init; static jmethodID s_linked_hash_map_put; +static jclass s_ini_file_class; +static jfieldID s_ini_file_pointer; +static jclass s_ini_file_section_class; +static jfieldID s_ini_file_section_pointer; +static jmethodID s_ini_file_section_constructor; + namespace IDCache { JNIEnv* GetEnvForThread() @@ -89,6 +95,7 @@ jmethodID GetAnalyticsValue() { return s_get_analytics_value; } + jclass GetGameFileClass() { return s_game_file_class; @@ -129,6 +136,31 @@ jmethodID GetLinkedHashMapPut() return s_linked_hash_map_put; } +jclass GetIniFileClass() +{ + return s_ini_file_class; +} + +jfieldID GetIniFilePointer() +{ + return s_ini_file_pointer; +} + +jclass GetIniFileSectionClass() +{ + return s_ini_file_section_class; +} + +jfieldID GetIniFileSectionPointer() +{ + return s_ini_file_section_pointer; +} + +jmethodID GetIniFileSectionConstructor() +{ + return s_ini_file_section_constructor; +} + } // namespace IDCache #ifdef __cplusplus @@ -150,16 +182,19 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) s_do_rumble = env->GetStaticMethodID(s_native_library_class, "rumble", "(ID)V"); s_get_update_touch_pointer = env->GetStaticMethodID(s_native_library_class, "updateTouchPointer", "()V"); + env->DeleteLocalRef(native_library_class); const jclass game_file_class = env->FindClass("org/dolphinemu/dolphinemu/model/GameFile"); s_game_file_class = reinterpret_cast(env->NewGlobalRef(game_file_class)); s_game_file_pointer = env->GetFieldID(game_file_class, "mPointer", "J"); s_game_file_constructor = env->GetMethodID(game_file_class, "", "(J)V"); + env->DeleteLocalRef(game_file_class); const jclass game_file_cache_class = env->FindClass("org/dolphinemu/dolphinemu/model/GameFileCache"); s_game_file_cache_class = reinterpret_cast(env->NewGlobalRef(game_file_cache_class)); s_game_file_cache_pointer = env->GetFieldID(game_file_cache_class, "mPointer", "J"); + env->DeleteLocalRef(game_file_cache_class); const jclass analytics_class = env->FindClass("org/dolphinemu/dolphinemu/utils/Analytics"); s_analytics_class = reinterpret_cast(env->NewGlobalRef(analytics_class)); @@ -167,6 +202,20 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) env->GetStaticMethodID(s_analytics_class, "sendReport", "(Ljava/lang/String;[B)V"); s_get_analytics_value = env->GetStaticMethodID(s_analytics_class, "getValue", "(Ljava/lang/String;)Ljava/lang/String;"); + env->DeleteLocalRef(analytics_class); + + const jclass ini_file_class = env->FindClass("org/dolphinemu/dolphinemu/utils/IniFile"); + s_ini_file_class = reinterpret_cast(env->NewGlobalRef(ini_file_class)); + s_ini_file_pointer = env->GetFieldID(ini_file_class, "mPointer", "J"); + env->DeleteLocalRef(ini_file_class); + + const jclass ini_file_section_class = + env->FindClass("org/dolphinemu/dolphinemu/utils/IniFile$Section"); + s_ini_file_section_class = reinterpret_cast(env->NewGlobalRef(ini_file_section_class)); + s_ini_file_section_pointer = env->GetFieldID(ini_file_section_class, "mPointer", "J"); + s_ini_file_section_constructor = env->GetMethodID( + ini_file_section_class, "", "(Lorg/dolphinemu/dolphinemu/utils/IniFile;J)V"); + env->DeleteLocalRef(ini_file_section_class); const jclass map_class = env->FindClass("java/util/LinkedHashMap"); s_linked_hash_map_class = reinterpret_cast(env->NewGlobalRef(map_class)); @@ -188,6 +237,8 @@ void JNI_OnUnload(JavaVM* vm, void* reserved) env->DeleteGlobalRef(s_game_file_cache_class); env->DeleteGlobalRef(s_analytics_class); env->DeleteGlobalRef(s_linked_hash_map_class); + env->DeleteGlobalRef(s_ini_file_class); + env->DeleteGlobalRef(s_ini_file_section_class); } #ifdef __cplusplus -- cgit v1.2.3