android - add option to swap button layouts to nintendo style

This commit is contained in:
Emmanuel Hansen 2023-12-24 21:34:10 +00:00
parent de58a53085
commit 316c0ffca2
4 changed files with 32 additions and 5 deletions

View File

@ -2,6 +2,7 @@ package org.ryujinx.android
import android.view.KeyEvent
import android.view.MotionEvent
import org.ryujinx.android.viewmodels.QuickSettings
class PhysicalControllerManager(val activity: MainActivity) {
private var controllerId: Int = -1
@ -54,11 +55,12 @@ class PhysicalControllerManager(val activity: MainActivity) {
}
private fun getGamePadButtonInputId(keycode: Int): GamePadButtonInputId {
val quickSettings = QuickSettings(activity)
return when (keycode) {
KeyEvent.KEYCODE_BUTTON_A -> GamePadButtonInputId.B
KeyEvent.KEYCODE_BUTTON_B -> GamePadButtonInputId.A
KeyEvent.KEYCODE_BUTTON_X -> GamePadButtonInputId.X
KeyEvent.KEYCODE_BUTTON_Y -> GamePadButtonInputId.Y
KeyEvent.KEYCODE_BUTTON_A -> if (!quickSettings.useSwitchLayout) GamePadButtonInputId.A else GamePadButtonInputId.B
KeyEvent.KEYCODE_BUTTON_B -> if (!quickSettings.useSwitchLayout) GamePadButtonInputId.B else GamePadButtonInputId.A
KeyEvent.KEYCODE_BUTTON_X -> if (!quickSettings.useSwitchLayout) GamePadButtonInputId.X else GamePadButtonInputId.Y
KeyEvent.KEYCODE_BUTTON_Y -> if (!quickSettings.useSwitchLayout) GamePadButtonInputId.Y else GamePadButtonInputId.X
KeyEvent.KEYCODE_BUTTON_L1 -> GamePadButtonInputId.LeftShoulder
KeyEvent.KEYCODE_BUTTON_L2 -> GamePadButtonInputId.LeftTrigger
KeyEvent.KEYCODE_BUTTON_R1 -> GamePadButtonInputId.RightShoulder

View File

@ -16,6 +16,7 @@ class QuickSettings(val activity: Activity) {
var enableTextureRecompression: Boolean
var resScale : Float
var isGrid : Boolean
var useSwitchLayout : Boolean
// Logs
var enableDebugLogs: Boolean
@ -41,6 +42,7 @@ class QuickSettings(val activity: Activity) {
resScale = sharedPref.getFloat("resScale", 1f)
useVirtualController = sharedPref.getBoolean("useVirtualController", true)
isGrid = sharedPref.getBoolean("isGrid", true)
useSwitchLayout = sharedPref.getBoolean("useSwitchLayout", true)
enableDebugLogs = sharedPref.getBoolean("enableDebugLogs", false)
enableStubLogs = sharedPref.getBoolean("enableStubLogs", false)
@ -66,6 +68,7 @@ class QuickSettings(val activity: Activity) {
editor.putFloat("resScale", resScale)
editor.putBoolean("useVirtualController", useVirtualController)
editor.putBoolean("isGrid", isGrid)
editor.putBoolean("useSwitchLayout", useSwitchLayout)
editor.putBoolean("enableDebugLogs", enableDebugLogs)
editor.putBoolean("enableStubLogs", enableStubLogs)

View File

@ -54,6 +54,7 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
resScale: MutableState<Float>,
useVirtualController: MutableState<Boolean>,
isGrid: MutableState<Boolean>,
useSwitchLayout: MutableState<Boolean>,
enableDebugLogs: MutableState<Boolean>,
enableStubLogs: MutableState<Boolean>,
enableInfoLogs: MutableState<Boolean>,
@ -76,6 +77,7 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
resScale.value = sharedPref.getFloat("resScale", 1f)
useVirtualController.value = sharedPref.getBoolean("useVirtualController", true)
isGrid.value = sharedPref.getBoolean("isGrid", true)
useSwitchLayout.value = sharedPref.getBoolean("useSwitchLayout", true)
enableDebugLogs.value = sharedPref.getBoolean("enableDebugLogs", false)
enableStubLogs.value = sharedPref.getBoolean("enableStubLogs", false)
@ -99,6 +101,7 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
resScale: MutableState<Float>,
useVirtualController: MutableState<Boolean>,
isGrid: MutableState<Boolean>,
useSwitchLayout: MutableState<Boolean>,
enableDebugLogs: MutableState<Boolean>,
enableStubLogs: MutableState<Boolean>,
enableInfoLogs: MutableState<Boolean>,
@ -121,7 +124,7 @@ class SettingsViewModel(var navController: NavHostController, val activity: Main
editor.putFloat("resScale", resScale.value)
editor.putBoolean("useVirtualController", useVirtualController.value)
editor.putBoolean("isGrid", isGrid.value)
editor.putBoolean("useSwitchLayout", useSwitchLayout.value)
editor.putBoolean("enableDebugLogs", enableDebugLogs.value)
editor.putBoolean("enableStubLogs", enableStubLogs.value)

View File

@ -120,6 +120,7 @@ class SettingViews {
mutableStateOf(mainViewModel.firmwareVersion)
}
val isGrid = remember { mutableStateOf(true) }
val useSwitchLayout = remember { mutableStateOf(true) }
val enableDebugLogs = remember { mutableStateOf(true) }
val enableStubLogs = remember { mutableStateOf(true) }
@ -140,6 +141,7 @@ class SettingViews {
resScale,
useVirtualController,
isGrid,
useSwitchLayout,
enableDebugLogs,
enableStubLogs,
enableInfoLogs,
@ -171,6 +173,7 @@ class SettingViews {
resScale,
useVirtualController,
isGrid,
useSwitchLayout,
enableDebugLogs,
enableStubLogs,
enableInfoLogs,
@ -854,6 +857,21 @@ class SettingViews {
useVirtualController.value = !useVirtualController.value
})
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Use Switch Controller Layout",
modifier = Modifier.align(Alignment.CenterVertically)
)
Switch(checked = useSwitchLayout.value, onCheckedChange = {
useSwitchLayout.value = !useSwitchLayout.value
})
}
}
}
ExpandableView(onCardArrowClick = { }, title = "Log") {
@ -1004,6 +1022,7 @@ class SettingViews {
resScale,
useVirtualController,
isGrid,
useSwitchLayout,
enableDebugLogs,
enableStubLogs,
enableInfoLogs,