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