From d6c0f8e74933e291023099f47cae2901410c0f42 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 1 Oct 2023 18:35:01 +0200 Subject: [PATCH] Android: Get profile name from core To avoid duplicating information between Kotlin and C++. --- .../input/model/controlleremu/EmulatedController.kt | 2 ++ .../features/input/ui/ProfileDialogPresenter.kt | 9 ++++----- .../features/settings/ui/SettingsFragmentPresenter.kt | 8 ++++---- Source/Android/jni/Input/EmulatedController.cpp | 7 +++++++ Source/Core/Core/FreeLookManager.cpp | 5 +++++ Source/Core/Core/FreeLookManager.h | 1 + Source/Core/Core/HW/GBAPadEmu.cpp | 7 +++++++ Source/Core/Core/HW/GBAPadEmu.h | 2 ++ Source/Core/Core/HW/GCKeyboardEmu.cpp | 8 ++++++++ Source/Core/Core/HW/GCKeyboardEmu.h | 1 + Source/Core/Core/HW/GCPadEmu.cpp | 8 +++++++- Source/Core/Core/HW/GCPadEmu.h | 2 ++ Source/Core/Core/HW/WiimoteEmu/Extension/Extension.cpp | 6 ++++++ Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h | 2 ++ Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp | 5 +++++ Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h | 3 +++ Source/Core/Core/HotkeyManager.cpp | 5 +++++ Source/Core/Core/HotkeyManager.h | 1 + Source/Core/InputCommon/ControllerEmu/ControllerEmu.h | 3 +++ 19 files changed, 75 insertions(+), 10 deletions(-) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/EmulatedController.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/EmulatedController.kt index 348e75b6a0..c91bbbe1ab 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/EmulatedController.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/EmulatedController.kt @@ -30,6 +30,8 @@ class EmulatedController private constructor(private val pointer: Long) { external fun saveProfile(path: String) + external fun getProfileName(): String + companion object { @JvmStatic external fun getGcPad(controllerIndex: Int): EmulatedController diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.kt index 624441aa73..2896c815fe 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.kt @@ -100,15 +100,14 @@ class ProfileDialogPresenter { .show() } - private val profileDirectoryName: String - get() = if (menuTag.isGCPadMenu) "GCPad" else if (menuTag.isWiimoteMenu) "Wiimote" else throw UnsupportedOperationException() - - private fun getProfileDirectoryPath(stock: Boolean): String = - if (stock) { + private fun getProfileDirectoryPath(stock: Boolean): String { + val profileDirectoryName = menuTag.correspondingEmulatedController.getProfileName() + return if (stock) { "${DirectoryInitialization.getSysDirectory()}/Profiles/$profileDirectoryName/" } else { "${DirectoryInitialization.getUserDirectory()}/Config/Profiles/$profileDirectoryName/" } + } private fun getProfilePath(profileName: String, stock: Boolean): String = getProfileDirectoryPath(stock) + profileName + EXTENSION diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt index 099ae980e6..c7261c88f8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt @@ -2076,7 +2076,7 @@ class SettingsFragmentPresenter( val gcPad = EmulatedController.getGcPad(gcPadNumber) if (!TextUtils.isEmpty(gameId)) { - addControllerPerGameSettings(sl, "Pad", gcPadNumber) + addControllerPerGameSettings(sl, gcPad, gcPadNumber) } else { addControllerMetaSettings(sl, gcPad) addControllerMappingSettings(sl, gcPad, null) @@ -2106,7 +2106,7 @@ class SettingsFragmentPresenter( val wiimote = EmulatedController.getWiimote(wiimoteNumber) if (!TextUtils.isEmpty(gameId)) { - addControllerPerGameSettings(sl, "Wiimote", wiimoteNumber) + addControllerPerGameSettings(sl, wiimote, wiimoteNumber) } else { addControllerMetaSettings(sl, wiimote) @@ -2202,11 +2202,11 @@ class SettingsFragmentPresenter( */ private fun addControllerPerGameSettings( sl: ArrayList, - profileString: String, + controller: EmulatedController, controllerNumber: Int ) { val profiles = ProfileDialogPresenter(menuTag).getProfileNames(false) - val profileKey = profileString + "Profile" + (controllerNumber + 1) + val profileKey = controller.getProfileName() + "Profile" + (controllerNumber + 1) sl.add( StringSingleChoiceSetting( context, diff --git a/Source/Android/jni/Input/EmulatedController.cpp b/Source/Android/jni/Input/EmulatedController.cpp index 3d2676812f..25f5bf2a1a 100644 --- a/Source/Android/jni/Input/EmulatedController.cpp +++ b/Source/Android/jni/Input/EmulatedController.cpp @@ -124,6 +124,13 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedContro ini.Save(path); } +JNIEXPORT jstring JNICALL +Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getProfileName( + JNIEnv* env, jobject obj) +{ + return ToJString(env, EmulatedControllerFromJava(env, obj)->GetConfig()->GetProfileName()); +} + JNIEXPORT jobject JNICALL Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getGcPad( JNIEnv* env, jclass, jint controller_index) diff --git a/Source/Core/Core/FreeLookManager.cpp b/Source/Core/Core/FreeLookManager.cpp index b52a3d2a9c..7cf64a08fa 100644 --- a/Source/Core/Core/FreeLookManager.cpp +++ b/Source/Core/Core/FreeLookManager.cpp @@ -118,6 +118,11 @@ std::string FreeLookController::GetName() const return std::string("FreeLook") + char('1' + m_index); } +InputConfig* FreeLookController::GetConfig() const +{ + return FreeLook::GetInputConfig(); +} + void FreeLookController::LoadDefaults(const ControllerInterface& ciface) { EmulatedController::LoadDefaults(ciface); diff --git a/Source/Core/Core/FreeLookManager.h b/Source/Core/Core/FreeLookManager.h index 16cfe909e0..1cf8b7f124 100644 --- a/Source/Core/Core/FreeLookManager.h +++ b/Source/Core/Core/FreeLookManager.h @@ -47,6 +47,7 @@ public: explicit FreeLookController(unsigned int index); std::string GetName() const override; + InputConfig* GetConfig() const override; void LoadDefaults(const ControllerInterface& ciface) override; ControllerEmu::ControlGroup* GetGroup(FreeLookGroup group) const; diff --git a/Source/Core/Core/HW/GBAPadEmu.cpp b/Source/Core/Core/HW/GBAPadEmu.cpp index c31d35df12..8c1b9ec8d7 100644 --- a/Source/Core/Core/HW/GBAPadEmu.cpp +++ b/Source/Core/Core/HW/GBAPadEmu.cpp @@ -5,6 +5,8 @@ #include +#include "Core/HW/GBAPad.h" + #include "InputCommon/ControllerEmu/Control/Input.h" #include "InputCommon/ControllerEmu/ControlGroup/Buttons.h" #include "InputCommon/GCPadStatus.h" @@ -43,6 +45,11 @@ std::string GBAPad::GetName() const return fmt::format("GBA{}", m_index + 1); } +InputConfig* GBAPad::GetConfig() const +{ + return Pad::GetGBAConfig(); +} + ControllerEmu::ControlGroup* GBAPad::GetGroup(GBAPadGroup group) const { switch (group) diff --git a/Source/Core/Core/HW/GBAPadEmu.h b/Source/Core/Core/HW/GBAPadEmu.h index ca42666b48..c9c38f1e5a 100644 --- a/Source/Core/Core/HW/GBAPadEmu.h +++ b/Source/Core/Core/HW/GBAPadEmu.h @@ -29,6 +29,8 @@ public: std::string GetName() const override; + InputConfig* GetConfig() const override; + ControllerEmu::ControlGroup* GetGroup(GBAPadGroup group) const; void LoadDefaults(const ControllerInterface& ciface) override; diff --git a/Source/Core/Core/HW/GCKeyboardEmu.cpp b/Source/Core/Core/HW/GCKeyboardEmu.cpp index 9cb0767852..0146b942ab 100644 --- a/Source/Core/Core/HW/GCKeyboardEmu.cpp +++ b/Source/Core/Core/HW/GCKeyboardEmu.cpp @@ -5,6 +5,9 @@ #include "Common/Common.h" #include "Common/CommonTypes.h" + +#include "Core/HW/GCKeyboard.h" + #include "InputCommon/ControllerEmu/Control/Input.h" #include "InputCommon/ControllerEmu/ControlGroup/Buttons.h" #include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h" @@ -84,6 +87,11 @@ std::string GCKeyboard::GetName() const return std::string("GCKeyboard") + char('1' + m_index); } +InputConfig* GCKeyboard::GetConfig() const +{ + return Keyboard::GetConfig(); +} + ControllerEmu::ControlGroup* GCKeyboard::GetGroup(KeyboardGroup group) { switch (group) diff --git a/Source/Core/Core/HW/GCKeyboardEmu.h b/Source/Core/Core/HW/GCKeyboardEmu.h index 17ffe82baa..1f0f1986d4 100644 --- a/Source/Core/Core/HW/GCKeyboardEmu.h +++ b/Source/Core/Core/HW/GCKeyboardEmu.h @@ -31,6 +31,7 @@ public: explicit GCKeyboard(unsigned int index); KeyboardStatus GetInput() const; std::string GetName() const override; + InputConfig* GetConfig() const override; ControllerEmu::ControlGroup* GetGroup(KeyboardGroup group); void LoadDefaults(const ControllerInterface& ciface) override; diff --git a/Source/Core/Core/HW/GCPadEmu.cpp b/Source/Core/Core/HW/GCPadEmu.cpp index 6dd0a8b37c..fbbcbc630e 100644 --- a/Source/Core/Core/HW/GCPadEmu.cpp +++ b/Source/Core/Core/HW/GCPadEmu.cpp @@ -8,6 +8,8 @@ #include "Common/Common.h" #include "Common/CommonTypes.h" +#include "Core/HW/GCPad.h" + #include "InputCommon/ControllerEmu/Control/Input.h" #include "InputCommon/ControllerEmu/Control/Output.h" #include "InputCommon/ControllerEmu/ControlGroup/AnalogStick.h" @@ -15,7 +17,6 @@ #include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h" #include "InputCommon/ControllerEmu/ControlGroup/MixedTriggers.h" #include "InputCommon/ControllerEmu/StickGate.h" - #include "InputCommon/GCPadStatus.h" static const u16 button_bitmasks[] = { @@ -95,6 +96,11 @@ std::string GCPad::GetName() const return std::string("GCPad") + char('1' + m_index); } +InputConfig* GCPad::GetConfig() const +{ + return Pad::GetConfig(); +} + ControllerEmu::ControlGroup* GCPad::GetGroup(PadGroup group) { switch (group) diff --git a/Source/Core/Core/HW/GCPadEmu.h b/Source/Core/Core/HW/GCPadEmu.h index 66a1aee4e4..2555ee05b1 100644 --- a/Source/Core/Core/HW/GCPadEmu.h +++ b/Source/Core/Core/HW/GCPadEmu.h @@ -43,6 +43,8 @@ public: std::string GetName() const override; + InputConfig* GetConfig() const override; + ControllerEmu::ControlGroup* GetGroup(PadGroup group); void LoadDefaults(const ControllerInterface& ciface) override; diff --git a/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.cpp b/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.cpp index f20beef7e3..fd2b185872 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.cpp @@ -10,6 +10,7 @@ #include "Common/CommonTypes.h" #include "Common/Inline.h" +#include "Core/HW/Wiimote.h" #include "Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h" #include "Core/HW/WiimoteEmu/WiimoteEmu.h" @@ -36,6 +37,11 @@ std::string Extension::GetDisplayName() const return m_display_name; } +InputConfig* Extension::GetConfig() const +{ + return ::Wiimote::GetConfig(); +} + None::None() : Extension("None") { } diff --git a/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h b/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h index d052952273..4a055c597d 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h +++ b/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h @@ -27,6 +27,8 @@ public: std::string GetName() const override; std::string GetDisplayName() const override; + InputConfig* GetConfig() const override; + // Used by the wiimote to detect extension changes. // The normal extensions short this pin so it's always connected, // but M+ does some tricks with it during activation. diff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp index 3a63bd5781..59433f8798 100644 --- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp @@ -324,6 +324,11 @@ std::string Wiimote::GetName() const return fmt::format("Wiimote{}", 1 + m_index); } +InputConfig* Wiimote::GetConfig() const +{ + return ::Wiimote::GetConfig(); +} + ControllerEmu::ControlGroup* Wiimote::GetWiimoteGroup(WiimoteGroup group) const { switch (group) diff --git a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h index 116e393bf2..fcfad80fa7 100644 --- a/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h +++ b/Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h @@ -137,6 +137,9 @@ public: ~Wiimote(); std::string GetName() const override; + + InputConfig* GetConfig() const override; + void LoadDefaults(const ControllerInterface& ciface) override; ControllerEmu::ControlGroup* GetWiimoteGroup(WiimoteGroup group) const; diff --git a/Source/Core/Core/HotkeyManager.cpp b/Source/Core/Core/HotkeyManager.cpp index adb6a2ea49..668c500390 100644 --- a/Source/Core/Core/HotkeyManager.cpp +++ b/Source/Core/Core/HotkeyManager.cpp @@ -383,6 +383,11 @@ std::string HotkeyManager::GetName() const return "Hotkeys"; } +InputConfig* HotkeyManager::GetConfig() const +{ + return HotkeyManagerEmu::GetConfig(); +} + void HotkeyManager::GetInput(HotkeyStatus* kb, bool ignore_focus) { const auto lock = GetStateLock(); diff --git a/Source/Core/Core/HotkeyManager.h b/Source/Core/Core/HotkeyManager.h index f675fd1a10..aae894cb5b 100644 --- a/Source/Core/Core/HotkeyManager.h +++ b/Source/Core/Core/HotkeyManager.h @@ -233,6 +233,7 @@ public: void GetInput(HotkeyStatus* hk, bool ignore_focus); std::string GetName() const override; + InputConfig* GetConfig() const override; ControllerEmu::ControlGroup* GetHotkeyGroup(HotkeyGroup group) const; int FindGroupByID(int id) const; int GetIndexForGroup(int group, int id) const; diff --git a/Source/Core/InputCommon/ControllerEmu/ControllerEmu.h b/Source/Core/InputCommon/ControllerEmu/ControllerEmu.h index 2f505622eb..b77b2ce3ed 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControllerEmu.h +++ b/Source/Core/InputCommon/ControllerEmu/ControllerEmu.h @@ -19,6 +19,7 @@ #include "InputCommon/ControllerInterface/CoreDevice.h" class ControllerInterface; +class InputConfig; constexpr const char* DIRECTION_UP = _trans("Up"); constexpr const char* DIRECTION_DOWN = _trans("Down"); @@ -180,6 +181,8 @@ public: virtual std::string GetName() const = 0; virtual std::string GetDisplayName() const; + virtual InputConfig* GetConfig() const = 0; + virtual void LoadDefaults(const ControllerInterface& ciface); virtual void LoadConfig(Common::IniFile::Section* sec, const std::string& base = "");