diff --git a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java index 9a0565d2b..a1f0df823 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.java @@ -638,7 +638,7 @@ public final class EmulationActivity extends AppCompatActivity { @IntDef({MENU_ACTION_EDIT_CONTROLS_PLACEMENT, MENU_ACTION_TOGGLE_CONTROLS, MENU_ACTION_ADJUST_SCALE, MENU_ACTION_EXIT, MENU_ACTION_SHOW_FPS, MENU_ACTION_SCREEN_LAYOUT_LANDSCAPE, MENU_ACTION_SCREEN_LAYOUT_PORTRAIT, MENU_ACTION_SCREEN_LAYOUT_SINGLE, MENU_ACTION_SCREEN_LAYOUT_SIDEBYSIDE, - MENU_ACTION_SWAP_SCREENS, MENU_ACTION_RESET_OVERLAY, MENU_ACTION_SHOW_OVERLAY}) + MENU_ACTION_SWAP_SCREENS, MENU_ACTION_RESET_OVERLAY, MENU_ACTION_SHOW_OVERLAY, MENU_ACTION_OPEN_SETTINGS}) public @interface MenuAction { } } diff --git a/src/android/app/src/main/jni/game_info.cpp b/src/android/app/src/main/jni/game_info.cpp index 8ec312612..00361c83c 100644 --- a/src/android/app/src/main/jni/game_info.cpp +++ b/src/android/app/src/main/jni/game_info.cpp @@ -68,7 +68,7 @@ char16_t* GetTitle(std::string physical_name) { char16_t* title; title = reinterpret_cast(smdh.titles[static_cast(language)].long_title.data()); - LOG_INFO(Frontend, "Title: %s", Common::UTF16ToUTF8(title).data()); + LOG_INFO(Frontend, "Title: {}", Common::UTF16ToUTF8(title)); return title; } @@ -91,7 +91,7 @@ char16_t* GetPublisher(std::string physical_name) { publisher = reinterpret_cast(smdh.titles[static_cast(language)].publisher.data()); - LOG_INFO(Frontend, "Publisher: %s", Common::UTF16ToUTF8(publisher).data()); + LOG_INFO(Frontend, "Publisher: {}", Common::UTF16ToUTF8(publisher)); return publisher; } diff --git a/src/android/app/src/main/jni/game_info.h b/src/android/app/src/main/jni/game_info.h index 56880c5fe..a3712851c 100644 --- a/src/android/app/src/main/jni/game_info.h +++ b/src/android/app/src/main/jni/game_info.h @@ -14,4 +14,4 @@ char16_t* GetTitle(std::string physical_name); char16_t* GetPublisher(std::string physical_name); std::vector GetIcon(std::string physical_name); -} // namespace GameInfo \ No newline at end of file +} // namespace GameInfo diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index c8a028e7d..b1107a7a3 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -3,32 +3,21 @@ // Refer to the license.txt file included. #include -#include #include -#include #include -// This needs to be included before getopt.h because the latter #defines symbols used by it -#include "common/microprofile.h" - -#include - #include -#include #include "common/file_util.h" #include "common/logging/log.h" +#include "common/microprofile.h" #include "common/scm_rev.h" #include "common/scope_exit.h" #include "common/string_util.h" #include "core/core.h" -#include "core/file_sys/cia_container.h" #include "core/frontend/applets/default_applets.h" #include "core/frontend/scope_acquire_context.h" -#include "core/gdbstub/gdbstub.h" #include "core/hle/service/am/am.h" -#include "core/loader/loader.h" -#include "core/movie.h" #include "core/settings.h" #include "jni/button_manager.h" #include "jni/config.h" @@ -37,17 +26,12 @@ #include "jni/id_cache.h" #include "jni/native.h" #include "jni/ndk_motion.h" -#include "network/network.h" #include "video_core/renderer_base.h" -#include "video_core/video_core.h" namespace { ANativeWindow* s_surf; -jclass s_jni_class; -jmethodID s_jni_method_alert; - std::unique_ptr window; std::atomic is_running{false}; @@ -118,7 +102,6 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) { LOG_INFO(Frontend, "Citra is Starting"); MicroProfileOnThreadCreate("EmuThread"); - SCOPE_EXIT({ MicroProfileShutdown(); }); if (filepath.empty()) { LOG_CRITICAL(Frontend, "Failed to load ROM: No ROM specified"); @@ -126,23 +109,18 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) { } window = std::make_unique(s_surf); - SCOPE_EXIT({ window.reset(); }); Core::System& system{Core::System::GetInstance()}; - SCOPE_EXIT({ system.Shutdown(); }); - { - // Forces a config reload on game boot, if the user changed settings in the UI - Config config; - Settings::Apply(); - } + // Forces a config reload on game boot, if the user changed settings in the UI + Config{}; + Settings::Apply(); // Register frontend applets Frontend::RegisterDefaultApplets(); system.RegisterSoftwareKeyboard(std::make_shared()); InputManager::Init(); - SCOPE_EXIT({ InputManager::Shutdown(); }); Frontend::ScopeAcquireContext scope(*window); const Core::System::ResultStatus load_result{system.Load(*window, filepath)}; @@ -166,17 +144,25 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) { SCOPE_EXIT({ Settings::values.volume = volume; }); Settings::values.volume = 0; - std::unique_lock lock(paused_mutex); - running_cv.wait(lock, [] { return !pause_emulation || !is_running; }); + std::unique_lock pause_lock(paused_mutex); + running_cv.wait(pause_lock, [] { return !pause_emulation || !is_running; }); } } window->StopPresenting(); + system.Shutdown(); + window.reset(); + InputManager::Shutdown(); + MicroProfileShutdown(); + return Core::System::ResultStatus::Success; } -void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, jobject obj, - jobject surf) { +extern "C" { + +void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jobject surf) { s_surf = ANativeWindow_fromSurface(env, surf); if (window) { @@ -186,7 +172,9 @@ void Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, jobject LOG_INFO(Frontend, "Surface changed"); } -void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, jobject obj) { +void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, + [[maybe_unused]] [ + [maybe_unused]] jclass clazz) { ANativeWindow_release(s_surf); s_surf = nullptr; if (window) { @@ -194,16 +182,17 @@ void Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, jobje } } -void Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange( - JNIEnv* env, jclass clazz, jint layout_option, jint rotation) { +void Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jint layout_option, + jint rotation) { Settings::values.layout_option = static_cast(layout_option); VideoCore::g_renderer->UpdateCurrentFramebufferLayout(!(rotation % 2)); InputManager::screen_rotation = rotation; } -void Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env, jclass clazz, - jboolean swap_screens, - jint rotation) { +void Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env, [[maybe_unused]] jclass clazz, + jboolean swap_screens, jint rotation) { Settings::values.swap_screen = swap_screens; if (VideoCore::g_renderer) { VideoCore::g_renderer->UpdateCurrentFramebufferLayout(!(rotation % 2)); @@ -211,90 +200,100 @@ void Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env, jclass cla InputManager::screen_rotation = rotation; } -void Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory(JNIEnv* env, jobject obj, - jstring jDirectory) { - FileUtil::SetCurrentDir(GetJString(env, jDirectory)); +void Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_directory) { + FileUtil::SetCurrentDir(GetJString(env, j_directory)); } -void Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env, jobject obj) { +void Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env, + [[maybe_unused]] jclass clazz) { pause_emulation = false; running_cv.notify_all(); } -void Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation(JNIEnv* env, jobject obj) { +void Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation(JNIEnv* env, + [[maybe_unused]] jclass clazz) { pause_emulation = true; } -void Java_org_citra_citra_1emu_NativeLibrary_StopEmulation(JNIEnv* env, jobject obj) { +void Java_org_citra_citra_1emu_NativeLibrary_StopEmulation(JNIEnv* env, + [[maybe_unused]] jclass clazz) { is_running = false; pause_emulation = false; running_cv.notify_all(); } -jboolean Java_org_citra_citra_1emu_NativeLibrary_IsRunning(JNIEnv* env, jobject obj) { +jboolean Java_org_citra_citra_1emu_NativeLibrary_IsRunning(JNIEnv* env, + [[maybe_unused]] jclass clazz) { return static_cast(is_running); } -jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent(JNIEnv* env, jobject obj, - jstring jDevice, jint button, - jint pressed) { +jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_device, jint j_button, + jint action) { bool consumed{}; - if (pressed) { - consumed = InputManager::ButtonHandler()->PressKey(button); + if (action) { + consumed = InputManager::ButtonHandler()->PressKey(j_button); } else { - consumed = InputManager::ButtonHandler()->ReleaseKey(button); + consumed = InputManager::ButtonHandler()->ReleaseKey(j_button); } return static_cast(consumed); } -jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent(JNIEnv* env, jobject obj, - jstring jDevice, jint Axis, - jfloat x, jfloat y) { +jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_device, jint axis, + jfloat x, jfloat y) { // Clamp joystick movement to supported minimum and maximum // Citra uses an inverted y axis sent by the frontend x = std::clamp(x, -1.f, 1.f); y = std::clamp(-y, -1.f, 1.f); - return static_cast(InputManager::AnalogHandler()->MoveJoystick(Axis, x, y)); + return static_cast(InputManager::AnalogHandler()->MoveJoystick(axis, x, y)); } -jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent(JNIEnv* env, jobject obj, - jstring jDevice, - jint axis_id, - jfloat axis_val) { +jboolean Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_device, jint axis_id, + jfloat axis_val) { return static_cast( InputManager::ButtonHandler()->AnalogButtonEvent(axis_id, axis_val)); } -void Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent(JNIEnv* env, jobject obj, jfloat x, - jfloat y, jboolean pressed) { +void Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent(JNIEnv* env, + [[maybe_unused]] jclass clazz, jfloat x, + jfloat y, jboolean pressed) { window->OnTouchEvent((int)x, (int)y, (bool)pressed); } -void Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved(JNIEnv* env, jobject obj, jfloat x, - jfloat y) { +void Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved(JNIEnv* env, + [[maybe_unused]] jclass clazz, jfloat x, + jfloat y) { window->OnTouchMoved((int)x, (int)y); } -jintArray Java_org_citra_citra_1emu_NativeLibrary_GetBanner(JNIEnv* env, jobject obj, - jstring jFilepath) { - std::string filepath = GetJString(env, jFilepath); +jintArray Java_org_citra_citra_1emu_NativeLibrary_GetBanner(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_file) { + std::string filepath = GetJString(env, j_file); std::vector icon_data = GameInfo::GetIcon(filepath); if (icon_data.size() == 0) { return 0; } - jintArray Banner = env->NewIntArray(icon_data.size()); - env->SetIntArrayRegion(Banner, 0, env->GetArrayLength(Banner), + jintArray banner = env->NewIntArray(static_cast(icon_data.size())); + env->SetIntArrayRegion(banner, 0, env->GetArrayLength(banner), reinterpret_cast(icon_data.data())); - return Banner; + return banner; } -jstring Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, jobject obj, - jstring jFilepath) { - std::string filepath = GetJString(env, jFilepath); +jstring Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, [[maybe_unused]] jclass clazz, + jstring j_filename) { + std::string filepath = GetJString(env, j_filename); char16_t* Title = GameInfo::GetTitle(filepath); @@ -305,147 +304,167 @@ jstring Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, jobject ob return env->NewStringUTF(Common::UTF16ToUTF8(Title).data()); } -jstring Java_org_citra_citra_1emu_NativeLibrary_GetDescription(JNIEnv* env, jobject obj, - jstring jFilename) { - return jFilename; +jstring Java_org_citra_citra_1emu_NativeLibrary_GetDescription(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_filename) { + return j_filename; } -jstring Java_org_citra_citra_1emu_NativeLibrary_GetGameId(JNIEnv* env, jobject obj, - jstring jFilename) { - return jFilename; +jstring Java_org_citra_citra_1emu_NativeLibrary_GetGameId(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_filename) { + return j_filename; } -jint Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env, jobject obj, - jstring jFilename) { +jint Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env, [[maybe_unused]] jclass clazz, + jstring j_filename) { return 0; } -jstring Java_org_citra_citra_1emu_NativeLibrary_GetCompany(JNIEnv* env, jobject obj, - jstring jFilepath) { - std::string filepath = GetJString(env, jFilepath); +jstring Java_org_citra_citra_1emu_NativeLibrary_GetCompany(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_filename) { + std::string filepath = GetJString(env, j_filename); - char16_t* Publisher = GameInfo::GetPublisher(filepath); + char16_t* publisher = GameInfo::GetPublisher(filepath); - if (!Publisher) { + if (!publisher) { return nullptr; } - return env->NewStringUTF(Common::UTF16ToUTF8(Publisher).data()); + return env->NewStringUTF(Common::UTF16ToUTF8(publisher).data()); } -jlong Java_org_citra_citra_1emu_NativeLibrary_GetFilesize(JNIEnv* env, jobject obj, - jstring jFilename) { +jlong Java_org_citra_citra_1emu_NativeLibrary_GetFilesize(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_filename) { return 0; } -jstring Java_org_citra_citra_1emu_NativeLibrary_GetVersionString(JNIEnv* env, jobject obj) { +jstring Java_org_citra_citra_1emu_NativeLibrary_GetVersionString(JNIEnv* env, + [[maybe_unused]] jclass clazz) { return nullptr; } -jstring Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision(JNIEnv* env, jobject obj) { +jstring Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision(JNIEnv* env, + [[maybe_unused]] jclass clazz) { return nullptr; } -void Java_org_citra_citra_1emu_NativeLibrary_SaveScreenShot(JNIEnv* env, jobject obj) {} +void Java_org_citra_citra_1emu_NativeLibrary_SaveScreenShot(JNIEnv* env, + [[maybe_unused]] jclass clazz) {} -void Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env, jobject obj, jint api) {} +void Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env, [[maybe_unused]] jclass clazz, + jint api) {} -jstring Java_org_citra_citra_1emu_NativeLibrary_GetConfig(JNIEnv* env, jobject obj, - jstring jFile, jstring jSection, - jstring jKey, jstring jDefault) { +jstring Java_org_citra_citra_1emu_NativeLibrary_GetConfig(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_file, jstring j_section, + jstring j_key, jstring j_default) { return nullptr; } -void Java_org_citra_citra_1emu_NativeLibrary_SetConfig(JNIEnv* env, jobject obj, jstring jFile, - jstring jSection, jstring jKey, - jstring jValue) {} +void Java_org_citra_citra_1emu_NativeLibrary_SetConfig(JNIEnv* env, [[maybe_unused]] jclass clazz, + jstring j_file, jstring j_section, + jstring j_key, jstring j_value) {} -void Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env, jobject obj, - jstring jFile) {} +void Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env, [[maybe_unused]] jclass clazz, + jstring j_file) {} -void Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env, jobject obj, jint slot, - jboolean wait) {} +void Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env, [[maybe_unused]] jclass clazz, + jint slot, jboolean wait) {} -void Java_org_citra_citra_1emu_NativeLibrary_SaveStateAs(JNIEnv* env, jobject obj, jstring path, - jboolean wait) {} +void Java_org_citra_citra_1emu_NativeLibrary_SaveStateAs(JNIEnv* env, [[maybe_unused]] jclass clazz, + jstring path, jboolean wait) {} -void Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env, jobject obj, jint slot) {} +void Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env, [[maybe_unused]] jclass clazz, + jint slot) {} -void Java_org_citra_citra_1emu_NativeLibrary_LoadStateAs(JNIEnv* env, jobject obj, - jstring path) {} +void Java_org_citra_citra_1emu_NativeLibrary_LoadStateAs(JNIEnv* env, [[maybe_unused]] jclass clazz, + jstring path) {} void Java_org_citra_citra_1emu_utils_DirectoryInitialization_CreateUserDirectories( - JNIEnv* env, jobject obj) {} + JNIEnv* env, [[maybe_unused]] jclass clazz) {} -jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserDirectory(JNIEnv* env, jobject obj) { +jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserDirectory(JNIEnv* env, + [[maybe_unused]] jclass clazz) { return nullptr; } -void Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile() { - new Config(); +void Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile(JNIEnv* env, + [[maybe_unused]] jclass clazz) { + Config{}; } -jint Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env, jobject obj) { +jint Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env, + [[maybe_unused]] jclass clazz) { return 0; } -void Java_org_citra_citra_1emu_NativeLibrary_SetProfiling(JNIEnv* env, jobject obj, - jboolean enable) {} +void Java_org_citra_citra_1emu_NativeLibrary_SetProfiling(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jboolean enable) {} -void Java_org_citra_citra_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env, jobject obj) {} +void Java_org_citra_citra_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env, + [[maybe_unused]] jclass clazz) {} void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z( - JNIEnv* env, jobject obj, jstring jFile, jstring jSavestate, jboolean jDeleteSavestate) {} + JNIEnv* env, [[maybe_unused]] jclass clazz, jstring j_file, jstring j_savestate, + jboolean j_delete_savestate) {} -void Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings(JNIEnv* env, jclass type) { - Config{}; - Settings::Apply(); +void Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings(JNIEnv* env, + [[maybe_unused]] jclass clazz) { + Config{}; + Settings::Apply(); } -jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting(JNIEnv* env, jclass type, - jstring gameID_, - jstring Section_, jstring Key_) { - const char* gameID = env->GetStringUTFChars(gameID_, 0); - const char* Section = env->GetStringUTFChars(Section_, 0); - const char* Key = env->GetStringUTFChars(Key_, 0); +jstring Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_game_id, jstring j_section, + jstring j_key) { + std::string_view game_id = env->GetStringUTFChars(j_game_id, 0); + std::string_view section = env->GetStringUTFChars(j_section, 0); + std::string_view key = env->GetStringUTFChars(j_key, 0); // TODO - env->ReleaseStringUTFChars(gameID_, gameID); - env->ReleaseStringUTFChars(Section_, Section); - env->ReleaseStringUTFChars(Key_, Key); + env->ReleaseStringUTFChars(j_game_id, game_id.data()); + env->ReleaseStringUTFChars(j_section, section.data()); + env->ReleaseStringUTFChars(j_key, key.data()); return env->NewStringUTF(""); } -void Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting(JNIEnv* env, jclass type, - jstring gameID_, jstring Section_, - jstring Key_, jstring Value_) { - const char* gameID = env->GetStringUTFChars(gameID_, 0); - const char* Section = env->GetStringUTFChars(Section_, 0); - const char* Key = env->GetStringUTFChars(Key_, 0); - const char* Value = env->GetStringUTFChars(Value_, 0); +void Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_game_id, jstring j_section, + jstring j_key, jstring j_value) { + std::string_view game_id = env->GetStringUTFChars(j_game_id, 0); + std::string_view section = env->GetStringUTFChars(j_section, 0); + std::string_view key = env->GetStringUTFChars(j_key, 0); + std::string_view value = env->GetStringUTFChars(j_value, 0); // TODO - env->ReleaseStringUTFChars(gameID_, gameID); - env->ReleaseStringUTFChars(Section_, Section); - env->ReleaseStringUTFChars(Key_, Key); - env->ReleaseStringUTFChars(Value_, Value); + env->ReleaseStringUTFChars(j_game_id, game_id.data()); + env->ReleaseStringUTFChars(j_section, section.data()); + env->ReleaseStringUTFChars(j_key, key.data()); + env->ReleaseStringUTFChars(j_value, value.data()); } -void Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, jclass type, - jstring gameID_) { - const char* gameID = env->GetStringUTFChars(gameID_, 0); +void Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, [[maybe_unused]] jclass clazz, + jstring j_game_id) { + std::string_view game_id = env->GetStringUTFChars(j_game_id, 0); // TODO - env->ReleaseStringUTFChars(gameID_, gameID); + env->ReleaseStringUTFChars(j_game_id, game_id.data()); } -jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, jclass type) { +jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, + [[maybe_unused]] jclass clazz) { auto& core = Core::System::GetInstance(); - jdoubleArray jstats = env->NewDoubleArray(4); + jdoubleArray j_stats = env->NewDoubleArray(4); if (core.IsPoweredOn()) { auto results = core.GetAndResetPerfStats(); @@ -454,22 +473,23 @@ jdoubleArray Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, j double stats[4] = {results.system_fps, results.game_fps, results.frametime, results.emulation_speed}; - env->SetDoubleArrayRegion(jstats, 0, 4, stats); + env->SetDoubleArrayRegion(j_stats, 0, 4, stats); } - return jstats; + return j_stats; } void Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory( - JNIEnv* env, jclass type, jstring path_) { - const char* path = env->GetStringUTFChars(path_, 0); + JNIEnv* env, [[maybe_unused]] jclass clazz, jstring j_path) { + std::string_view path = env->GetStringUTFChars(j_path, 0); - env->ReleaseStringUTFChars(path_, path); + env->ReleaseStringUTFChars(j_path, path.data()); } -void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(JNIEnv* env, jclass type, - jstring path_) { - const std::string path = GetJString(env, path_); +void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_path) { + const std::string path = GetJString(env, j_path); if (is_running) { is_running = false; @@ -482,3 +502,5 @@ void Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2(JNIEnv* en IDCache::GetExitEmulationActivity(), static_cast(result)); } } + +} // extern "C" diff --git a/src/android/app/src/main/jni/native.h b/src/android/app/src/main/jni/native.h index a544bd9c4..5ab9552cd 100644 --- a/src/android/app/src/main/jni/native.h +++ b/src/android/app/src/main/jni/native.h @@ -12,166 +12,164 @@ extern "C" { #endif JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_UnPauseEmulation(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_PauseEmulation(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_StopEmulation(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_IsRunning(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadEvent( - JNIEnv* env, jobject obj, jstring jDevice, jint Button, jint Action); + JNIEnv* env, jclass clazz, jstring j_device, jint j_button, jint action); JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadMoveEvent( - JNIEnv* env, jobject obj, jstring jDevice, jint Axis, jfloat x, jfloat y); + JNIEnv* env, jclass clazz, jstring j_device, jint axis, jfloat x, jfloat y); JNIEXPORT jboolean JNICALL Java_org_citra_citra_1emu_NativeLibrary_onGamePadAxisEvent( - JNIEnv* env, jobject obj, jstring jDevice, jint axis_id, jfloat axis_val); + JNIEnv* env, jclass clazz, jstring j_device, jint axis_id, jfloat axis_val); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_onTouchEvent(JNIEnv* env, - jobject obj, - jfloat x, jfloat y, - jboolean pressed); + jclass clazz, jfloat x, + jfloat y, + jboolean pressed); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_onTouchMoved(JNIEnv* env, - jobject obj, - jfloat x, jfloat y); + jclass clazz, jfloat x, + jfloat y); JNIEXPORT jintArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetBanner(JNIEnv* env, - jobject obj, - jstring jFile); + jclass clazz, + jstring j_file); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetTitle(JNIEnv* env, - jobject obj, - jstring jFilename); + jclass clazz, + jstring j_filename); -JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetDescription( - JNIEnv* env, jobject obj, jstring jFilename); +JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetDescription(JNIEnv* env, + jclass clazz, + jstring j_filename); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetGameId(JNIEnv* env, - jobject obj, - jstring jFilename); + jclass clazz, + jstring j_filename); -JNIEXPORT jint JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env, - jobject obj, - jstring jFilename); +JNIEXPORT jint JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetCountry(JNIEnv* env, jclass clazz, + jstring j_filename); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetCompany(JNIEnv* env, - jobject obj, - jstring jFilename); + jclass clazz, + jstring j_filename); JNIEXPORT jlong JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetFilesize(JNIEnv* env, - jobject obj, - jstring jFilename); + jclass clazz, + jstring j_filename); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetVersionString(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetGitRevision(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveScreenShot(JNIEnv* env, - jobject obj); + jclass clazz); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env, - jobject obj, - jint api); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_eglBindAPI(JNIEnv* env, jclass clazz, + jint api); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetConfig( - JNIEnv* env, jobject obj, jstring jFile, jstring jSection, jstring jKey, jstring jDefault); + JNIEnv* env, jclass clazz, jstring j_file, jstring j_section, jstring j_key, jstring j_default); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetConfig( - JNIEnv* env, jobject obj, jstring jFile, jstring jSection, jstring jKey, jstring jValue); + JNIEnv* env, jclass clazz, jstring j_file, jstring j_section, jstring j_key, jstring j_value); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env, - jobject obj, - jstring jFile); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetFilename(JNIEnv* env, jclass clazz, + jstring j_file); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env, - jobject obj, jint slot, - jboolean wait); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveState(JNIEnv* env, jclass clazz, + jint slot, jboolean wait); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SaveStateAs(JNIEnv* env, - jobject obj, - jstring path, - jboolean wait); + jclass clazz, + jstring path, + jboolean wait); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env, - jobject obj, - jint slot); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_LoadState(JNIEnv* env, jclass clazz, + jint slot); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_LoadStateAs(JNIEnv* env, - jobject obj, - jstring path); + jclass clazz, + jstring path); JNIEXPORT void JNICALL -Java_org_citra_citra_1emu_utils_DirectoryInitialization_CreateUserDirectories( - JNIEnv* env, jobject obj); +Java_org_citra_citra_1emu_utils_DirectoryInitialization_CreateUserDirectories(JNIEnv* env, + jclass clazz); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory( - JNIEnv* env, jobject obj, jstring jDirectory); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserDirectory(JNIEnv* env, + jclass clazz, + jstring j_directory); -JNIEXPORT void JNICALL -Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory( - JNIEnv* env, jclass type, jstring path_); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_utils_DirectoryInitialization_SetSysDirectory( + JNIEnv* env, jclass clazz, jstring path_); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetUserDirectory(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetSysDirectory(JNIEnv* env, - jobject obj, - jstring path); + jclass clazz, + jstring path); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile(); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_CreateConfigFile(JNIEnv* env, + jclass clazz); JNIEXPORT jint JNICALL Java_org_citra_citra_1emu_NativeLibrary_DefaultCPUCore(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetProfiling(JNIEnv* env, - jobject obj, - jboolean enable); + jclass clazz, + jboolean enable); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_WriteProfileResults(JNIEnv* env, - jobject obj); + jclass clazz); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_NotifyOrientationChange( JNIEnv* env, jclass clazz, jint layout_option, jint rotation); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SwapScreens( - JNIEnv* env, jclass clazz, jboolean swap_screens, jint rotation); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SwapScreens(JNIEnv* env, + jclass clazz, + jboolean swap_screens, + jint rotation); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2( - JNIEnv* env, jclass type, jstring path_); + JNIEnv* env, jclass clazz, jstring j_path); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_Run__Ljava_lang_String_2Ljava_lang_String_2Z( - JNIEnv* env, jobject obj, jstring jFile, jstring jSavestate, jboolean jDeleteSavestate); + JNIEnv* env, jclass clazz, jstring j_file, jstring j_savestate, jboolean j_delete_savestate); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SurfaceChanged(JNIEnv* env, - jobject obj, - jobject surf); + jclass clazz, + jobject surf); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SurfaceDestroyed(JNIEnv* env, - jobject obj); + jclass clazz); -JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, - jclass type, - jstring gameID_); +JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_InitGameIni(JNIEnv* env, jclass clazz, + jstring j_game_id); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_ReloadSettings(JNIEnv* env, - jclass type); + jclass clazz); JNIEXPORT void JNICALL Java_org_citra_citra_1emu_NativeLibrary_SetUserSetting( - JNIEnv* env, jclass type, jstring gameID_, jstring Section_, jstring Key_, jstring Value_); + JNIEnv* env, jclass clazz, jstring j_game_id, jstring j_section, jstring j_key, jstring j_value); JNIEXPORT jstring JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetUserSetting( - JNIEnv* env, jclass type, jstring gameID_, jstring Section_, jstring Key_); + JNIEnv* env, jclass clazz, jstring game_id, jstring section, jstring key); -JNIEXPORT jdoubleArray JNICALL -Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, jclass type); +JNIEXPORT jdoubleArray JNICALL Java_org_citra_citra_1emu_NativeLibrary_GetPerfStats(JNIEnv* env, + jclass clazz); #ifdef __cplusplus }