diff --git a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt index 20c3c0868..6af77aec1 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/NativeLibrary.kt @@ -230,6 +230,8 @@ object NativeLibrary { external fun playTimeManagerGetPlayTime(titleId: Long): Long external fun playTimeManagerGetCurrentTitleId(): Long + external fun uninstallTitle(titleId: Long): Boolean + private var coreErrorAlertResult = false private val coreErrorAlertLock = Object() diff --git a/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.kt b/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.kt index dae538d73..c43dba843 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.kt @@ -323,14 +323,16 @@ class GameAdapter( } } + val titleId = game.titleId + val dlcTitleId = titleId or 0x8C00000000L + val updateTitleId = titleId or 0xE00000000L + popup.setOnMenuItemClickListener { menuItem -> val uninstallAction: () -> Unit = { when (menuItem.itemId) { - R.id.game_context_uninstall -> CitraApplication.documentsTree.deleteDocument(dirs.gameDir) - R.id.game_context_uninstall_dlc -> FileUtil.deleteDocument(CitraApplication.documentsTree.folderUriHelper(dirs.dlcDir) - .toString()) - R.id.game_context_uninstall_updates -> FileUtil.deleteDocument(CitraApplication.documentsTree.folderUriHelper(dirs.updatesDir) - .toString()) + R.id.game_context_uninstall -> NativeLibrary.uninstallTitle(titleId) + R.id.game_context_uninstall_dlc -> NativeLibrary.uninstallTitle(dlcTitleId) + R.id.game_context_uninstall_updates -> NativeLibrary.uninstallTitle(updateTitleId) } ViewModelProvider(activity)[GamesViewModel::class.java].reloadGames(true) bottomSheetDialog.dismiss() diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 84a4fd3ce..46009d2d2 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -1107,4 +1107,17 @@ void Java_org_citra_citra_1emu_NativeLibrary_setInsertedCartridge(JNIEnv* env, j inserted_cartridge = GetJString(env, path); } +jboolean Java_org_citra_citra_1emu_NativeLibrary_uninstallTitle(JNIEnv* env, jobject obj, + jlong j_titleid) { + const auto titleid = static_cast(env, j_titleid); + // TODO: Don't hard-code to SDMC? (CBA to pass a value from Kotlin at the moment) -OS + const auto result = Service::AM::UninstallProgram(Service::FS::MediaType::SDMC, titleid); + if (result.IsError()) { + LOG_ERROR(Frontend, "Failed to uninstall '{}': 0x{:08X}", std::to_string(titleid), + result.raw); + return false; + } + return true; +} + } // extern "C"