summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt8
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/Hotkeys.kt11
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/EmulatedController.kt6
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/MenuTag.kt4
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.kt33
5 files changed, 61 insertions, 1 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt
index 2761c4b4e9..0145887b78 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.kt
@@ -42,6 +42,7 @@ import org.dolphinemu.dolphinemu.features.infinitybase.ui.FigureSlot
import org.dolphinemu.dolphinemu.features.infinitybase.ui.FigureSlotAdapter
import org.dolphinemu.dolphinemu.features.input.model.ControllerInterface
import org.dolphinemu.dolphinemu.features.input.model.DolphinSensorEventListener
+import org.dolphinemu.dolphinemu.features.input.model.Hotkeys
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting
import org.dolphinemu.dolphinemu.utils.ContentHandler
import org.dolphinemu.dolphinemu.features.settings.model.IntSetting
@@ -319,6 +320,13 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
}
DolphinSensorEventListener.setDeviceRotation(windowManager.defaultDisplay.rotation)
+
+ Hotkeys.setEnabled(true)
+ }
+
+ override fun onPause() {
+ Hotkeys.setEnabled(false)
+ super.onPause()
}
override fun onStop() {
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/Hotkeys.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/Hotkeys.kt
new file mode 100644
index 0000000000..7f0100238b
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/Hotkeys.kt
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.input.model
+
+object Hotkeys {
+ /**
+ * Stops or resumes the native hotkey scheduler acting on presses.
+ */
+ @JvmStatic
+ external fun setEnabled(enabled: Boolean)
+}
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 e0938b975d..00c06cb896 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
@@ -56,6 +56,12 @@ class EmulatedController private constructor(private val pointer: Long) : Contro
external fun getWiimote(controllerIndex: Int): EmulatedController
@JvmStatic
+ external fun getHotkeys(): EmulatedController
+
+ @JvmStatic
+ external fun getSupportedHotkeyIndices(): IntArray
+
+ @JvmStatic
external fun getWiimoteAttachment(
controllerIndex: Int,
attachmentIndex: Int
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/MenuTag.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/MenuTag.kt
index 74556b07d9..3a6089144f 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/MenuTag.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/MenuTag.kt
@@ -26,6 +26,7 @@ enum class MenuTag {
STATISTICS("statistics"),
ADVANCED_GRAPHICS("advanced_graphics"),
GCPAD_TYPE("gc_pad_type"),
+ HOTKEYS("hotkeys"),
WIIMOTE("wiimote"),
WIIMOTE_EXTENSION("wiimote_extension"),
GCPAD_1("gcpad", 0),
@@ -77,7 +78,8 @@ enum class MenuTag {
val correspondingEmulatedController: EmulatedController
get() = if (isGCPadMenu) EmulatedController.getGcPad(subType) else if (isWiimoteMenu) EmulatedController.getWiimote(
subType
- ) else throw UnsupportedOperationException()
+ ) else if (this == HOTKEYS) EmulatedController.getHotkeys()
+ else throw UnsupportedOperationException()
val isSerialPort1Menu: Boolean
get() = this == CONFIG_SERIALPORT1
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 8a46a698ce..e3b47b3786 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
@@ -303,6 +303,7 @@ class SettingsFragmentPresenter(
)
MenuTag.GCPAD_TYPE -> addGcPadSettings(sl)
+ MenuTag.HOTKEYS -> addHotkeySettings(sl)
MenuTag.WIIMOTE -> addWiimoteSettings(sl)
MenuTag.ENHANCEMENTS -> addEnhanceSettings(sl)
MenuTag.COLOR_CORRECTION -> addColorCorrectionSettings(sl)
@@ -354,6 +355,11 @@ class SettingsFragmentPresenter(
sl.add(SubmenuSetting(context, R.string.wiimote_settings, MenuTag.WIIMOTE))
}
+ // Hotkeys live in Hotkeys.ini and are global, so there is nothing to edit per game.
+ if (gameId.isNullOrEmpty()) {
+ sl.add(SubmenuSetting(context, R.string.hotkey_settings, MenuTag.HOTKEYS))
+ }
+
sl.add(HeaderSetting(context, R.string.setting_clear_info, 0))
}
@@ -2503,6 +2509,33 @@ class SettingsFragmentPresenter(
)
}
+ /**
+ * Lists a subset of the hotkeys the native HotkeyScheduler dispatches.
+ */
+ private fun addHotkeySettings(sl: ArrayList<SettingsItem>) {
+ val hotkeys = EmulatedController.getHotkeys()
+
+ addControllerMetaSettings(sl, hotkeys)
+
+ // Flattened {group index, control index} pairs. Each control group gets a header the first
+ // time one of its hotkeys shows up.
+ val indices = EmulatedController.getSupportedHotkeyIndices()
+ var currentGroupIndex = -1
+ var i = 0
+ while (i < indices.size) {
+ val groupIndex = indices[i]
+ val group = hotkeys.getGroup(groupIndex)
+
+ if (groupIndex != currentGroupIndex) {
+ sl.add(HeaderSetting(group.getUiName(), ""))
+ currentGroupIndex = groupIndex
+ }
+
+ sl.add(InputMappingControlSetting(group.getControl(indices[i + 1]), hotkeys))
+ i += 2
+ }
+ }
+
private fun addGcPadSubSettings(
sl: ArrayList<SettingsItem>, gcPadNumber: Int, gcPadType: Int
) {