Add Achievements submenu to Android settings
This commit is contained in:
parent
baabae4805
commit
7ae0c260be
|
@ -0,0 +1,11 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
package org.dolphinemu.dolphinemu.features.settings.model
|
||||
|
||||
object AchievementModel {
|
||||
@JvmStatic
|
||||
external fun init()
|
||||
|
||||
@JvmStatic
|
||||
external fun shutdown()
|
||||
}
|
|
@ -883,6 +883,42 @@ enum class BooleanSetting(
|
|||
Settings.SECTION_LOGGER_OPTIONS,
|
||||
"WriteToFile",
|
||||
false
|
||||
),
|
||||
ACHIEVEMENTS_ENABLED(
|
||||
Settings.FILE_ACHIEVEMENTS,
|
||||
Settings.SECTION_ACHIEVEMENTS,
|
||||
"Enabled",
|
||||
true
|
||||
),
|
||||
ACHIEVEMENTS_HARDCORE_ENABLED(
|
||||
Settings.FILE_ACHIEVEMENTS,
|
||||
Settings.SECTION_ACHIEVEMENTS,
|
||||
"HardcoreEnabled",
|
||||
false
|
||||
),
|
||||
ACHIEVEMENTS_UNOFFICIAL_ENABLED(
|
||||
Settings.FILE_ACHIEVEMENTS,
|
||||
Settings.SECTION_ACHIEVEMENTS,
|
||||
"UnofficialEnabled",
|
||||
false
|
||||
),
|
||||
ACHIEVEMENTS_ENCORE_ENABLED(
|
||||
Settings.FILE_ACHIEVEMENTS,
|
||||
Settings.SECTION_ACHIEVEMENTS,
|
||||
"EncoreEnabled",
|
||||
false
|
||||
),
|
||||
ACHIEVEMENTS_SPECTATOR_ENABLED(
|
||||
Settings.FILE_ACHIEVEMENTS,
|
||||
Settings.SECTION_ACHIEVEMENTS,
|
||||
"SpectatorEnabled",
|
||||
false
|
||||
),
|
||||
ACHIEVEMENTS_PROGRESS_ENABLED(
|
||||
Settings.FILE_ACHIEVEMENTS,
|
||||
Settings.SECTION_ACHIEVEMENTS,
|
||||
"ProgressEnabled",
|
||||
true
|
||||
);
|
||||
|
||||
override val isOverridden: Boolean
|
||||
|
@ -943,7 +979,12 @@ enum class BooleanSetting(
|
|||
MAIN_TIME_TRACKING,
|
||||
MAIN_EMULATE_SKYLANDER_PORTAL,
|
||||
MAIN_EMULATE_INFINITY_BASE,
|
||||
MAIN_EMULATE_WII_SPEAK
|
||||
MAIN_EMULATE_WII_SPEAK,
|
||||
ACHIEVEMENTS_ENABLED,
|
||||
ACHIEVEMENTS_HARDCORE_ENABLED,
|
||||
ACHIEVEMENTS_UNOFFICIAL_ENABLED,
|
||||
ACHIEVEMENTS_ENCORE_ENABLED,
|
||||
ACHIEVEMENTS_SPECTATOR_ENABLED
|
||||
)
|
||||
private val NOT_RUNTIME_EDITABLE: Set<BooleanSetting> =
|
||||
HashSet(listOf(*NOT_RUNTIME_EDITABLE_ARRAY))
|
||||
|
|
|
@ -120,6 +120,7 @@ class Settings : Closeable {
|
|||
const val FILE_GFX = "GFX"
|
||||
const val FILE_LOGGER = "Logger"
|
||||
const val FILE_WIIMOTE = "WiimoteNew"
|
||||
const val FILE_ACHIEVEMENTS = "RetroAchievements"
|
||||
const val FILE_GAME_SETTINGS_ONLY = "GameSettingsOnly"
|
||||
const val SECTION_INI_ANDROID = "Android"
|
||||
const val SECTION_INI_ANDROID_OVERLAY_BUTTONS = "AndroidOverlayButtons"
|
||||
|
@ -138,5 +139,6 @@ class Settings : Closeable {
|
|||
const val SECTION_EMULATED_USB_DEVICES = "EmulatedUSBDevices"
|
||||
const val SECTION_STEREOSCOPY = "Stereoscopy"
|
||||
const val SECTION_ANALYTICS = "Analytics"
|
||||
const val SECTION_ACHIEVEMENTS = "Achievements"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ enum class MenuTag {
|
|||
CONFIG_GAME_CUBE("config_gamecube"),
|
||||
CONFIG_SERIALPORT1("config_serialport1"),
|
||||
CONFIG_WII("config_wii"),
|
||||
CONFIG_ACHIEVEMENTS("config_achievements"),
|
||||
CONFIG_ADVANCED("config_advanced"),
|
||||
CONFIG_LOG("config_log"),
|
||||
DEBUG("debug"),
|
||||
|
|
|
@ -264,6 +264,7 @@ class SettingsFragment : Fragment(), SettingsFragmentView {
|
|||
titles[MenuTag.CONFIG_GAME_CUBE] = R.string.gamecube_submenu
|
||||
titles[MenuTag.CONFIG_SERIALPORT1] = R.string.serialport1_submenu
|
||||
titles[MenuTag.CONFIG_WII] = R.string.wii_submenu
|
||||
titles[MenuTag.CONFIG_ACHIEVEMENTS] = R.string.achievements_submenu
|
||||
titles[MenuTag.CONFIG_ADVANCED] = R.string.advanced_submenu
|
||||
titles[MenuTag.DEBUG] = R.string.debug_submenu
|
||||
titles[MenuTag.GRAPHICS] = R.string.graphics_settings
|
||||
|
|
|
@ -111,6 +111,7 @@ class SettingsFragmentPresenter(
|
|||
MenuTag.CONFIG_PATHS -> addPathsSettings(sl)
|
||||
MenuTag.CONFIG_GAME_CUBE -> addGameCubeSettings(sl)
|
||||
MenuTag.CONFIG_WII -> addWiiSettings(sl)
|
||||
MenuTag.CONFIG_ACHIEVEMENTS -> addAchievementSettings(sl);
|
||||
MenuTag.CONFIG_ADVANCED -> addAdvancedSettings(sl)
|
||||
MenuTag.GRAPHICS -> addGraphicsSettings(sl)
|
||||
MenuTag.CONFIG_SERIALPORT1 -> addSerialPortSubSettings(sl, serialPort1Type)
|
||||
|
@ -200,6 +201,7 @@ class SettingsFragmentPresenter(
|
|||
sl.add(SubmenuSetting(context, R.string.paths_submenu, MenuTag.CONFIG_PATHS))
|
||||
sl.add(SubmenuSetting(context, R.string.gamecube_submenu, MenuTag.CONFIG_GAME_CUBE))
|
||||
sl.add(SubmenuSetting(context, R.string.wii_submenu, MenuTag.CONFIG_WII))
|
||||
sl.add(SubmenuSetting(context, R.string.achievements_submenu, MenuTag.CONFIG_ACHIEVEMENTS))
|
||||
sl.add(SubmenuSetting(context, R.string.advanced_submenu, MenuTag.CONFIG_ADVANCED))
|
||||
sl.add(SubmenuSetting(context, R.string.log_submenu, MenuTag.CONFIG_LOG))
|
||||
sl.add(SubmenuSetting(context, R.string.debug_submenu, MenuTag.DEBUG))
|
||||
|
@ -914,6 +916,86 @@ class SettingsFragmentPresenter(
|
|||
)
|
||||
}
|
||||
|
||||
private fun addAchievementSettings(sl: ArrayList<SettingsItem>) {
|
||||
val achievementsEnabledSetting: AbstractBooleanSetting = object : AbstractBooleanSetting {
|
||||
override val boolean: Boolean
|
||||
get() = BooleanSetting.ACHIEVEMENTS_ENABLED.boolean
|
||||
|
||||
override fun setBoolean(settings: Settings, newValue: Boolean) {
|
||||
BooleanSetting.ACHIEVEMENTS_ENABLED.setBoolean(settings, newValue)
|
||||
if (newValue)
|
||||
AchievementModel.init()
|
||||
else
|
||||
AchievementModel.shutdown()
|
||||
loadSettingsList()
|
||||
}
|
||||
|
||||
override val isOverridden: Boolean
|
||||
get() = BooleanSetting.ACHIEVEMENTS_ENABLED.isOverridden
|
||||
|
||||
override val isRuntimeEditable: Boolean
|
||||
get() = BooleanSetting.ACHIEVEMENTS_ENABLED.isRuntimeEditable
|
||||
|
||||
override fun delete(settings: Settings): Boolean {
|
||||
val result = BooleanSetting.ACHIEVEMENTS_ENABLED.delete(settings)
|
||||
AchievementModel.shutdown()
|
||||
loadSettingsList()
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
sl.add(
|
||||
SwitchSetting(
|
||||
context,
|
||||
achievementsEnabledSetting,
|
||||
R.string.achievements_enabled,
|
||||
0
|
||||
)
|
||||
)
|
||||
if (BooleanSetting.ACHIEVEMENTS_ENABLED.boolean) {
|
||||
sl.add(
|
||||
SwitchSetting(
|
||||
context,
|
||||
BooleanSetting.ACHIEVEMENTS_HARDCORE_ENABLED,
|
||||
R.string.achievements_hardcore_enabled,
|
||||
0
|
||||
)
|
||||
)
|
||||
sl.add(
|
||||
SwitchSetting(
|
||||
context,
|
||||
BooleanSetting.ACHIEVEMENTS_UNOFFICIAL_ENABLED,
|
||||
R.string.achievements_unofficial_enabled,
|
||||
0
|
||||
)
|
||||
)
|
||||
sl.add(
|
||||
SwitchSetting(
|
||||
context,
|
||||
BooleanSetting.ACHIEVEMENTS_ENCORE_ENABLED,
|
||||
R.string.achievements_encore_enabled,
|
||||
0
|
||||
)
|
||||
)
|
||||
sl.add(
|
||||
SwitchSetting(
|
||||
context,
|
||||
BooleanSetting.ACHIEVEMENTS_SPECTATOR_ENABLED,
|
||||
R.string.achievements_spectator_enabled,
|
||||
0
|
||||
)
|
||||
)
|
||||
sl.add(
|
||||
SwitchSetting(
|
||||
context,
|
||||
BooleanSetting.ACHIEVEMENTS_PROGRESS_ENABLED,
|
||||
R.string.achievements_progress_enabled,
|
||||
0
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addAdvancedSettings(sl: ArrayList<SettingsItem>) {
|
||||
val SYNC_GPU_NEVER = 0
|
||||
val SYNC_GPU_ON_IDLE_SKIP = 1
|
||||
|
|
|
@ -77,6 +77,7 @@
|
|||
<string name="enable_cheats">Enable Cheats</string>
|
||||
<string name="speed_limit">Speed Limit (0% = Unlimited)</string>
|
||||
<string name="overclock_warning">WARNING: Changing this from the default (100%) WILL break games and cause glitches. Please do not report bugs that occur with a non-default clock.</string>
|
||||
<string name="achievements_submenu">RetroAchievements</string>
|
||||
<string name="gamecube_submenu">GameCube</string>
|
||||
<string name="ipl_settings">IPL Settings</string>
|
||||
<string name="skip_main_menu">Skip Main Menu</string>
|
||||
|
@ -952,4 +953,13 @@ It can efficiently compress both junk data and encrypted Wii data.
|
|||
<string name="mute_wii_speak">Mute Wii Speak</string>
|
||||
<string name="wii_speak_permission_warning">Missing Microphone Permission</string>
|
||||
<string name="wii_speak_permission_warning_description">Wii Speak emulation requires microphone permission. You might need to restart the game for the permission to be effective.</string>
|
||||
|
||||
<!-- Achievements -->
|
||||
<string name="achievements_enabled">Enable Achievements</string>
|
||||
<string name="achievements_hardcore_enabled">Enable Hardcore Mode</string>
|
||||
<string name="achievements_unofficial_enabled">Enable Unofficial Achievements</string>
|
||||
<string name="achievements_encore_enabled">Enable Encore Mode</string>
|
||||
<string name="achievements_spectator_enabled">Enable Spectator Mode</string>
|
||||
<string name="achievements_discord_presence_enabled">Enable Discord Presence</string>
|
||||
<string name="achievements_progress_enabled">Enable Progress Notifications</string>
|
||||
</resources>
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// Copyright 2025 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
#include "Core/AchievementManager.h"
|
||||
#include "jni/AndroidCommon/AndroidCommon.h"
|
||||
|
||||
extern "C" {
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_AchievementModel_init(JNIEnv* env, jclass)
|
||||
{
|
||||
AchievementManager::GetInstance().Init(nullptr);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_AchievementModel_shutdown(JNIEnv* env,
|
||||
jclass)
|
||||
{
|
||||
AchievementManager::GetInstance().Shutdown();
|
||||
}
|
||||
|
||||
} // extern "C"
|
|
@ -1,4 +1,5 @@
|
|||
add_library(main SHARED
|
||||
AchievementAdapter.cpp
|
||||
ActivityTracker.cpp
|
||||
Cheats/ARCheat.cpp
|
||||
Cheats/Cheats.h
|
||||
|
|
|
@ -48,6 +48,10 @@ static Config::Location GetLocation(JNIEnv* env, jstring file, jstring section,
|
|||
{
|
||||
system = Config::System::GameSettingsOnly;
|
||||
}
|
||||
else if (decoded_file == "RetroAchievements")
|
||||
{
|
||||
system = Config::System::Achievements;
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT(false);
|
||||
|
|
Loading…
Reference in New Issue