aboutsummaryrefslogtreecommitdiff
path: root/src/android
diff options
context:
space:
mode:
authorxbzk <xbzk@eden-emu.dev>2025-09-21 16:06:56 +0200
committercrueter <crueter@eden-emu.dev>2025-09-21 16:06:56 +0200
commitcbbdfc75ccc301db8d2cf217889abd9fe533d7ef (patch)
tree0751669c397a77352db48cbcc8f2a869641569e2 /src/android
parent1ca35b755907a6a516aa73195e5d062522c53ede (diff)
[android] fix for intent launch + emulation fragment binding rc barriers (#471)
trial to confirm whether some emulationState related race condition is causing crashes on android Co-authored-by: Allison Cunha <allisonbzk@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/471 Reviewed-by: Lizzie <lizzie@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev> Co-authored-by: xbzk <xbzk@eden-emu.dev> Co-committed-by: xbzk <xbzk@eden-emu.dev>
Diffstat (limited to 'src/android')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt70
1 files changed, 37 insertions, 33 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
index 5cc912fbbe..8162098caa 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
@@ -810,28 +810,26 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
- if (_binding == null) {
- return
- }
+ val b = _binding ?: return
updateScreenLayout()
val showInputOverlay = BooleanSetting.SHOW_INPUT_OVERLAY.getBoolean()
if (emulationActivity?.isInPictureInPictureMode == true) {
- if (binding.drawerLayout.isOpen) {
- binding.drawerLayout.close()
+ if (b.drawerLayout.isOpen) {
+ b.drawerLayout.close()
}
if (showInputOverlay) {
- binding.surfaceInputOverlay.setVisible(visible = false, gone = false)
+ b.surfaceInputOverlay.setVisible(visible = false, gone = false)
}
} else {
- binding.surfaceInputOverlay.setVisible(
+ b.surfaceInputOverlay.setVisible(
showInputOverlay && emulationViewModel.emulationStarted.value
)
if (!isInFoldableLayout) {
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
- binding.surfaceInputOverlay.layout = OverlayLayout.Portrait
+ b.surfaceInputOverlay.layout = OverlayLayout.Portrait
} else {
- binding.surfaceInputOverlay.layout = OverlayLayout.Landscape
+ b.surfaceInputOverlay.layout = OverlayLayout.Landscape
}
}
}
@@ -847,8 +845,9 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
private fun updateQuickOverlayMenuEntry(isVisible: Boolean) {
- val menu = binding.inGameMenu.menu
- val item = menu.findItem(R.id.menu_quick_overlay)
+ val b = _binding ?: return
+ val item = b.inGameMenu.menu.findItem(R.id.menu_quick_overlay) ?: return
+
if (isVisible) {
item.title = getString(R.string.emulation_hide_overlay)
item.icon = ResourcesCompat.getDrawable(
@@ -867,8 +866,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
private fun updatePauseMenuEntry(isPaused: Boolean) {
- val menu = binding.inGameMenu.menu
- val pauseItem = menu.findItem(R.id.menu_pause_emulation)
+ val b = _binding ?: return
+ val pauseItem = b.inGameMenu.menu.findItem(R.id.menu_pause_emulation) ?: return
if (isPaused) {
pauseItem.title = getString(R.string.emulation_unpause)
pauseItem.icon = ResourcesCompat.getDrawable(
@@ -887,9 +886,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
override fun onPause() {
- if (emulationState.isRunning && emulationActivity?.isInPictureInPictureMode != true) {
- emulationState.pause()
- updatePauseMenuEntry(true)
+ if (this::emulationState.isInitialized) {
+ if (emulationState.isRunning && emulationActivity?.isInPictureInPictureMode != true) {
+ emulationState.pause()
+ updatePauseMenuEntry(true)
+ }
}
super.onPause()
}
@@ -906,15 +907,15 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
override fun onResume() {
super.onResume()
- // If the overlay is enabled, we need to update the position if changed
- val position = IntSetting.PERF_OVERLAY_POSITION.getInt()
- updateStatsPosition(position)
-
- val socPosition = IntSetting.SOC_OVERLAY_POSITION.getInt()
- updateSocPosition(socPosition)
-
- binding.inGameMenu.post {
- emulationState?.isPaused?.let { updatePauseMenuEntry(it) }
+ val b = _binding ?: return
+ updateStatsPosition(IntSetting.PERF_OVERLAY_POSITION.getInt())
+ updateSocPosition(IntSetting.SOC_OVERLAY_POSITION.getInt())
+
+ if (this::emulationState.isInitialized) {
+ b.inGameMenu.post {
+ if (!this::emulationState.isInitialized || _binding == null) return@post
+ updatePauseMenuEntry(emulationState.isPaused)
+ }
}
}
@@ -1229,6 +1230,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
private fun updateScreenLayout() {
+ val b = _binding ?: return
val verticalAlignment =
EmulationVerticalAlignment.from(IntSetting.VERTICAL_ALIGNMENT.getInt())
val aspectRatio = when (IntSetting.RENDERER_ASPECT_RATIO.getInt()) {
@@ -1240,35 +1242,37 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
}
when (verticalAlignment) {
EmulationVerticalAlignment.Top -> {
- binding.surfaceEmulation.setAspectRatio(aspectRatio)
+ b.surfaceEmulation.setAspectRatio(aspectRatio)
val params = FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
params.gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
- binding.surfaceEmulation.layoutParams = params
+ b.surfaceEmulation.layoutParams = params
}
EmulationVerticalAlignment.Center -> {
- binding.surfaceEmulation.setAspectRatio(null)
- binding.surfaceEmulation.updateLayoutParams {
+ b.surfaceEmulation.setAspectRatio(null)
+ b.surfaceEmulation.updateLayoutParams {
width = ViewGroup.LayoutParams.MATCH_PARENT
height = ViewGroup.LayoutParams.MATCH_PARENT
}
}
EmulationVerticalAlignment.Bottom -> {
- binding.surfaceEmulation.setAspectRatio(aspectRatio)
+ b.surfaceEmulation.setAspectRatio(aspectRatio)
val params =
FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
params.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
- binding.surfaceEmulation.layoutParams = params
+ b.surfaceEmulation.layoutParams = params
}
}
- emulationState.updateSurface()
+ if (this::emulationState.isInitialized) {
+ emulationState.updateSurface()
+ }
emulationActivity?.buildPictureInPictureParams()
updateOrientation()
}
@@ -1722,4 +1726,4 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
private val perfStatsUpdateHandler = Handler(Looper.myLooper()!!)
private val socUpdateHandler = Handler(Looper.myLooper()!!)
}
-}
+} \ No newline at end of file