diff --git a/app/build.gradle b/app/build.gradle index 2a3c02f..ab2aace 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.izzy2lost.psx2" minSdk 26 targetSdk 36 - versionCode 7 - versionName "1.0.5" + versionCode 8 + versionName "1.0.6" // APK setProperty("archivesBaseName","PSX2_${versionCode}_${new Date().format('yyyyMMddHHmm')}") diff --git a/app/src/main/java/com/izzy2lost/psx2/GameSettingsDialogFragment.java b/app/src/main/java/com/izzy2lost/psx2/GameSettingsDialogFragment.java index 7ce0122..b8fa468 100644 --- a/app/src/main/java/com/izzy2lost/psx2/GameSettingsDialogFragment.java +++ b/app/src/main/java/com/izzy2lost/psx2/GameSettingsDialogFragment.java @@ -48,10 +48,12 @@ public class GameSettingsDialogFragment extends DialogFragment { // Dialog is being destroyed - resume the game android.util.Log.d("GameSettingsDialog", "onDestroy called - resuming game"); try { - if (getActivity() instanceof MainActivity) { + if (getActivity() != null && !getActivity().isFinishing() && getActivity() instanceof MainActivity) { ((MainActivity) getActivity()).onDialogClosed(); } - } catch (Throwable ignored) {} + } catch (Throwable e) { + android.util.Log.e("GameSettingsDialog", "Error in onDestroy: " + e.getMessage()); + } } @NonNull diff --git a/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java b/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java index 4d5a2c2..b3f5090 100644 --- a/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java +++ b/app/src/main/java/com/izzy2lost/psx2/GamesCoverDialogFragment.java @@ -105,10 +105,12 @@ public class GamesCoverDialogFragment extends DialogFragment { // Dialog is being destroyed - resume the game android.util.Log.d("GamesCoverDialog", "onDestroy called - resuming game"); try { - if (getActivity() instanceof MainActivity) { + if (getActivity() != null && !getActivity().isFinishing() && getActivity() instanceof MainActivity) { ((MainActivity) getActivity()).onDialogClosed(); } - } catch (Throwable ignored) {} + } catch (Throwable e) { + android.util.Log.e("GamesCoverDialog", "Error in onDestroy: " + e.getMessage()); + } } @Override diff --git a/app/src/main/java/com/izzy2lost/psx2/MainActivity.java b/app/src/main/java/com/izzy2lost/psx2/MainActivity.java index 96aba19..9c3fc07 100644 --- a/app/src/main/java/com/izzy2lost/psx2/MainActivity.java +++ b/app/src/main/java/com/izzy2lost/psx2/MainActivity.java @@ -2414,14 +2414,24 @@ public class MainActivity extends AppCompatActivity implements GamesCoverDialogF mOpenDialogCount = Math.max(0, mOpenDialogCount - 1); android.util.Log.d("DialogTracking", "Dialog closed. Count: " + mOpenDialogCount + ", Drawer open: " + mDrawerOpen); if (mOpenDialogCount == 0 && !mDrawerOpen) { - // All dialogs closed and no drawers open, resume the game - try { - if (hasSelectedGame() && isThread() && NativeApp.isPaused()) { - android.util.Log.d("DialogTracking", "Resuming game on dialog close"); - NativeApp.resume(); - updatePausePlayButton(); - } - } catch (Throwable ignored) {} + // All dialogs closed and no drawers open, resume the game with a small delay + // Delay prevents crashes when rapidly opening/closing dialogs + View root = findViewById(android.R.id.content); + if (root != null) { + root.postDelayed(() -> { + try { + if (hasSelectedGame() && isThread() && NativeApp.isPaused()) { + android.util.Log.d("DialogTracking", "Resuming game on dialog close"); + NativeApp.resume(); + updatePausePlayButton(); + } else { + android.util.Log.d("DialogTracking", "Not resuming - hasGame: " + hasSelectedGame() + ", isThread: " + isThread() + ", isPaused: " + (isThread() ? NativeApp.isPaused() : "N/A")); + } + } catch (Throwable e) { + android.util.Log.e("DialogTracking", "Error resuming game: " + e.getMessage()); + } + }, 100); // Small delay to let dialog fully close + } } } @@ -2442,14 +2452,23 @@ public class MainActivity extends AppCompatActivity implements GamesCoverDialogF mDrawerOpen = false; android.util.Log.d("DrawerTracking", "Drawer closed. Dialog count: " + mOpenDialogCount); if (mOpenDialogCount == 0 && !mDrawerOpen) { - // All dialogs closed and no drawers open, resume the game - try { - if (hasSelectedGame() && isThread() && NativeApp.isPaused()) { - android.util.Log.d("DrawerTracking", "Resuming game on drawer close"); - NativeApp.resume(); - updatePausePlayButton(); - } - } catch (Throwable ignored) {} + // All dialogs closed and no drawers open, resume the game with a small delay + View root = findViewById(android.R.id.content); + if (root != null) { + root.postDelayed(() -> { + try { + if (hasSelectedGame() && isThread() && NativeApp.isPaused()) { + android.util.Log.d("DrawerTracking", "Resuming game on drawer close"); + NativeApp.resume(); + updatePausePlayButton(); + } else { + android.util.Log.d("DrawerTracking", "Not resuming - hasGame: " + hasSelectedGame() + ", isThread: " + isThread() + ", isPaused: " + (isThread() ? NativeApp.isPaused() : "N/A")); + } + } catch (Throwable e) { + android.util.Log.e("DrawerTracking", "Error resuming game: " + e.getMessage()); + } + }, 100); // Small delay to let drawer fully close + } } } diff --git a/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java b/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java index b447f95..df8f033 100644 --- a/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java +++ b/app/src/main/java/com/izzy2lost/psx2/QuickActionsDialogFragment.java @@ -283,10 +283,12 @@ public class QuickActionsDialogFragment extends DialogFragment { // Dialog is being destroyed - resume the game android.util.Log.d("QuickActionsDialog", "onDestroy called - resuming game"); try { - if (getActivity() instanceof MainActivity) { + if (getActivity() != null && !getActivity().isFinishing() && getActivity() instanceof MainActivity) { ((MainActivity) getActivity()).onDialogClosed(); } - } catch (Throwable ignored) {} + } catch (Throwable e) { + android.util.Log.e("QuickActionsDialog", "Error in onDestroy: " + e.getMessage()); + } } private void quitApp() { diff --git a/app/src/main/java/com/izzy2lost/psx2/SavesDialogFragment.java b/app/src/main/java/com/izzy2lost/psx2/SavesDialogFragment.java index a9620bf..8a2c8b8 100644 --- a/app/src/main/java/com/izzy2lost/psx2/SavesDialogFragment.java +++ b/app/src/main/java/com/izzy2lost/psx2/SavesDialogFragment.java @@ -217,9 +217,11 @@ public class SavesDialogFragment extends DialogFragment { // Dialog is being destroyed - resume the game android.util.Log.d("SavesDialog", "onDestroy called - resuming game"); try { - if (getActivity() instanceof MainActivity) { + if (getActivity() != null && !getActivity().isFinishing() && getActivity() instanceof MainActivity) { ((MainActivity) getActivity()).onDialogClosed(); } - } catch (Throwable ignored) {} + } catch (Throwable e) { + android.util.Log.e("SavesDialog", "Error in onDestroy: " + e.getMessage()); + } } }