diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/InstallableFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/InstallableFragment.kt
index 22976900f2..9c39f7b166 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/InstallableFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/InstallableFragment.kt
@@ -133,6 +133,11 @@ class InstallableFragment : Fragment() {
R.string.install_firmware_description,
install = { mainActivity.getFirmware.launch(arrayOf("application/zip")) }
),
+ Installable(
+ R.string.uninstall_firmware,
+ R.string.uninstall_firmware_description,
+ install = { mainActivity.uninstallFirmware() }
+ ),
Installable(
R.string.install_prod_keys,
R.string.install_prod_keys_description,
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
index f1f05e6b20..74cf958f34 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt
@@ -367,7 +367,31 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
messageToShow
}.show(supportFragmentManager, ProgressDialogFragment.TAG)
}
-
+ fun uninstallFirmware() {
+ val firmwarePath = File(DirectoryInitialization.userDirectory + "/nand/system/Contents/registered/")
+ ProgressDialogFragment.newInstance(
+ this,
+ R.string.firmware_uninstalling
+ ) { progressCallback, _ ->
+ var messageToShow: Any
+ try {
+ // Ensure the firmware directory exists before attempting to delete
+ if (firmwarePath.exists()) {
+ firmwarePath.deleteRecursively()
+ // Optionally reinitialize the system or perform other necessary steps
+ NativeLibrary.initializeSystem(true)
+ homeViewModel.setCheckKeys(true)
+ messageToShow = getString(R.string.firmware_uninstalled_success)
+ } else {
+ messageToShow = getString(R.string.firmware_uninstalled_failure)
+ }
+ } catch (e: Exception) {
+ Log.error("[MainActivity] Firmware uninstall failed - ${e.message}")
+ messageToShow = getString(R.string.fatal_error)
+ }
+ messageToShow
+ }.show(supportFragmentManager, ProgressDialogFragment.TAG)
+ }
val getAmiiboKey =
registerForActivityResult(ActivityResultContracts.OpenDocument()) { result ->
if (result == null) {
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 2987ea91fc..febe174c2b 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -143,6 +143,11 @@
Firmware installed successfully
Firmware installation failed
Make sure the firmware nca files are at the root of the zip and try again.
+ Uninstall firmware
+ Uninstalling the firmware will remove it from the device and may affect game compatibility.
+ Uninstalling firmware
+ Firmware uninstalled successfully
+ Firmware uninstallation failed
Share debug logs
Share eden\'s log file to debug issues
No log file found