diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt
index 71075b40c..3d7217aee 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsAdapter.kt
@@ -1,4 +1,4 @@
-// Copyright 2023 Citra Emulator Project
+// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@@ -514,6 +514,18 @@ class SettingsAdapter(
.show()
}
+ fun onClickRegenerateMAC() {
+ MaterialAlertDialogBuilder(context)
+ .setTitle(R.string.regenerate_mac_address)
+ .setMessage(R.string.regenerate_mac_address_description)
+ .setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
+ SystemSaveGame.regenerateMac()
+ notifyDataSetChanged()
+ }
+ .setNegativeButton(android.R.string.cancel, null)
+ .show()
+ }
+
fun closeDialog() {
if (dialog != null) {
if (clickedPosition != -1) {
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
index 4678924dd..d4f927e35 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -391,6 +391,16 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
{ "0x${SystemSaveGame.getConsoleId().toHexString().uppercase()}" }
)
)
+ add(
+ RunnableSetting(
+ R.string.mac_address,
+ 0,
+ false,
+ 0,
+ { settingsAdapter.onClickRegenerateMAC() },
+ { SystemSaveGame.getMac() }
+ )
+ )
add(HeaderSetting(R.string.birthday))
val systemBirthdayMonthSetting = object : AbstractShortSetting {
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..0250c69ac 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
@@ -209,6 +209,7 @@ class SystemFilesFragment : Fragment() {
textN3ds = getString(R.string.setup_system_files_o3ds_needed)
colorN3ds = R.color.citra_primary_yellow
+ buttonO3ds.isChecked = true
buttonN3ds.isEnabled = false
} else {
textO3ds = getString(R.string.setup_system_files_completed)
@@ -217,9 +218,11 @@ class SystemFilesFragment : Fragment() {
if (!setupStateCached!![1]) {
textN3ds = getString(R.string.setup_system_files_possible)
colorN3ds = R.color.citra_primary_blue
+ buttonN3ds.isChecked = true
} else {
textN3ds = getString(R.string.setup_system_files_completed)
colorN3ds = R.color.citra_primary_green
+ buttonO3ds.isChecked = true
}
}
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/utils/SystemSaveGame.kt b/src/android/app/src/main/java/org/citra/citra_emu/utils/SystemSaveGame.kt
index f451762d7..bbba3e16c 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/utils/SystemSaveGame.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/utils/SystemSaveGame.kt
@@ -1,4 +1,4 @@
-// Copyright 2023 Citra Emulator Project
+// Copyright Citra Emulator Project / Azahar Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
@@ -44,6 +44,10 @@ object SystemSaveGame {
external fun getConsoleId(): Long
external fun regenerateConsoleId()
+
+ external fun getMac(): String
+
+ external fun regenerateMac()
}
enum class BirthdayMonth(val code: Int, val days: Int) {
diff --git a/src/android/app/src/main/jni/system_save_game.cpp b/src/android/app/src/main/jni/system_save_game.cpp
index 59b8838f6..ae6a5d576 100644
--- a/src/android/app/src/main/jni/system_save_game.cpp
+++ b/src/android/app/src/main/jni/system_save_game.cpp
@@ -127,4 +127,15 @@ void Java_org_citra_citra_1emu_utils_SystemSaveGame_regenerateConsoleId(
changes_pending = true;
}
+jstring Java_org_citra_citra_1emu_utils_SystemSaveGame_getMac(JNIEnv* env,
+ [[maybe_unused]] jobject obj) {
+ return ToJString(env, cfg->GetMacAddress());
+}
+
+void Java_org_citra_citra_1emu_utils_SystemSaveGame_regenerateMac(JNIEnv* env,
+ [[maybe_unused]] jobject obj) {
+ cfg->GetMacAddress() = Service::CFG::GenerateRandomMAC();
+ cfg->SaveMacAddress();
+}
+
} // extern "C"
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 43fb3999d..d374cc8c8 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -782,4 +782,7 @@
Enables the LLE modules required for online multiplayer, eShop access, etc.
Emulation Settings
Profile Settings
+ MAC Address
+ Regenerate MAC Address
+ This will replace your current MAC address with a new one. It is not recommended to do this if you got the MAC address from your real console using the setup tool. Continue?