From 1edc5de18e91971878234da0dbd693041ca87905 Mon Sep 17 00:00:00 2001 From: bug <45903641+inssekt@users.noreply.github.com> Date: Mon, 13 Apr 2026 15:49:31 +0100 Subject: [PATCH] android: Stop emulation state if activity destroyed and fix relaunching from intents (#2000) --- .../citra_emu/activities/EmulationActivity.kt | 24 +++++++++++++++++++ .../citra_emu/fragments/EmulationFragment.kt | 3 +++ 2 files changed, 27 insertions(+) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt index ba3156754..957b98611 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt @@ -145,6 +145,30 @@ class EmulationActivity : AppCompatActivity() { NativeLibrary.playTimeManagerStart(game.titleId) } + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + setIntent(intent) + + NativeLibrary.stopEmulation() + NativeLibrary.playTimeManagerStop() + + isEmulationReady = false + isRotationBlocked = true + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED + emulationViewModel.setEmulationStarted(false) + + val game = intent.extras?.let { extras -> + BundleCompat.getParcelable(extras, "game", Game::class.java) + } + if (game != null) { + NativeLibrary.playTimeManagerStart(game.titleId) + } + + val navHostFragment = + supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment + navHostFragment.navController.setGraph(R.navigation.emulation_navigation, intent.extras) + } + // On some devices, the system bars will not disappear on first boot or after some // rotations. Here we set full screen immersive repeatedly in onResume and in // onWindowFocusChanged to prevent the unwanted status bar state. diff --git a/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt index 785438526..e1c1fc076 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/fragments/EmulationFragment.kt @@ -543,6 +543,9 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback, Choreographer.Fram } override fun onDestroy() { + if (::emulationState.isInitialized && requireActivity().isFinishing) { + emulationState.stop() + } EmulationLifecycleUtil.removeHook(onPause) EmulationLifecycleUtil.removeHook(onShutdown) if (gameFd != null) {