mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-09 22:58:54 +02:00
[android] Adjusted in-built controller handling to disable auto touchscreen control.
This commit is contained in:
parent
89b8932f36
commit
88124a4cd7
2 changed files with 41 additions and 19 deletions
|
|
@ -246,6 +246,7 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener, InputManager
|
|||
nfcReader.startScanning()
|
||||
startMotionSensorListener()
|
||||
InputHandler.updateControllerData()
|
||||
notifyPhysicalControllerState()
|
||||
|
||||
buildPictureInPictureParams()
|
||||
}
|
||||
|
|
@ -469,29 +470,30 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener, InputManager
|
|||
override fun onInputDeviceAdded(deviceId: Int) {
|
||||
if (isGameController(deviceId)) {
|
||||
InputHandler.updateControllerData()
|
||||
val navHostFragment =
|
||||
supportFragmentManager.findFragmentById(R.id.fragment_container) as? NavHostFragment
|
||||
val emulationFragment =
|
||||
navHostFragment?.childFragmentManager?.fragments?.firstOrNull() as? org.yuzu.yuzu_emu.fragments.EmulationFragment
|
||||
emulationFragment?.onControllerConnected()
|
||||
notifyPhysicalControllerState()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onInputDeviceRemoved(deviceId: Int) {
|
||||
InputHandler.updateControllerData()
|
||||
val navHostFragment =
|
||||
supportFragmentManager.findFragmentById(R.id.fragment_container) as? NavHostFragment
|
||||
val emulationFragment =
|
||||
navHostFragment?.childFragmentManager?.fragments?.firstOrNull() as? org.yuzu.yuzu_emu.fragments.EmulationFragment
|
||||
emulationFragment?.onControllerDisconnected()
|
||||
notifyPhysicalControllerState()
|
||||
}
|
||||
|
||||
override fun onInputDeviceChanged(deviceId: Int) {
|
||||
if (isGameController(deviceId)) {
|
||||
InputHandler.updateControllerData()
|
||||
notifyPhysicalControllerState()
|
||||
}
|
||||
}
|
||||
|
||||
private fun notifyPhysicalControllerState() {
|
||||
val navHostFragment =
|
||||
supportFragmentManager.findFragmentById(R.id.fragment_container) as? NavHostFragment
|
||||
val emulationFragment =
|
||||
navHostFragment?.childFragmentManager?.fragments?.firstOrNull() as? org.yuzu.yuzu_emu.fragments.EmulationFragment
|
||||
emulationFragment?.onPhysicalControllerStateChanged(InputHandler.androidControllers.isNotEmpty())
|
||||
}
|
||||
|
||||
override fun onSensorChanged(event: SensorEvent) {
|
||||
if (!NativeLibrary.isRunning() || NativeLibrary.isPaused()) {
|
||||
return
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ import org.yuzu.yuzu_emu.utils.FileUtil
|
|||
import org.yuzu.yuzu_emu.utils.GameHelper
|
||||
import org.yuzu.yuzu_emu.utils.GameIconUtils
|
||||
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
|
||||
import org.yuzu.yuzu_emu.utils.InputHandler
|
||||
import org.yuzu.yuzu_emu.utils.Log
|
||||
import org.yuzu.yuzu_emu.utils.NativeConfig
|
||||
import org.yuzu.yuzu_emu.utils.NativeFreedrenoConfig
|
||||
|
|
@ -114,6 +115,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
val handler = Handler(Looper.getMainLooper())
|
||||
|
||||
private var controllerInputReceived = false
|
||||
private var hasPhysicalControllerConnected = false
|
||||
private var overlayHiddenByPhysicalController = false
|
||||
|
||||
private var _binding: FragmentEmulationBinding? = null
|
||||
|
||||
|
|
@ -666,6 +669,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
driverInUse = driverViewModel.selectedDriverVersion.value
|
||||
|
||||
updateQuickOverlayMenuEntry(BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean())
|
||||
onPhysicalControllerStateChanged(InputHandler.androidControllers.isNotEmpty())
|
||||
|
||||
binding.surfaceEmulation.holder.addCallback(this)
|
||||
binding.doneControlConfig.setOnClickListener { stopConfiguringControls() }
|
||||
|
|
@ -760,11 +764,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
|
||||
R.id.menu_quick_overlay -> {
|
||||
val newState = !BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()
|
||||
BooleanSetting.SHOW_INPUT_OVERLAY.setBoolean(newState)
|
||||
updateQuickOverlayMenuEntry(newState)
|
||||
binding.surfaceInputOverlay.refreshControls()
|
||||
// Sync view visibility with the setting
|
||||
toggleOverlay(newState)
|
||||
updateQuickOverlayMenuEntry(BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean())
|
||||
NativeConfig.saveGlobalConfig()
|
||||
true
|
||||
}
|
||||
|
|
@ -1053,7 +1054,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
val shouldShowOverlay = if (args.overlayGamelessEditMode) {
|
||||
true
|
||||
} else {
|
||||
showInputOverlay && emulationViewModel.emulationStarted.value
|
||||
showInputOverlay && emulationViewModel.emulationStarted.value &&
|
||||
!hasPhysicalControllerConnected
|
||||
}
|
||||
b.surfaceInputOverlay.setVisible(shouldShowOverlay)
|
||||
if (!isInFoldableLayout) {
|
||||
|
|
@ -2497,6 +2499,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
|
||||
fun toggleOverlay(enable: Boolean) {
|
||||
if (!isAdded || _binding == null) return
|
||||
if (enable && hasPhysicalControllerConnected && !args.overlayGamelessEditMode) return
|
||||
if (enable == !BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()) {
|
||||
// Reset controller input flag so controller can hide overlay again
|
||||
if (!enable) {
|
||||
|
|
@ -2520,13 +2523,30 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
|
|||
}
|
||||
|
||||
fun onControllerConnected() {
|
||||
controllerInputReceived = false
|
||||
onPhysicalControllerStateChanged(InputHandler.androidControllers.isNotEmpty())
|
||||
}
|
||||
|
||||
fun onControllerDisconnected() {
|
||||
if (!BooleanSetting.HIDE_OVERLAY_ON_CONTROLLER_INPUT.getBoolean()) return
|
||||
if (!BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()) return
|
||||
onPhysicalControllerStateChanged(InputHandler.androidControllers.isNotEmpty())
|
||||
}
|
||||
|
||||
fun onPhysicalControllerStateChanged(hasConnectedControllers: Boolean) {
|
||||
hasPhysicalControllerConnected = hasConnectedControllers
|
||||
controllerInputReceived = false
|
||||
toggleOverlay(true)
|
||||
if (!isAdded || _binding == null) return
|
||||
if (binding.surfaceInputOverlay.isGamelessMode()) return
|
||||
|
||||
if (hasConnectedControllers) {
|
||||
if (BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()) {
|
||||
overlayHiddenByPhysicalController = true
|
||||
toggleOverlay(false)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (overlayHiddenByPhysicalController) {
|
||||
overlayHiddenByPhysicalController = false
|
||||
toggleOverlay(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue