You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
2.0 KiB
50 lines
2.0 KiB
// 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
|