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?