aboutsummaryrefslogtreecommitdiff
path: root/src/common/android/applets/web_browser.cpp
diff options
context:
space:
mode:
authorMaufeat <sahyno1996@gmail.com>2026-01-17 01:48:15 +0100
committercrueter <crueter@eden-emu.dev>2026-01-17 01:48:15 +0100
commitae501e256ea462268dbae8109ad07ef457c4fd8e (patch)
treeb36691663a10be26462d68f562ad51b8c697ee7b /src/common/android/applets/web_browser.cpp
parentb7417f68ce10145e5eb282110e7d50f46ec8047b (diff)
[bcat/news/web/am] Implement news applet, proper TLV return, external web browser URL and qlaunch app sorting (#3308)
This pulls eden releases changelog & text from our github releases. We don't store the msgpack file but rather generate them in-memory for the News Applet. Uses cache folder. Files generated are: - cache/news/github_releases.json - cache/news/eden_logo.jpg - cache/news/news_read Additional changes: - Proper TLV returning for online web applet, to open external URL - Add applet type `LHub` to properly close, as it also uses TLV return - qlaunch app sorting, adds another cached .json to track last launched app timestamps and sort them accordingly Co-authored-by: crueter <crueter@eden-emu.dev> Co-authored-by: DraVee <dravee@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3308 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: DraVee <dravee@eden-emu.dev> Reviewed-by: Lizzie <lizzie@eden-emu.dev> Co-authored-by: Maufeat <sahyno1996@gmail.com> Co-committed-by: Maufeat <sahyno1996@gmail.com>
Diffstat (limited to 'src/common/android/applets/web_browser.cpp')
-rw-r--r--src/common/android/applets/web_browser.cpp50
1 files changed, 50 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