aboutsummaryrefslogtreecommitdiff
path: root/src/common/android/applets
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/android/applets')
-rw-r--r--src/common/android/applets/web_browser.cpp50
-rw-r--r--src/common/android/applets/web_browser.h30
2 files changed, 80 insertions, 0 deletions
diff --git a/src/common/android/applets/web_browser.cpp b/src/common/android/applets/web_browser.cpp
new file mode 100644
index 0000000000..cf844ff5fc
--- /dev/null
+++ b/src/common/android/applets/web_browser.cpp
@@ -0,0 +1,50 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "common/android/android_common.h"
+#include "common/android/id_cache.h"
+#include "common/android/applets/web_browser.h"
+#include "common/logging/log.h"
+
+static jclass s_native_library_class = nullptr;
+static jmethodID s_open_external_url = nullptr;
+
+namespace Common::Android::WebBrowser {
+
+void InitJNI(JNIEnv* env) {
+ const jclass local = env->FindClass("org/yuzu/yuzu_emu/NativeLibrary");
+ s_native_library_class = static_cast<jclass>(env->NewGlobalRef(local));
+ env->DeleteLocalRef(local);
+ s_open_external_url = env->GetStaticMethodID(s_native_library_class, "openExternalUrl", "(Ljava/lang/String;)V");
+}
+
+void CleanupJNI(JNIEnv* env) {
+ if (s_native_library_class != nullptr) {
+ env->DeleteGlobalRef(s_native_library_class);
+ s_native_library_class = nullptr;
+ }
+ s_open_external_url = nullptr;
+}
+
+void AndroidWebBrowser::OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback, OpenWebPageCallback callback) const {
+ LOG_WARNING(Frontend, "(STUBBED)");
+ callback(Service::AM::Frontend::WebExitReason::WindowClosed, "");
+}
+
+void AndroidWebBrowser::OpenExternalWebPage(const std::string& external_url, OpenWebPageCallback callback) const {
+ // do a dedicated thread, calling from the this thread crashed CPU fiber.
+ Common::Android::RunJNIOnFiber<void>([&](JNIEnv* env) {
+ if (env != nullptr && s_native_library_class != nullptr && s_open_external_url != nullptr) {
+ const jstring j_url = Common::Android::ToJString(env, external_url);
+ env->CallStaticVoidMethod(s_native_library_class, s_open_external_url, j_url);
+ env->DeleteLocalRef(j_url);
+ } else {
+ LOG_ERROR(Frontend, "JNI not initialized, cannot open {}", external_url);
+ }
+ return;
+ });
+
+ callback(Service::AM::Frontend::WebExitReason::WindowClosed, external_url);
+}
+
+} // namespace Common::Android::WebBrowser
diff --git a/src/common/android/applets/web_browser.h b/src/common/android/applets/web_browser.h
new file mode 100644
index 0000000000..a70903e3be
--- /dev/null
+++ b/src/common/android/applets/web_browser.h
@@ -0,0 +1,30 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#pragma once
+
+#include <jni.h>
+#include <string>
+
+#include "core/frontend/applets/web_browser.h"
+
+namespace Common::Android::WebBrowser {
+
+class AndroidWebBrowser final : public Core::Frontend::WebBrowserApplet {
+public:
+ ~AndroidWebBrowser() override = default;
+
+ void Close() const override {}
+
+ void OpenLocalWebPage(const std::string& local_url,
+ ExtractROMFSCallback extract_romfs_callback,
+ OpenWebPageCallback callback) const override;
+
+ void OpenExternalWebPage(const std::string& external_url,
+ OpenWebPageCallback callback) const override;
+};
+
+void InitJNI(JNIEnv* env);
+void CleanupJNI(JNIEnv* env);
+
+} // namespace Common::Android::WebBrowser