From 866c6a08b23598693034bdb1fb243abfd3ff2f21 Mon Sep 17 00:00:00 2001 From: izzy2lost Date: Sat, 25 Oct 2025 15:46:58 -0400 Subject: [PATCH] better back button handling and exit game --- .../app/src/main/cpp/NativeEmulation.cpp | 6 ++++++ .../java/com/izzy2lost/weeu/MainActivity.kt | 18 ++++++++++++++++++ .../weeu/emulation/EmulationActivity.kt | 5 ++++- .../weeu/nativeinterface/NativeEmulation.kt | 3 +++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/android/app/src/main/cpp/NativeEmulation.cpp b/src/android/app/src/main/cpp/NativeEmulation.cpp index 0e28a922..cbedbbbd 100644 --- a/src/android/app/src/main/cpp/NativeEmulation.cpp +++ b/src/android/app/src/main/cpp/NativeEmulation.cpp @@ -267,3 +267,9 @@ Java_com_izzy2lost_weeu_nativeinterface_NativeEmulation_startGame([[maybe_unused NativeEmulation::initializeAudioDevices(); return NativeEmulation::startGame(JNIUtils::toString(env, launchPath)); } + +extern "C" [[maybe_unused]] JNIEXPORT void JNICALL +Java_com_izzy2lost_weeu_nativeinterface_NativeEmulation_stopGame([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) +{ + CafeSystem::ShutdownTitle(); +} diff --git a/src/android/app/src/main/java/com/izzy2lost/weeu/MainActivity.kt b/src/android/app/src/main/java/com/izzy2lost/weeu/MainActivity.kt index 64eb12d0..3b238d90 100644 --- a/src/android/app/src/main/java/com/izzy2lost/weeu/MainActivity.kt +++ b/src/android/app/src/main/java/com/izzy2lost/weeu/MainActivity.kt @@ -9,6 +9,7 @@ import android.os.Bundle import android.provider.DocumentsContract import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.activity.OnBackPressedCallback import androidx.activity.compose.setContent import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition @@ -76,6 +77,23 @@ class MainActivity : ComponentActivity() { } } } + + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + showExitConfirmationDialog() + } + }) + } + + private fun showExitConfirmationDialog() { + androidx.appcompat.app.AlertDialog.Builder(this) + .setTitle(tr("Exit")) + .setMessage(tr("Do you want to exit the app?")) + .setPositiveButton(tr("Yes")) { _, _ -> + finish() + } + .setNegativeButton(tr("No"), null) + .show() } override fun onDestroy() { diff --git a/src/android/app/src/main/java/com/izzy2lost/weeu/emulation/EmulationActivity.kt b/src/android/app/src/main/java/com/izzy2lost/weeu/emulation/EmulationActivity.kt index 81424e66..8bff76ac 100644 --- a/src/android/app/src/main/java/com/izzy2lost/weeu/emulation/EmulationActivity.kt +++ b/src/android/app/src/main/java/com/izzy2lost/weeu/emulation/EmulationActivity.kt @@ -257,7 +257,10 @@ class EmulationActivity : AppCompatActivity() { onClick = inputOverlaySurfaceView::resetInputs ) - exitMenuItem.configure(tr("Exit"), onClick = ::showExitConfirmationDialog) + exitMenuItem.configure(tr("Exit"), onClick = { + NativeEmulation.stopGame() + finish() + }) } private fun initializeView(launchPath: String) { diff --git a/src/android/app/src/main/java/com/izzy2lost/weeu/nativeinterface/NativeEmulation.kt b/src/android/app/src/main/java/com/izzy2lost/weeu/nativeinterface/NativeEmulation.kt index 373822b5..966f08b7 100644 --- a/src/android/app/src/main/java/com/izzy2lost/weeu/nativeinterface/NativeEmulation.kt +++ b/src/android/app/src/main/java/com/izzy2lost/weeu/nativeinterface/NativeEmulation.kt @@ -40,4 +40,7 @@ object NativeEmulation { @JvmStatic external fun supportsLoadingCustomDriver(): Boolean + + @JvmStatic + external fun stopGame() }