From abc9b91c13ed7f268dfd07557c358071d7e403be Mon Sep 17 00:00:00 2001 From: PabloG02 Date: Wed, 28 Jun 2023 01:06:46 +0200 Subject: [PATCH] Hide touch controls if gamepad is detected --- .../java/emu/skyline/EmulationActivity.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/src/main/java/emu/skyline/EmulationActivity.kt b/app/src/main/java/emu/skyline/EmulationActivity.kt index e44e6363..8492180d 100644 --- a/app/src/main/java/emu/skyline/EmulationActivity.kt +++ b/app/src/main/java/emu/skyline/EmulationActivity.kt @@ -376,6 +376,8 @@ class EmulationActivity : AppCompatActivity(), SurfaceHolder.Callback, View.OnTo setOnClickListener { binding.onScreenControllerView.isInvisible = !binding.onScreenControllerView.isInvisible } } + binding.onScreenControllerView.isInvisible = isControllerConnected() + binding.onScreenPauseToggle.apply { isGone = !emulationSettings.showPauseButton setOnClickListener { @@ -641,6 +643,23 @@ class EmulationActivity : AppCompatActivity(), SurfaceHolder.Callback, View.OnTo } } + private fun isControllerConnected() : Boolean { + val deviceIds = InputDevice.getDeviceIds() + + deviceIds.forEach { deviceId -> + InputDevice.getDevice(deviceId).apply { + // Verify that the device has gamepad buttons, control sticks, or both. + if (sources and InputDevice.SOURCE_GAMEPAD == InputDevice.SOURCE_GAMEPAD + || sources and InputDevice.SOURCE_JOYSTICK == InputDevice.SOURCE_JOYSTICK) { + // This device is a game controller. + return true + } + } + } + + return false + } + override fun dispatchKeyEvent(event : KeyEvent) : Boolean { return if (inputHandler.handleKeyEvent(event)) true else super.dispatchKeyEvent(event) }