summaryrefslogtreecommitdiff
path: root/Source/Android
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2022-12-27 22:28:06 +0100
committerJosJuice <josjuice@gmail.com>2022-12-27 22:59:42 +0100
commitb3a368ae06c5f82afdd617355afba388c90d19e8 (patch)
tree846b20960fb4ad0c3b497b004809079d215751b6 /Source/Android
parent0b9351c194c8451576b183971e363ceaf658a448 (diff)
Android: Add VectorToJObjectArray utility function
Diffstat (limited to 'Source/Android')
-rw-r--r--Source/Android/jni/AndroidCommon/AndroidCommon.cpp13
-rw-r--r--Source/Android/jni/AndroidCommon/AndroidCommon.h15
-rw-r--r--Source/Android/jni/Cheats/ARCheat.cpp9
-rw-r--r--Source/Android/jni/Cheats/GeckoCheat.cpp9
-rw-r--r--Source/Android/jni/Cheats/GraphicsModGroup.cpp11
-rw-r--r--Source/Android/jni/Cheats/PatchCheat.cpp9
6 files changed, 23 insertions, 43 deletions
diff --git a/Source/Android/jni/AndroidCommon/AndroidCommon.cpp b/Source/Android/jni/AndroidCommon/AndroidCommon.cpp
index 0a2667b1b6..53ef9174f4 100644
--- a/Source/Android/jni/AndroidCommon/AndroidCommon.cpp
+++ b/Source/Android/jni/AndroidCommon/AndroidCommon.cpp
@@ -20,7 +20,7 @@ std::string GetJString(JNIEnv* env, jstring jstr)
const jchar* jchars = env->GetStringChars(jstr, nullptr);
const jsize length = env->GetStringLength(jstr);
const std::u16string_view string_view(reinterpret_cast<const char16_t*>(jchars), length);
- const std::string converted_string = UTF16ToUTF8(string_view);
+ std::string converted_string = UTF16ToUTF8(string_view);
env->ReleaseStringChars(jstr, jchars);
return converted_string;
}
@@ -48,16 +48,9 @@ std::vector<std::string> JStringArrayToVector(JNIEnv* env, jobjectArray array)
return result;
}
-jobjectArray VectorToJStringArray(JNIEnv* env, std::vector<std::string> vector)
+jobjectArray VectorToJStringArray(JNIEnv* env, const std::vector<std::string>& vector)
{
- jobjectArray result = env->NewObjectArray(vector.size(), IDCache::GetStringClass(), nullptr);
- for (jsize i = 0; i < vector.size(); ++i)
- {
- jstring str = ToJString(env, vector[i]);
- env->SetObjectArrayElement(result, i, str);
- env->DeleteLocalRef(str);
- }
- return result;
+ return VectorToJObjectArray(env, vector, IDCache::GetStringClass(), ToJString);
}
bool IsPathAndroidContent(const std::string& uri)
diff --git a/Source/Android/jni/AndroidCommon/AndroidCommon.h b/Source/Android/jni/AndroidCommon/AndroidCommon.h
index 5f1b4e1d51..bb300efc9f 100644
--- a/Source/Android/jni/AndroidCommon/AndroidCommon.h
+++ b/Source/Android/jni/AndroidCommon/AndroidCommon.h
@@ -13,7 +13,20 @@ std::string GetJString(JNIEnv* env, jstring jstr);
jstring ToJString(JNIEnv* env, const std::string& str);
std::vector<std::string> JStringArrayToVector(JNIEnv* env, jobjectArray array);
-jobjectArray VectorToJStringArray(JNIEnv* env, std::vector<std::string> vector);
+jobjectArray VectorToJStringArray(JNIEnv* env, const std::vector<std::string>& vector);
+
+template <typename T, typename F>
+jobjectArray VectorToJObjectArray(JNIEnv* env, const std::vector<T>& vector, jclass clazz, F f)
+{
+ jobjectArray result = env->NewObjectArray(vector.size(), clazz, nullptr);
+ for (jsize i = 0; i < vector.size(); ++i)
+ {
+ jobject obj = f(env, vector[i]);
+ env->SetObjectArrayElement(result, i, obj);
+ env->DeleteLocalRef(obj);
+ }
+ return result;
+}
// Returns true if the given path should be opened as Android content instead of a normal file.
bool IsPathAndroidContent(const std::string& uri);
diff --git a/Source/Android/jni/Cheats/ARCheat.cpp b/Source/Android/jni/Cheats/ARCheat.cpp
index 14da758539..3211e35c18 100644
--- a/Source/Android/jni/Cheats/ARCheat.cpp
+++ b/Source/Android/jni/Cheats/ARCheat.cpp
@@ -147,14 +147,7 @@ Java_org_dolphinemu_dolphinemu_features_cheats_model_ARCheat_loadCodes(JNIEnv* e
const std::vector<ActionReplay::ARCode> codes =
ActionReplay::LoadCodes(game_ini_default, game_ini_local);
- const jobjectArray array =
- env->NewObjectArray(static_cast<jsize>(codes.size()), IDCache::GetARCheatClass(), nullptr);
-
- jsize i = 0;
- for (const ActionReplay::ARCode& code : codes)
- env->SetObjectArrayElement(array, i++, ARCheatToJava(env, code));
-
- return array;
+ return VectorToJObjectArray(env, codes, IDCache::GetARCheatClass(), ARCheatToJava);
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_cheats_model_ARCheat_saveCodes(
diff --git a/Source/Android/jni/Cheats/GeckoCheat.cpp b/Source/Android/jni/Cheats/GeckoCheat.cpp
index 15038984c2..eb1df24947 100644
--- a/Source/Android/jni/Cheats/GeckoCheat.cpp
+++ b/Source/Android/jni/Cheats/GeckoCheat.cpp
@@ -155,14 +155,7 @@ Java_org_dolphinemu_dolphinemu_features_cheats_model_GeckoCheat_loadCodes(JNIEnv
const std::vector<Gecko::GeckoCode> codes = Gecko::LoadCodes(game_ini_default, game_ini_local);
- const jobjectArray array =
- env->NewObjectArray(static_cast<jsize>(codes.size()), IDCache::GetGeckoCheatClass(), nullptr);
-
- jsize i = 0;
- for (const Gecko::GeckoCode& code : codes)
- env->SetObjectArrayElement(array, i++, GeckoCheatToJava(env, code));
-
- return array;
+ return VectorToJObjectArray(env, codes, IDCache::GetGeckoCheatClass(), GeckoCheatToJava);
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_cheats_model_GeckoCheat_saveCodes(
diff --git a/Source/Android/jni/Cheats/GraphicsModGroup.cpp b/Source/Android/jni/Cheats/GraphicsModGroup.cpp
index e7a9329b53..c21584f326 100644
--- a/Source/Android/jni/Cheats/GraphicsModGroup.cpp
+++ b/Source/Android/jni/Cheats/GraphicsModGroup.cpp
@@ -62,14 +62,9 @@ Java_org_dolphinemu_dolphinemu_features_cheats_model_GraphicsModGroup_getMods(JN
mods.push_back(&mod);
}
- const jobjectArray array =
- env->NewObjectArray(static_cast<jsize>(mods.size()), IDCache::GetGraphicsModClass(), nullptr);
-
- jsize i = 0;
- for (GraphicsModConfig* mod : mods)
- env->SetObjectArrayElement(array, i++, GraphicsModToJava(env, mod, obj));
-
- return array;
+ return VectorToJObjectArray(
+ env, mods, IDCache::GetGraphicsModClass(),
+ [obj](JNIEnv* env, GraphicsModConfig* mod) { return GraphicsModToJava(env, mod, obj); });
}
JNIEXPORT void JNICALL
diff --git a/Source/Android/jni/Cheats/PatchCheat.cpp b/Source/Android/jni/Cheats/PatchCheat.cpp
index 37a65b21aa..7958fbdf1c 100644
--- a/Source/Android/jni/Cheats/PatchCheat.cpp
+++ b/Source/Android/jni/Cheats/PatchCheat.cpp
@@ -134,14 +134,7 @@ Java_org_dolphinemu_dolphinemu_features_cheats_model_PatchCheat_loadCodes(JNIEnv
std::vector<PatchEngine::Patch> patches;
PatchEngine::LoadPatchSection("OnFrame", &patches, game_ini_default, game_ini_local);
- const jobjectArray array = env->NewObjectArray(static_cast<jsize>(patches.size()),
- IDCache::GetPatchCheatClass(), nullptr);
-
- jsize i = 0;
- for (const PatchEngine::Patch& patch : patches)
- env->SetObjectArrayElement(array, i++, PatchCheatToJava(env, patch));
-
- return array;
+ return VectorToJObjectArray(env, patches, IDCache::GetPatchCheatClass(), PatchCheatToJava);
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_cheats_model_PatchCheat_saveCodes(