|
|
@@ -23,30 +23,25 @@ import androidx.appcompat.app.AppCompatActivity
|
|
|
import androidx.core.view.WindowCompat
|
|
|
import androidx.core.view.WindowInsetsCompat
|
|
|
import androidx.core.view.WindowInsetsControllerCompat
|
|
|
-import androidx.lifecycle.Lifecycle
|
|
|
-import androidx.lifecycle.lifecycleScope
|
|
|
-import androidx.lifecycle.repeatOnLifecycle
|
|
|
-import androidx.window.layout.WindowInfoTracker
|
|
|
-import kotlinx.coroutines.Dispatchers
|
|
|
-import kotlinx.coroutines.launch
|
|
|
+import androidx.navigation.fragment.NavHostFragment
|
|
|
import org.yuzu.yuzu_emu.NativeLibrary
|
|
|
import org.yuzu.yuzu_emu.R
|
|
|
+import org.yuzu.yuzu_emu.databinding.ActivityEmulationBinding
|
|
|
import org.yuzu.yuzu_emu.features.settings.model.SettingsViewModel
|
|
|
-import org.yuzu.yuzu_emu.fragments.EmulationFragment
|
|
|
import org.yuzu.yuzu_emu.model.Game
|
|
|
import org.yuzu.yuzu_emu.utils.ControllerMappingHelper
|
|
|
import org.yuzu.yuzu_emu.utils.ForegroundService
|
|
|
import org.yuzu.yuzu_emu.utils.InputHandler
|
|
|
import org.yuzu.yuzu_emu.utils.NfcReader
|
|
|
-import org.yuzu.yuzu_emu.utils.SerializableHelper.parcelable
|
|
|
import org.yuzu.yuzu_emu.utils.ThemeHelper
|
|
|
import kotlin.math.roundToInt
|
|
|
|
|
|
class EmulationActivity : AppCompatActivity(), SensorEventListener {
|
|
|
+ private lateinit var binding: ActivityEmulationBinding
|
|
|
+
|
|
|
private var controllerMappingHelper: ControllerMappingHelper? = null
|
|
|
|
|
|
var isActivityRecreated = false
|
|
|
- private var emulationFragment: EmulationFragment? = null
|
|
|
private lateinit var nfcReader: NfcReader
|
|
|
private lateinit var inputHandler: InputHandler
|
|
|
|
|
|
@@ -55,8 +50,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
|
|
|
private var motionTimestamp: Long = 0
|
|
|
private var flipMotionOrientation: Boolean = false
|
|
|
|
|
|
- private lateinit var game: Game
|
|
|
-
|
|
|
private val settingsViewModel: SettingsViewModel by viewModels()
|
|
|
|
|
|
override fun onDestroy() {
|
|
|
@@ -70,47 +63,31 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
|
|
|
settingsViewModel.settings.loadSettings()
|
|
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
- if (savedInstanceState == null) {
|
|
|
- // Get params we were passed
|
|
|
- game = intent.parcelable(EXTRA_SELECTED_GAME)!!
|
|
|
- isActivityRecreated = false
|
|
|
- } else {
|
|
|
- isActivityRecreated = true
|
|
|
- restoreState(savedInstanceState)
|
|
|
- }
|
|
|
+
|
|
|
+ binding = ActivityEmulationBinding.inflate(layoutInflater)
|
|
|
+ setContentView(binding.root)
|
|
|
+
|
|
|
+ val navHostFragment =
|
|
|
+ supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
|
|
|
+ val navController = navHostFragment.navController
|
|
|
+ navController
|
|
|
+ .setGraph(R.navigation.emulation_navigation, intent.extras)
|
|
|
+
|
|
|
+ isActivityRecreated = savedInstanceState != null
|
|
|
+
|
|
|
controllerMappingHelper = ControllerMappingHelper()
|
|
|
|
|
|
// Set these options now so that the SurfaceView the game renders into is the right size.
|
|
|
enableFullscreenImmersive()
|
|
|
|
|
|
- setContentView(R.layout.activity_emulation)
|
|
|
window.decorView.setBackgroundColor(getColor(android.R.color.black))
|
|
|
|
|
|
- // Find or create the EmulationFragment
|
|
|
- emulationFragment =
|
|
|
- supportFragmentManager.findFragmentById(R.id.frame_emulation_fragment) as EmulationFragment?
|
|
|
- if (emulationFragment == null) {
|
|
|
- emulationFragment = EmulationFragment.newInstance(game)
|
|
|
- supportFragmentManager.beginTransaction()
|
|
|
- .add(R.id.frame_emulation_fragment, emulationFragment!!)
|
|
|
- .commit()
|
|
|
- }
|
|
|
- title = game.title
|
|
|
-
|
|
|
nfcReader = NfcReader(this)
|
|
|
nfcReader.initialize()
|
|
|
|
|
|
inputHandler = InputHandler()
|
|
|
inputHandler.initialize()
|
|
|
|
|
|
- lifecycleScope.launch(Dispatchers.Main) {
|
|
|
- lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
|
- WindowInfoTracker.getOrCreate(this@EmulationActivity)
|
|
|
- .windowLayoutInfo(this@EmulationActivity)
|
|
|
- .collect { emulationFragment?.updateCurrentLayout(this@EmulationActivity, it) }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
// Start a foreground service to prevent the app from getting killed in the background
|
|
|
val startIntent = Intent(this, ForegroundService::class.java)
|
|
|
startForegroundService(startIntent)
|
|
|
@@ -157,11 +134,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
|
|
|
nfcReader.onNewIntent(intent)
|
|
|
}
|
|
|
|
|
|
- override fun onSaveInstanceState(outState: Bundle) {
|
|
|
- outState.putParcelable(EXTRA_SELECTED_GAME, game)
|
|
|
- super.onSaveInstanceState(outState)
|
|
|
- }
|
|
|
-
|
|
|
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
|
|
if (event.source and InputDevice.SOURCE_JOYSTICK != InputDevice.SOURCE_JOYSTICK &&
|
|
|
event.source and InputDevice.SOURCE_GAMEPAD != InputDevice.SOURCE_GAMEPAD
|
|
|
@@ -248,10 +220,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
|
|
|
|
|
|
override fun onAccuracyChanged(sensor: Sensor, i: Int) {}
|
|
|
|
|
|
- private fun restoreState(savedInstanceState: Bundle) {
|
|
|
- game = savedInstanceState.parcelable(EXTRA_SELECTED_GAME)!!
|
|
|
- }
|
|
|
-
|
|
|
private fun enableFullscreenImmersive() {
|
|
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
|
|