From 55f02684f57326e9c0d2e83ea1982d5686db5fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 20 Oct 2026 12:42:07 +0200 Subject: [PATCH] Android: Enable "Copy deep link" on the game screen, copying the content URI PPSSPP has access to the URI, so a frontend or adb can launch the game with it, which isn't true of a plain path on modern Android. Co-Authored-By: Claude Opus 5.5 (1M context) --- Common/System/System.h | 2 +- UI/GameScreen.cpp | 5 +++++ android/jni/app-android.cpp | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Common/System/System.h b/Common/System/System.h index 4609088e75..43b9edaf90 100644 --- a/Common/System/System.h +++ b/Common/System/System.h @@ -167,7 +167,7 @@ enum SystemProperty { SYSPROP_HAS_LOGIN_DIALOG, SYSPROP_HAS_TEXT_CLIPBOARD, SYSPROP_HAS_TEXT_INPUT_DIALOG, // Indicates that System_InputBoxGetString is available. - SYSPROP_HAS_DEEP_LINKS, // ios-style deep links + SYSPROP_HAS_DEEP_LINKS, // iOS deep links, Android content URIs SYSPROP_CAN_CREATE_SHORTCUT, SYSPROP_CAN_SHOW_FILE, diff --git a/UI/GameScreen.cpp b/UI/GameScreen.cpp index b25edbe658..0468fd7b64 100644 --- a/UI/GameScreen.cpp +++ b/UI/GameScreen.cpp @@ -63,6 +63,11 @@ // This is in an objective-C file. #if PPSSPP_PLATFORM(IOS) void copyDeepLinkForPath(std::string_view filePath); +#elif PPSSPP_PLATFORM(ANDROID) +// The path is a content URI that PPSSPP has access to, so frontends and adb can launch it. +void copyDeepLinkForPath(std::string_view filePath) { + System_CopyStringToClipboard(std::string(filePath)); +} #else // dummy void copyDeepLinkForPath(std::string_view) {} diff --git a/android/jni/app-android.cpp b/android/jni/app-android.cpp index cd6f02e710..99e6b42cf9 100644 --- a/android/jni/app-android.cpp +++ b/android/jni/app-android.cpp @@ -404,6 +404,8 @@ bool System_GetPropertyBool(SystemProperty prop) { return androidVersion >= 11; // honeycomb case SYSPROP_HAS_TEXT_CLIPBOARD: return true; + case SYSPROP_HAS_DEEP_LINKS: + return true; // The game's content URI, launchable through an intent. case SYSPROP_CAN_LAUNCH_URL: return true; case SYSPROP_HAS_OPEN_DIRECTORY: