mirror of
https://github.com/Lime3DS/Lime3DS.git
synced 2025-01-06 15:18:12 +01:00
android: Gamepads can now control the in-game menu
This commit is contained in:
parent
461c8c9574
commit
277914a873
@ -35,6 +35,7 @@ import io.github.lime3ds.android.display.ScreenAdjustmentUtil
|
|||||||
import io.github.lime3ds.android.features.hotkeys.HotkeyUtility
|
import io.github.lime3ds.android.features.hotkeys.HotkeyUtility
|
||||||
import io.github.lime3ds.android.features.settings.model.SettingsViewModel
|
import io.github.lime3ds.android.features.settings.model.SettingsViewModel
|
||||||
import io.github.lime3ds.android.features.settings.model.view.InputBindingSetting
|
import io.github.lime3ds.android.features.settings.model.view.InputBindingSetting
|
||||||
|
import io.github.lime3ds.android.fragments.EmulationFragment
|
||||||
import io.github.lime3ds.android.fragments.MessageDialogFragment
|
import io.github.lime3ds.android.fragments.MessageDialogFragment
|
||||||
import io.github.lime3ds.android.utils.ControllerMappingHelper
|
import io.github.lime3ds.android.utils.ControllerMappingHelper
|
||||||
import io.github.lime3ds.android.utils.FileBrowserHelper
|
import io.github.lime3ds.android.utils.FileBrowserHelper
|
||||||
@ -49,14 +50,20 @@ class EmulationActivity : AppCompatActivity() {
|
|||||||
get() = PreferenceManager.getDefaultSharedPreferences(LimeApplication.appContext)
|
get() = PreferenceManager.getDefaultSharedPreferences(LimeApplication.appContext)
|
||||||
private var foregroundService: Intent? = null
|
private var foregroundService: Intent? = null
|
||||||
var isActivityRecreated = false
|
var isActivityRecreated = false
|
||||||
|
|
||||||
private val settingsViewModel: SettingsViewModel by viewModels()
|
|
||||||
private val emulationViewModel: EmulationViewModel by viewModels()
|
private val emulationViewModel: EmulationViewModel by viewModels()
|
||||||
|
private val settingsViewModel: SettingsViewModel by viewModels()
|
||||||
|
|
||||||
private lateinit var binding: ActivityEmulationBinding
|
private lateinit var binding: ActivityEmulationBinding
|
||||||
private lateinit var screenAdjustmentUtil: ScreenAdjustmentUtil
|
private lateinit var screenAdjustmentUtil: ScreenAdjustmentUtil
|
||||||
private lateinit var hotkeyUtility: HotkeyUtility
|
private lateinit var hotkeyUtility: HotkeyUtility
|
||||||
|
|
||||||
|
private val emulationFragment: EmulationFragment
|
||||||
|
get() {
|
||||||
|
val navHostFragment =
|
||||||
|
supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
|
||||||
|
return navHostFragment.getChildFragmentManager().fragments.last() as EmulationFragment
|
||||||
|
}
|
||||||
|
|
||||||
private var isEmulationRunning: Boolean = false
|
private var isEmulationRunning: Boolean = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@ -198,6 +205,10 @@ class EmulationActivity : AppCompatActivity() {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (emulationFragment.isDrawerOpen()) {
|
||||||
|
return super.dispatchKeyEvent(event)
|
||||||
|
}
|
||||||
|
|
||||||
val button =
|
val button =
|
||||||
preferences.getInt(InputBindingSetting.getInputButtonKey(event.keyCode), event.keyCode)
|
preferences.getInt(InputBindingSetting.getInputButtonKey(event.keyCode), event.keyCode)
|
||||||
val action: Int = when (event.action) {
|
val action: Int = when (event.action) {
|
||||||
@ -236,11 +247,9 @@ class EmulationActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
override fun dispatchGenericMotionEvent(event: MotionEvent): Boolean {
|
override fun dispatchGenericMotionEvent(event: MotionEvent): Boolean {
|
||||||
// TODO: Move this check into native code - prevents crash if input pressed before starting emulation
|
// TODO: Move this check into native code - prevents crash if input pressed before starting emulation
|
||||||
if (!NativeLibrary.isRunning()) {
|
if (!NativeLibrary.isRunning() ||
|
||||||
return super.dispatchGenericMotionEvent(event)
|
(event.source and InputDevice.SOURCE_CLASS_JOYSTICK == 0) ||
|
||||||
}
|
emulationFragment.isDrawerOpen()) {
|
||||||
|
|
||||||
if (event.source and InputDevice.SOURCE_CLASS_JOYSTICK == 0) {
|
|
||||||
return super.dispatchGenericMotionEvent(event)
|
return super.dispatchGenericMotionEvent(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,10 +190,16 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
|
|||||||
|
|
||||||
override fun onDrawerOpened(drawerView: View) {
|
override fun onDrawerOpened(drawerView: View) {
|
||||||
binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||||
|
binding.surfaceInputOverlay.isClickable = false
|
||||||
|
binding.surfaceInputOverlay.isFocusable = false
|
||||||
|
binding.surfaceInputOverlay.isFocusableInTouchMode = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDrawerClosed(drawerView: View) {
|
override fun onDrawerClosed(drawerView: View) {
|
||||||
binding.drawerLayout.setDrawerLockMode(EmulationMenuSettings.drawerLockMode)
|
binding.drawerLayout.setDrawerLockMode(EmulationMenuSettings.drawerLockMode)
|
||||||
|
binding.surfaceInputOverlay.isClickable = true
|
||||||
|
binding.surfaceInputOverlay.isFocusable = true
|
||||||
|
binding.surfaceInputOverlay.isFocusableInTouchMode = true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDrawerStateChanged(newState: Int) {
|
override fun onDrawerStateChanged(newState: Int) {
|
||||||
@ -412,6 +418,10 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram
|
|||||||
setInsets()
|
setInsets()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun isDrawerOpen(): Boolean {
|
||||||
|
return binding.drawerLayout.isOpen
|
||||||
|
}
|
||||||
|
|
||||||
private fun togglePause() {
|
private fun togglePause() {
|
||||||
if(emulationState.isPaused) {
|
if(emulationState.isPaused) {
|
||||||
emulationState.unpause()
|
emulationState.unpause()
|
||||||
|
Loading…
Reference in New Issue
Block a user