From e65ca8b90764402bd51c8108835e6ce1a3a9dbcd Mon Sep 17 00:00:00 2001
From: JosJuice <josjuice@gmail.com>
Date: Wed, 3 Aug 2022 15:11:13 +0200
Subject: [PATCH] android: Deduplicate GetJString

---
 src/android/app/src/main/jni/CMakeLists.txt   |  2 ++
 .../jni/android_common/android_common.cpp     | 20 +++++++++++++++++++
 .../main/jni/android_common/android_common.h  | 11 ++++++++++
 .../app/src/main/jni/applets/swkbd.cpp        | 14 +++----------
 src/android/app/src/main/jni/native.cpp       | 12 +----------
 5 files changed, 37 insertions(+), 22 deletions(-)
 create mode 100644 src/android/app/src/main/jni/android_common/android_common.cpp
 create mode 100644 src/android/app/src/main/jni/android_common/android_common.h

diff --git a/src/android/app/src/main/jni/CMakeLists.txt b/src/android/app/src/main/jni/CMakeLists.txt
index 77b95130d..443b39d57 100644
--- a/src/android/app/src/main/jni/CMakeLists.txt
+++ b/src/android/app/src/main/jni/CMakeLists.txt
@@ -1,4 +1,6 @@
 add_library(citra-android SHARED
+    android_common/android_common.cpp
+    android_common/android_common.h
     applets/mii_selector.cpp
     applets/mii_selector.h
     applets/swkbd.cpp
diff --git a/src/android/app/src/main/jni/android_common/android_common.cpp b/src/android/app/src/main/jni/android_common/android_common.cpp
new file mode 100644
index 000000000..b00d9a171
--- /dev/null
+++ b/src/android/app/src/main/jni/android_common/android_common.cpp
@@ -0,0 +1,20 @@
+// Copyright 2022 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "jni/android_common/android_common.h"
+
+#include <string>
+
+#include <jni.h>
+
+std::string GetJString(JNIEnv *env, jstring jstr) {
+    if (!jstr) {
+        return {};
+    }
+
+    const char *s = env->GetStringUTFChars(jstr, nullptr);
+    std::string result = s;
+    env->ReleaseStringUTFChars(jstr, s);
+    return result;
+}
diff --git a/src/android/app/src/main/jni/android_common/android_common.h b/src/android/app/src/main/jni/android_common/android_common.h
new file mode 100644
index 000000000..50b4c8d22
--- /dev/null
+++ b/src/android/app/src/main/jni/android_common/android_common.h
@@ -0,0 +1,11 @@
+// Copyright 2022 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <string>
+
+#include <jni.h>
+
+std::string GetJString(JNIEnv* env, jstring jstr);
diff --git a/src/android/app/src/main/jni/applets/swkbd.cpp b/src/android/app/src/main/jni/applets/swkbd.cpp
index 062d307a6..f5babae9d 100644
--- a/src/android/app/src/main/jni/applets/swkbd.cpp
+++ b/src/android/app/src/main/jni/applets/swkbd.cpp
@@ -3,22 +3,14 @@
 // Refer to the license.txt file included.
 
 #include <map>
+
 #include <jni.h>
+
 #include "core/core.h"
+#include "jni/android_common/android_common.h"
 #include "jni/applets/swkbd.h"
 #include "jni/id_cache.h"
 
-static std::string GetJString(JNIEnv* env, jstring jstr) {
-    if (!jstr) {
-        return {};
-    }
-
-    const char* s = env->GetStringUTFChars(jstr, nullptr);
-    std::string result = s;
-    env->ReleaseStringUTFChars(jstr, s);
-    return result;
-}
-
 static jclass s_software_keyboard_class;
 static jclass s_keyboard_config_class;
 static jclass s_keyboard_data_class;
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index 6dffc1225..ecae76fe2 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -27,6 +27,7 @@
 #include "core/hle/service/nfc/nfc.h"
 #include "core/savestate.h"
 #include "core/settings.h"
+#include "jni/android_common/android_common.h"
 #include "jni/applets/mii_selector.h"
 #include "jni/applets/swkbd.h"
 #include "jni/camera/ndk_camera.h"
@@ -58,17 +59,6 @@ std::condition_variable running_cv;
 
 } // Anonymous namespace
 
-static std::string GetJString(JNIEnv* env, jstring jstr) {
-    if (!jstr) {
-        return {};
-    }
-
-    const char* s = env->GetStringUTFChars(jstr, nullptr);
-    std::string result = s;
-    env->ReleaseStringUTFChars(jstr, s);
-    return result;
-}
-
 static bool DisplayAlertMessage(const char* caption, const char* text, bool yes_no) {
     JNIEnv* env = IDCache::GetEnvForThread();