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 c8b3d8fee..583e59863 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 @@ -182,6 +182,10 @@ object NativeLibrary { external fun uninstallSystemFiles(old3DS: Boolean) + external fun isFullConsoleLinked(): Boolean + + external fun unlinkConsole() + private var coreErrorAlertResult = false private val coreErrorAlertLock = Object() diff --git a/src/android/app/src/main/java/org/citra/citra_emu/fragments/SystemFilesFragment.kt b/src/android/app/src/main/java/org/citra/citra_emu/fragments/SystemFilesFragment.kt index 1f8328a74..7b76149d3 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/fragments/SystemFilesFragment.kt +++ b/src/android/app/src/main/java/org/citra/citra_emu/fragments/SystemFilesFragment.kt @@ -4,6 +4,7 @@ package org.citra.citra_emu.fragments +import android.content.DialogInterface import android.os.Bundle import android.text.method.LinkMovementMethod import android.view.Gravity @@ -157,6 +158,22 @@ class SystemFilesFragment : Fragment() { movementMethod = LinkMovementMethod.getInstance() } + binding.buttonUnlinkConsoleData.isEnabled = NativeLibrary.isFullConsoleLinked() + binding.buttonUnlinkConsoleData.setOnClickListener { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.delete_system_files) + .setMessage(HtmlCompat.fromHtml( + requireContext().getString(R.string.delete_system_files_description), + HtmlCompat.FROM_HTML_MODE_COMPACT + )) + .setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int -> + NativeLibrary.unlinkConsole() + binding.buttonUnlinkConsoleData.isEnabled = NativeLibrary.isFullConsoleLinked() + } + .setNegativeButton(android.R.string.cancel, null) + .show() + } + binding.buttonSetUpSystemFiles.setOnClickListener { val inflater = LayoutInflater.from(context) val inputBinding = DialogSoftwareKeyboardBinding.inflate(inflater) diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index a88a4036c..02cc329af 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -36,6 +36,7 @@ #include "core/frontend/camera/factory.h" #include "core/hle/service/am/am.h" #include "core/hle/service/nfc/nfc.h" +#include "core/hw/unique_data.h" #include "core/loader/loader.h" #include "core/savestate.h" #include "core/system_titles.h" @@ -772,4 +773,12 @@ void Java_org_citra_citra_1emu_NativeLibrary_logDeviceInfo([[maybe_unused]] JNIE LOG_INFO(Frontend, "Host OS: Android API level {}", android_get_device_api_level()); } +jboolean Java_org_citra_citra_1emu_NativeLibrary_isFullConsoleLinked(JNIEnv* env, jobject obj) { + return HW::UniqueData::IsFullConsoleLinked(); +} + +void Java_org_citra_citra_1emu_NativeLibrary_unlinkConsole(JNIEnv* env, jobject obj) { + HW::UniqueData::UnlinkConsole(); +} + } // extern "C" diff --git a/src/android/app/src/main/res/layout/fragment_system_files.xml b/src/android/app/src/main/res/layout/fragment_system_files.xml index 32e8b5358..bae1cda1c 100644 --- a/src/android/app/src/main/res/layout/fragment_system_files.xml +++ b/src/android/app/src/main/res/layout/fragment_system_files.xml @@ -61,6 +61,13 @@ android:layout_height="wrap_content" android:text="@string/setup_tool_connect" /> +