From e70febd5b3acaa32a92c5e5c237f904ccf482379 Mon Sep 17 00:00:00 2001 From: izzy2lost Date: Sat, 13 Sep 2025 10:04:54 -0400 Subject: [PATCH] fix exit game crash --- .../psx2/QuickActionsDialogFragment.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java b/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java index c38c4e0..4a579bf 100644 --- a/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java +++ b/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java @@ -236,20 +236,32 @@ public class QuickActionsDialogFragment extends DialogFragment { if (btnExitGame != null) { btnExitGame.setOnClickListener(v -> { try { - // Pause the game first - if (requireActivity() instanceof MainActivity) { - ((MainActivity) requireActivity()).togglePauseState(); + // Capture a stable Activity reference before dismissing the dialog + final android.app.Activity activity = getActivity(); + + // Pause the game first (toggle like the drawer action) + if (activity instanceof MainActivity) { + ((MainActivity) activity).togglePauseState(); } else { boolean paused = NativeApp.isPaused(); if (!paused) NativeApp.pause(); } + // Close this dialog dismissAllowingStateLoss(); - // Open games dialog after a short delay - if (requireActivity() instanceof MainActivity) { - requireActivity().findViewById(android.R.id.content).postDelayed(() -> { - ((MainActivity) requireActivity()).openGamesDialog(); - }, 300); + + // Open games dialog after a short delay, using the captured Activity + if (activity instanceof MainActivity) { + android.view.View root = activity.findViewById(android.R.id.content); + if (root != null) { + root.postDelayed(() -> { + try { + if (!activity.isFinishing()) { + ((MainActivity) activity).openGamesDialog(); + } + } catch (Throwable ignored) {} + }, 300); + } } } catch (Throwable ignored) {} });