diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java index 974832878e..dd2c4e8407 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java @@ -387,6 +387,11 @@ public final class NativeLibrary public static native void Run(String[] path, boolean riivolution, String savestatePath, boolean deleteSavestate); + /** + * Begins emulation of the System Menu. + */ + public static native void RunSystemMenu(); + public static native void ChangeDisc(String path); // Surface Handling diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp index 326995bd39..46b2c17680 100644 --- a/Source/Android/jni/MainAndroid.cpp +++ b/Source/Android/jni/MainAndroid.cpp @@ -32,6 +32,7 @@ #include "Core/Boot/Boot.h" #include "Core/BootManager.h" +#include "Core/CommonTitles.h" #include "Core/ConfigLoaders/GameConfigLoader.h" #include "Core/ConfigManager.h" #include "Core/Core.h" @@ -547,21 +548,14 @@ static float GetRenderSurfaceScale(JNIEnv* env) return env->CallStaticFloatMethod(native_library_class, get_render_surface_scale_method); } -static void Run(JNIEnv* env, const std::vector& paths, bool riivolution, - BootSessionData boot_session_data = BootSessionData()) +static void Run(JNIEnv* env, std::unique_ptr&& boot, bool riivolution) { - ASSERT(!paths.empty()); - __android_log_print(ANDROID_LOG_INFO, DOLPHIN_TAG, "Running : %s", paths[0].c_str()); - std::unique_lock host_identity_guard(s_host_identity_lock); WiimoteReal::InitAdapterClass(); s_have_wm_user_stop = false; - std::unique_ptr boot = - BootParameters::GenerateFromFile(paths, std::move(boot_session_data)); - if (riivolution && std::holds_alternative(boot->parameters)) { const std::string& riivolution_dir = File::GetUserPath(D_RIIVOLUTION_IDX); @@ -624,6 +618,15 @@ static void Run(JNIEnv* env, const std::vector& paths, bool riivolu IDCache::GetFinishEmulationActivity()); } +static void Run(JNIEnv* env, const std::vector& paths, bool riivolution, + BootSessionData boot_session_data = BootSessionData()) +{ + ASSERT(!paths.empty()); + __android_log_print(ANDROID_LOG_INFO, DOLPHIN_TAG, "Running : %s", paths[0].c_str()); + + Run(env, BootParameters::GenerateFromFile(paths, std::move(boot_session_data)), riivolution); +} + JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run___3Ljava_lang_String_2Z( JNIEnv* env, jclass, jobjectArray jPaths, jboolean jRiivolution) { @@ -641,6 +644,12 @@ Java_org_dolphinemu_dolphinemu_NativeLibrary_Run___3Ljava_lang_String_2ZLjava_la BootSessionData(GetJString(env, jSavestate), delete_state)); } +JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_RunSystemMenu(JNIEnv* env, + jclass) +{ + Run(env, std::make_unique(BootParameters::NANDTitle{Titles::SYSTEM_MENU}), false); +} + JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_ChangeDisc(JNIEnv* env, jclass, jstring jFile) {