diff options
Diffstat (limited to 'src/android/app')
18 files changed, 170 insertions, 960 deletions
| diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index 021b070e0..5721327e7 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -219,7 +219,6 @@ dependencies {      implementation("io.coil-kt:coil:2.2.2")      implementation("androidx.core:core-splashscreen:1.0.1")      implementation("androidx.window:window:1.2.0-beta03") -    implementation("org.ini4j:ini4j:0.5.4")      implementation("androidx.constraintlayout:constraintlayout:2.1.4")      implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")      implementation("androidx.navigation:navigation-fragment-ktx:2.7.4") diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt index 9ebd6c732..f2ba2504c 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt @@ -230,8 +230,6 @@ object NativeLibrary {       */      external fun onTouchReleased(finger_id: Int) -    external fun reloadSettings() -      external fun initGameIni(gameID: String?)      external fun setAppDirectory(directory: String) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt index 2bf0e1b0d..d005c656e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt @@ -7,7 +7,7 @@ import android.text.TextUtils  import android.widget.Toast  import org.yuzu.yuzu_emu.R  import org.yuzu.yuzu_emu.YuzuApplication -import org.yuzu.yuzu_emu.features.settings.utils.SettingsFile +import org.yuzu.yuzu_emu.utils.NativeConfig  object Settings {      private val context get() = YuzuApplication.appContext @@ -19,7 +19,7 @@ object Settings {                  context.getString(R.string.ini_saved),                  Toast.LENGTH_SHORT              ).show() -            SettingsFile.saveFile(SettingsFile.FILE_NAME_CONFIG) +            NativeConfig.saveSettings()          } else {              // TODO: Save custom game settings              Toast.makeText( diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt index c73edd50e..48bdbdd75 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt @@ -21,7 +21,6 @@ import androidx.navigation.navArgs  import com.google.android.material.color.MaterialColors  import kotlinx.coroutines.flow.collectLatest  import kotlinx.coroutines.launch -import org.yuzu.yuzu_emu.NativeLibrary  import java.io.IOException  import org.yuzu.yuzu_emu.R  import org.yuzu.yuzu_emu.databinding.ActivitySettingsBinding @@ -165,11 +164,12 @@ class SettingsActivity : AppCompatActivity() {          settingsViewModel.shouldSave = false          // Delete settings file because the user may have changed values that do not exist in the UI +        NativeConfig.unloadConfig()          val settingsFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_CONFIG)          if (!settingsFile.delete()) {              throw IOException("Failed to delete $settingsFile")          } -        NativeLibrary.reloadSettings() +        NativeConfig.initializeConfig()          Toast.makeText(              applicationContext, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt index 2b04d666a..3ae5b4653 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/utils/SettingsFile.kt @@ -3,15 +3,8 @@  package org.yuzu.yuzu_emu.features.settings.utils -import android.widget.Toast  import java.io.* -import org.ini4j.Wini -import org.yuzu.yuzu_emu.R -import org.yuzu.yuzu_emu.YuzuApplication -import org.yuzu.yuzu_emu.features.settings.model.*  import org.yuzu.yuzu_emu.utils.DirectoryInitialization -import org.yuzu.yuzu_emu.utils.Log -import org.yuzu.yuzu_emu.utils.NativeConfig  /**   * Contains static methods for interacting with .ini files in which settings are stored. @@ -19,41 +12,6 @@ import org.yuzu.yuzu_emu.utils.NativeConfig  object SettingsFile {      const val FILE_NAME_CONFIG = "config" -    /** -     * Saves a Settings HashMap to a given .ini file on disk. If unsuccessful, outputs an error -     * telling why it failed. -     * -     * @param fileName The target filename without a path or extension. -     */ -    fun saveFile(fileName: String) { -        val ini = getSettingsFile(fileName) -        try { -            val wini = Wini(ini) -            for (specificCategory in Settings.Category.values()) { -                val categoryHeader = NativeConfig.getConfigHeader(specificCategory.ordinal) -                for (setting in Settings.settingsList) { -                    if (setting.key!!.isEmpty()) continue - -                    val settingCategoryHeader = -                        NativeConfig.getConfigHeader(setting.category.ordinal) -                    val iniSetting: String? = wini.get(categoryHeader, setting.key) -                    if (iniSetting != null || settingCategoryHeader == categoryHeader) { -                        wini.put(settingCategoryHeader, setting.key, setting.valueAsString) -                    } -                } -            } -            wini.store() -        } catch (e: IOException) { -            Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.message) -            val context = YuzuApplication.appContext -            Toast.makeText( -                context, -                context.getString(R.string.error_saving, fileName, e.message), -                Toast.LENGTH_SHORT -            ).show() -        } -    } -      fun getSettingsFile(fileName: String): File =          File(DirectoryInitialization.userDirectory + "/config/" + fileName + ".ini")  } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt index ace5dddea..bd2f4cd25 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt @@ -625,6 +625,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {                  }                  // Clear existing user data +                NativeConfig.unloadConfig()                  File(DirectoryInitialization.userDirectory!!).deleteRecursively()                  // Copy archive to internal storage @@ -643,6 +644,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {                  // Reinitialize relevant data                  NativeLibrary.initializeSystem(true) +                NativeConfig.initializeConfig()                  gamesViewModel.reloadGames(false)                  return@newInstance getString(R.string.user_data_import_success) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt index 5e9a1176a..21270fc84 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt @@ -16,6 +16,7 @@ object DirectoryInitialization {          if (!areDirectoriesReady) {              initializeInternalStorage()              NativeLibrary.initializeSystem(false) +            NativeConfig.initializeConfig()              areDirectoriesReady = true          }      } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt index 9425f8b99..87e579fa7 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/NativeConfig.kt @@ -4,6 +4,30 @@  package org.yuzu.yuzu_emu.utils  object NativeConfig { +    /** +     * Creates a Config object and opens the emulation config. +     */ +    @Synchronized +    external fun initializeConfig() + +    /** +     * Destroys the stored config object. This automatically saves the existing config. +     */ +    @Synchronized +    external fun unloadConfig() + +    /** +     * Reads values saved to the config file and saves them. +     */ +    @Synchronized +    external fun reloadSettings() + +    /** +     * Saves settings values in memory to disk. +     */ +    @Synchronized +    external fun saveSettings() +      external fun getBoolean(key: String, getDefault: Boolean): Boolean      external fun setBoolean(key: String, value: Boolean) diff --git a/src/android/app/src/main/jni/CMakeLists.txt b/src/android/app/src/main/jni/CMakeLists.txt index 88a570f68..2acc93da8 100644 --- a/src/android/app/src/main/jni/CMakeLists.txt +++ b/src/android/app/src/main/jni/CMakeLists.txt @@ -6,9 +6,6 @@ add_library(yuzu-android SHARED      android_common/android_common.h      applets/software_keyboard.cpp      applets/software_keyboard.h -    config.cpp -    config.h -    default_ini.h      emu_window/emu_window.cpp      emu_window/emu_window.h      id_cache.cpp @@ -16,15 +13,17 @@ add_library(yuzu-android SHARED      native.cpp      native.h      native_config.cpp -    uisettings.cpp +    android_settings.cpp      game_metadata.cpp      native_log.cpp +    android_config.cpp +    android_config.h  )  set_property(TARGET yuzu-android PROPERTY IMPORTED_LOCATION ${FFmpeg_LIBRARY_DIR}) -target_link_libraries(yuzu-android PRIVATE audio_core common core input_common) -target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad inih jnigraphics log) +target_link_libraries(yuzu-android PRIVATE audio_core common core input_common frontend_common) +target_link_libraries(yuzu-android PRIVATE android camera2ndk EGL glad jnigraphics log)  if (ARCHITECTURE_arm64)      target_link_libraries(yuzu-android PRIVATE adrenotools)  endif() diff --git a/src/android/app/src/main/jni/android_config.cpp b/src/android/app/src/main/jni/android_config.cpp new file mode 100644 index 000000000..3041c25c9 --- /dev/null +++ b/src/android/app/src/main/jni/android_config.cpp @@ -0,0 +1,70 @@ +// SPDX-FileCopyrightText: 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "android_config.h" +#include "android_settings.h" +#include "common/settings_setting.h" + +AndroidConfig::AndroidConfig(const std::string& config_name, ConfigType config_type) +    : Config(config_type) { +    Initialize(config_name); +    if (config_type != ConfigType::InputProfile) { +        ReadAndroidValues(); +        SaveAndroidValues(); +    } +} + +AndroidConfig::~AndroidConfig() { +    if (global) { +        AndroidConfig::SaveAllValues(); +    } +} + +void AndroidConfig::ReloadAllValues() { +    Reload(); +    ReadAndroidValues(); +    SaveAndroidValues(); +} + +void AndroidConfig::SaveAllValues() { +    Save(); +    SaveAndroidValues(); +} + +void AndroidConfig::ReadAndroidValues() { +    if (global) { +        ReadAndroidUIValues(); +    } +} + +void AndroidConfig::ReadAndroidUIValues() { +    BeginGroup(Settings::TranslateCategory(Settings::Category::Android)); + +    ReadCategory(Settings::Category::Android); + +    EndGroup(); +} + +void AndroidConfig::SaveAndroidValues() { +    if (global) { +        SaveAndroidUIValues(); +    } + +    WriteToIni(); +} + +void AndroidConfig::SaveAndroidUIValues() { +    BeginGroup(Settings::TranslateCategory(Settings::Category::Android)); + +    WriteCategory(Settings::Category::Android); + +    EndGroup(); +} + +std::vector<Settings::BasicSetting*>& AndroidConfig::FindRelevantList(Settings::Category category) { +    auto& map = Settings::values.linkage.by_category; +    if (map.contains(category)) { +        return Settings::values.linkage.by_category[category]; +    } +    return AndroidSettings::values.linkage.by_category[category]; +} diff --git a/src/android/app/src/main/jni/android_config.h b/src/android/app/src/main/jni/android_config.h new file mode 100644 index 000000000..e679392fd --- /dev/null +++ b/src/android/app/src/main/jni/android_config.h @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "frontend_common/config.h" + +class AndroidConfig final : public Config { +public: +    explicit AndroidConfig(const std::string& config_name = "config", +                           ConfigType config_type = ConfigType::GlobalConfig); +    ~AndroidConfig() override; + +    void ReloadAllValues() override; +    void SaveAllValues() override; + +protected: +    void ReadAndroidValues(); +    void ReadAndroidUIValues(); +    void ReadHidbusValues() override {} +    void ReadDebugControlValues() override {} +    void ReadPathValues() override {} +    void ReadShortcutValues() override {} +    void ReadUIValues() override {} +    void ReadUIGamelistValues() override {} +    void ReadUILayoutValues() override {} +    void ReadMultiplayerValues() override {} + +    void SaveAndroidValues(); +    void SaveAndroidUIValues(); +    void SaveHidbusValues() override {} +    void SaveDebugControlValues() override {} +    void SavePathValues() override {} +    void SaveShortcutValues() override {} +    void SaveUIValues() override {} +    void SaveUIGamelistValues() override {} +    void SaveUILayoutValues() override {} +    void SaveMultiplayerValues() override {} + +    std::vector<Settings::BasicSetting*>& FindRelevantList(Settings::Category category) override; +}; diff --git a/src/android/app/src/main/jni/uisettings.cpp b/src/android/app/src/main/jni/android_settings.cpp index f2f0bad50..16023a6b0 100644 --- a/src/android/app/src/main/jni/uisettings.cpp +++ b/src/android/app/src/main/jni/android_settings.cpp @@ -1,7 +1,7 @@  // SPDX-FileCopyrightText: 2023 yuzu Emulator Project  // SPDX-License-Identifier: GPL-2.0-or-later -#include "uisettings.h" +#include "android_settings.h"  namespace AndroidSettings { diff --git a/src/android/app/src/main/jni/uisettings.h b/src/android/app/src/main/jni/android_settings.h index 37bc33918..37bc33918 100644 --- a/src/android/app/src/main/jni/uisettings.h +++ b/src/android/app/src/main/jni/android_settings.h diff --git a/src/android/app/src/main/jni/config.cpp b/src/android/app/src/main/jni/config.cpp deleted file mode 100644 index 81120ab0f..000000000 --- a/src/android/app/src/main/jni/config.cpp +++ /dev/null @@ -1,330 +0,0 @@ -// SPDX-FileCopyrightText: 2023 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include <memory> -#include <optional> -#include <sstream> - -#include <INIReader.h> -#include "common/fs/file.h" -#include "common/fs/fs.h" -#include "common/fs/path_util.h" -#include "common/logging/log.h" -#include "common/settings.h" -#include "common/settings_enums.h" -#include "core/hle/service/acc/profile_manager.h" -#include "input_common/main.h" -#include "jni/config.h" -#include "jni/default_ini.h" -#include "uisettings.h" - -namespace FS = Common::FS; - -Config::Config(const std::string& config_name, ConfigType config_type) -    : type(config_type), global{config_type == ConfigType::GlobalConfig} { -    Initialize(config_name); -} - -Config::~Config() = default; - -bool Config::LoadINI(const std::string& default_contents, bool retry) { -    void(FS::CreateParentDir(config_loc)); -    config = std::make_unique<INIReader>(FS::PathToUTF8String(config_loc)); -    const auto config_loc_str = FS::PathToUTF8String(config_loc); -    if (config->ParseError() < 0) { -        if (retry) { -            LOG_WARNING(Config, "Failed to load {}. Creating file from defaults...", -                        config_loc_str); - -            void(FS::CreateParentDir(config_loc)); -            void(FS::WriteStringToFile(config_loc, FS::FileType::TextFile, default_contents)); - -            config = std::make_unique<INIReader>(config_loc_str); - -            return LoadINI(default_contents, false); -        } -        LOG_ERROR(Config, "Failed."); -        return false; -    } -    LOG_INFO(Config, "Successfully loaded {}", config_loc_str); -    return true; -} - -template <> -void Config::ReadSetting(const std::string& group, Settings::Setting<std::string>& setting) { -    std::string setting_value = config->Get(group, setting.GetLabel(), setting.GetDefault()); -    if (setting_value.empty()) { -        setting_value = setting.GetDefault(); -    } -    setting = std::move(setting_value); -} - -template <> -void Config::ReadSetting(const std::string& group, Settings::Setting<bool>& setting) { -    setting = config->GetBoolean(group, setting.GetLabel(), setting.GetDefault()); -} - -template <typename Type, bool ranged> -void Config::ReadSetting(const std::string& group, Settings::Setting<Type, ranged>& setting) { -    setting = static_cast<Type>( -        config->GetInteger(group, setting.GetLabel(), static_cast<long>(setting.GetDefault()))); -} - -void Config::ReadValues() { -    ReadSetting("ControlsGeneral", Settings::values.mouse_enabled); -    ReadSetting("ControlsGeneral", Settings::values.touch_device); -    ReadSetting("ControlsGeneral", Settings::values.keyboard_enabled); -    ReadSetting("ControlsGeneral", Settings::values.debug_pad_enabled); -    ReadSetting("ControlsGeneral", Settings::values.vibration_enabled); -    ReadSetting("ControlsGeneral", Settings::values.enable_accurate_vibrations); -    ReadSetting("ControlsGeneral", Settings::values.motion_enabled); -    Settings::values.touchscreen.enabled = -        config->GetBoolean("ControlsGeneral", "touch_enabled", true); -    Settings::values.touchscreen.rotation_angle = -        config->GetInteger("ControlsGeneral", "touch_angle", 0); -    Settings::values.touchscreen.diameter_x = -        config->GetInteger("ControlsGeneral", "touch_diameter_x", 15); -    Settings::values.touchscreen.diameter_y = -        config->GetInteger("ControlsGeneral", "touch_diameter_y", 15); - -    int num_touch_from_button_maps = -        config->GetInteger("ControlsGeneral", "touch_from_button_map", 0); -    if (num_touch_from_button_maps > 0) { -        for (int i = 0; i < num_touch_from_button_maps; ++i) { -            Settings::TouchFromButtonMap map; -            map.name = config->Get("ControlsGeneral", -                                   std::string("touch_from_button_maps_") + std::to_string(i) + -                                       std::string("_name"), -                                   "default"); -            const int num_touch_maps = config->GetInteger( -                "ControlsGeneral", -                std::string("touch_from_button_maps_") + std::to_string(i) + std::string("_count"), -                0); -            map.buttons.reserve(num_touch_maps); - -            for (int j = 0; j < num_touch_maps; ++j) { -                std::string touch_mapping = -                    config->Get("ControlsGeneral", -                                std::string("touch_from_button_maps_") + std::to_string(i) + -                                    std::string("_bind_") + std::to_string(j), -                                ""); -                map.buttons.emplace_back(std::move(touch_mapping)); -            } - -            Settings::values.touch_from_button_maps.emplace_back(std::move(map)); -        } -    } else { -        Settings::values.touch_from_button_maps.emplace_back( -            Settings::TouchFromButtonMap{"default", {}}); -        num_touch_from_button_maps = 1; -    } -    Settings::values.touch_from_button_map_index = std::clamp( -        Settings::values.touch_from_button_map_index.GetValue(), 0, num_touch_from_button_maps - 1); - -    ReadSetting("ControlsGeneral", Settings::values.udp_input_servers); - -    // Data Storage -    ReadSetting("Data Storage", Settings::values.use_virtual_sd); -    FS::SetYuzuPath(FS::YuzuPath::NANDDir, -                    config->Get("Data Storage", "nand_directory", -                                FS::GetYuzuPathString(FS::YuzuPath::NANDDir))); -    FS::SetYuzuPath(FS::YuzuPath::SDMCDir, -                    config->Get("Data Storage", "sdmc_directory", -                                FS::GetYuzuPathString(FS::YuzuPath::SDMCDir))); -    FS::SetYuzuPath(FS::YuzuPath::LoadDir, -                    config->Get("Data Storage", "load_directory", -                                FS::GetYuzuPathString(FS::YuzuPath::LoadDir))); -    FS::SetYuzuPath(FS::YuzuPath::DumpDir, -                    config->Get("Data Storage", "dump_directory", -                                FS::GetYuzuPathString(FS::YuzuPath::DumpDir))); -    ReadSetting("Data Storage", Settings::values.gamecard_inserted); -    ReadSetting("Data Storage", Settings::values.gamecard_current_game); -    ReadSetting("Data Storage", Settings::values.gamecard_path); - -    // System -    ReadSetting("System", Settings::values.current_user); -    Settings::values.current_user = std::clamp<int>(Settings::values.current_user.GetValue(), 0, -                                                    Service::Account::MAX_USERS - 1); - -    // Disable docked mode by default on Android -    Settings::values.use_docked_mode.SetValue(config->GetBoolean("System", "use_docked_mode", false) -                                                  ? Settings::ConsoleMode::Docked -                                                  : Settings::ConsoleMode::Handheld); - -    const auto rng_seed_enabled = config->GetBoolean("System", "rng_seed_enabled", false); -    if (rng_seed_enabled) { -        Settings::values.rng_seed.SetValue(config->GetInteger("System", "rng_seed", 0)); -    } else { -        Settings::values.rng_seed.SetValue(0); -    } -    Settings::values.rng_seed_enabled.SetValue(rng_seed_enabled); - -    const auto custom_rtc_enabled = config->GetBoolean("System", "custom_rtc_enabled", false); -    if (custom_rtc_enabled) { -        Settings::values.custom_rtc = config->GetInteger("System", "custom_rtc", 0); -    } else { -        Settings::values.custom_rtc = 0; -    } -    Settings::values.custom_rtc_enabled = custom_rtc_enabled; - -    ReadSetting("System", Settings::values.language_index); -    ReadSetting("System", Settings::values.region_index); -    ReadSetting("System", Settings::values.time_zone_index); -    ReadSetting("System", Settings::values.sound_index); - -    // Core -    ReadSetting("Core", Settings::values.use_multi_core); -    ReadSetting("Core", Settings::values.memory_layout_mode); - -    // Cpu -    ReadSetting("Cpu", Settings::values.cpu_accuracy); -    ReadSetting("Cpu", Settings::values.cpu_debug_mode); -    ReadSetting("Cpu", Settings::values.cpuopt_page_tables); -    ReadSetting("Cpu", Settings::values.cpuopt_block_linking); -    ReadSetting("Cpu", Settings::values.cpuopt_return_stack_buffer); -    ReadSetting("Cpu", Settings::values.cpuopt_fast_dispatcher); -    ReadSetting("Cpu", Settings::values.cpuopt_context_elimination); -    ReadSetting("Cpu", Settings::values.cpuopt_const_prop); -    ReadSetting("Cpu", Settings::values.cpuopt_misc_ir); -    ReadSetting("Cpu", Settings::values.cpuopt_reduce_misalign_checks); -    ReadSetting("Cpu", Settings::values.cpuopt_fastmem); -    ReadSetting("Cpu", Settings::values.cpuopt_fastmem_exclusives); -    ReadSetting("Cpu", Settings::values.cpuopt_recompile_exclusives); -    ReadSetting("Cpu", Settings::values.cpuopt_ignore_memory_aborts); -    ReadSetting("Cpu", Settings::values.cpuopt_unsafe_unfuse_fma); -    ReadSetting("Cpu", Settings::values.cpuopt_unsafe_reduce_fp_error); -    ReadSetting("Cpu", Settings::values.cpuopt_unsafe_ignore_standard_fpcr); -    ReadSetting("Cpu", Settings::values.cpuopt_unsafe_inaccurate_nan); -    ReadSetting("Cpu", Settings::values.cpuopt_unsafe_fastmem_check); -    ReadSetting("Cpu", Settings::values.cpuopt_unsafe_ignore_global_monitor); - -    // Renderer -    ReadSetting("Renderer", Settings::values.renderer_backend); -    ReadSetting("Renderer", Settings::values.renderer_debug); -    ReadSetting("Renderer", Settings::values.renderer_shader_feedback); -    ReadSetting("Renderer", Settings::values.enable_nsight_aftermath); -    ReadSetting("Renderer", Settings::values.disable_shader_loop_safety_checks); -    ReadSetting("Renderer", Settings::values.vulkan_device); - -    ReadSetting("Renderer", Settings::values.resolution_setup); -    ReadSetting("Renderer", Settings::values.scaling_filter); -    ReadSetting("Renderer", Settings::values.fsr_sharpening_slider); -    ReadSetting("Renderer", Settings::values.anti_aliasing); -    ReadSetting("Renderer", Settings::values.fullscreen_mode); -    ReadSetting("Renderer", Settings::values.aspect_ratio); -    ReadSetting("Renderer", Settings::values.max_anisotropy); -    ReadSetting("Renderer", Settings::values.use_speed_limit); -    ReadSetting("Renderer", Settings::values.speed_limit); -    ReadSetting("Renderer", Settings::values.use_disk_shader_cache); -    ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation); -    ReadSetting("Renderer", Settings::values.vsync_mode); -    ReadSetting("Renderer", Settings::values.shader_backend); -    ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); -    ReadSetting("Renderer", Settings::values.nvdec_emulation); -    ReadSetting("Renderer", Settings::values.use_fast_gpu_time); -    ReadSetting("Renderer", Settings::values.use_vulkan_driver_pipeline_cache); - -    ReadSetting("Renderer", Settings::values.bg_red); -    ReadSetting("Renderer", Settings::values.bg_green); -    ReadSetting("Renderer", Settings::values.bg_blue); - -    // Use GPU accuracy normal by default on Android -    Settings::values.gpu_accuracy = static_cast<Settings::GpuAccuracy>(config->GetInteger( -        "Renderer", "gpu_accuracy", static_cast<u32>(Settings::GpuAccuracy::Normal))); - -    // Use GPU default anisotropic filtering on Android -    Settings::values.max_anisotropy = -        static_cast<Settings::AnisotropyMode>(config->GetInteger("Renderer", "max_anisotropy", 1)); - -    // Disable ASTC compute by default on Android -    Settings::values.accelerate_astc.SetValue( -        config->GetBoolean("Renderer", "accelerate_astc", false) ? Settings::AstcDecodeMode::Gpu -                                                                 : Settings::AstcDecodeMode::Cpu); - -    // Enable asynchronous presentation by default on Android -    Settings::values.async_presentation = -        config->GetBoolean("Renderer", "async_presentation", true); - -    // Disable force_max_clock by default on Android -    Settings::values.renderer_force_max_clock = -        config->GetBoolean("Renderer", "force_max_clock", false); - -    // Disable use_reactive_flushing by default on Android -    Settings::values.use_reactive_flushing = -        config->GetBoolean("Renderer", "use_reactive_flushing", false); - -    // Audio -    ReadSetting("Audio", Settings::values.sink_id); -    ReadSetting("Audio", Settings::values.audio_output_device_id); -    ReadSetting("Audio", Settings::values.volume); - -    // Miscellaneous -    // log_filter has a different default here than from common -    Settings::values.log_filter = "*:Info"; -    ReadSetting("Miscellaneous", Settings::values.use_dev_keys); - -    // Debugging -    Settings::values.record_frame_times = -        config->GetBoolean("Debugging", "record_frame_times", false); -    ReadSetting("Debugging", Settings::values.dump_exefs); -    ReadSetting("Debugging", Settings::values.dump_nso); -    ReadSetting("Debugging", Settings::values.enable_fs_access_log); -    ReadSetting("Debugging", Settings::values.reporting_services); -    ReadSetting("Debugging", Settings::values.quest_flag); -    ReadSetting("Debugging", Settings::values.use_debug_asserts); -    ReadSetting("Debugging", Settings::values.use_auto_stub); -    ReadSetting("Debugging", Settings::values.disable_macro_jit); -    ReadSetting("Debugging", Settings::values.disable_macro_hle); -    ReadSetting("Debugging", Settings::values.use_gdbstub); -    ReadSetting("Debugging", Settings::values.gdbstub_port); - -    const auto title_list = config->Get("AddOns", "title_ids", ""); -    std::stringstream ss(title_list); -    std::string line; -    while (std::getline(ss, line, '|')) { -        const auto title_id = std::strtoul(line.c_str(), nullptr, 16); -        const auto disabled_list = config->Get("AddOns", "disabled_" + line, ""); - -        std::stringstream inner_ss(disabled_list); -        std::string inner_line; -        std::vector<std::string> out; -        while (std::getline(inner_ss, inner_line, '|')) { -            out.push_back(inner_line); -        } - -        Settings::values.disabled_addons.insert_or_assign(title_id, out); -    } - -    // Web Service -    ReadSetting("WebService", Settings::values.enable_telemetry); -    ReadSetting("WebService", Settings::values.web_api_url); -    ReadSetting("WebService", Settings::values.yuzu_username); -    ReadSetting("WebService", Settings::values.yuzu_token); - -    // Network -    ReadSetting("Network", Settings::values.network_interface); - -    // Android -    ReadSetting("Android", AndroidSettings::values.picture_in_picture); -    ReadSetting("Android", AndroidSettings::values.screen_layout); -} - -void Config::Initialize(const std::string& config_name) { -    const auto fs_config_loc = FS::GetYuzuPath(FS::YuzuPath::ConfigDir); -    const auto config_file = fmt::format("{}.ini", config_name); - -    switch (type) { -    case ConfigType::GlobalConfig: -        config_loc = FS::PathToUTF8String(fs_config_loc / config_file); -        break; -    case ConfigType::PerGameConfig: -        config_loc = FS::PathToUTF8String(fs_config_loc / "custom" / FS::ToU8String(config_file)); -        break; -    case ConfigType::InputProfile: -        config_loc = FS::PathToUTF8String(fs_config_loc / "input" / config_file); -        LoadINI(DefaultINI::android_config_file); -        return; -    } -    LoadINI(DefaultINI::android_config_file); -    ReadValues(); -} diff --git a/src/android/app/src/main/jni/config.h b/src/android/app/src/main/jni/config.h deleted file mode 100644 index e1e8f47ed..000000000 --- a/src/android/app/src/main/jni/config.h +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-FileCopyrightText: 2023 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#include <filesystem> -#include <memory> -#include <optional> -#include <string> - -#include "common/settings.h" - -class INIReader; - -class Config { -    bool LoadINI(const std::string& default_contents = "", bool retry = true); - -public: -    enum class ConfigType { -        GlobalConfig, -        PerGameConfig, -        InputProfile, -    }; - -    explicit Config(const std::string& config_name = "config", -                    ConfigType config_type = ConfigType::GlobalConfig); -    ~Config(); - -    void Initialize(const std::string& config_name); - -private: -    /** -     * Applies a value read from the config to a Setting. -     * -     * @param group The name of the INI group -     * @param setting The yuzu setting to modify -     */ -    template <typename Type, bool ranged> -    void ReadSetting(const std::string& group, Settings::Setting<Type, ranged>& setting); - -    void ReadValues(); - -    const ConfigType type; -    std::unique_ptr<INIReader> config; -    std::string config_loc; -    const bool global; -}; diff --git a/src/android/app/src/main/jni/default_ini.h b/src/android/app/src/main/jni/default_ini.h deleted file mode 100644 index d81422a74..000000000 --- a/src/android/app/src/main/jni/default_ini.h +++ /dev/null @@ -1,511 +0,0 @@ -// SPDX-FileCopyrightText: 2023 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -namespace DefaultINI { - -const char* android_config_file = R"( - -[ControlsP0] -# The input devices and parameters for each Switch native input -# The config section determines the player number where the config will be applied on. For example "ControlsP0", "ControlsP1", ... -# It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..." -# Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values - -# Indicates if this player should be connected at boot -connected= - -# for button input, the following devices are available: -#  - "keyboard" (default) for keyboard input. Required parameters: -#      - "code": the code of the key to bind -#  - "sdl" for joystick input using SDL. Required parameters: -#      - "guid": SDL identification GUID of the joystick -#      - "port": the index of the joystick to bind -#      - "button"(optional): the index of the button to bind -#      - "hat"(optional): the index of the hat to bind as direction buttons -#      - "axis"(optional): the index of the axis to bind -#      - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right" -#      - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is -#          triggered if the axis value crosses -#      - "direction"(only used for axis): "+" means the button is triggered when the axis value -#          is greater than the threshold; "-" means the button is triggered when the axis value -#          is smaller than the threshold -button_a= -button_b= -button_x= -button_y= -button_lstick= -button_rstick= -button_l= -button_r= -button_zl= -button_zr= -button_plus= -button_minus= -button_dleft= -button_dup= -button_dright= -button_ddown= -button_lstick_left= -button_lstick_up= -button_lstick_right= -button_lstick_down= -button_sl= -button_sr= -button_home= -button_screenshot= - -# for analog input, the following devices are available: -#  - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: -#      - "up", "down", "left", "right": sub-devices for each direction. -#          Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00" -#      - "modifier": sub-devices as a modifier. -#      - "modifier_scale": a float number representing the applied modifier scale to the analog input. -#          Must be in range of 0.0-1.0. Defaults to 0.5 -#  - "sdl" for joystick input using SDL. Required parameters: -#      - "guid": SDL identification GUID of the joystick -#      - "port": the index of the joystick to bind -#      - "axis_x": the index of the axis to bind as x-axis (default to 0) -#      - "axis_y": the index of the axis to bind as y-axis (default to 1) -lstick= -rstick= - -# for motion input, the following devices are available: -#  - "keyboard" (default) for emulating random motion input from buttons. Required parameters: -#      - "code": the code of the key to bind -#  - "sdl" for motion input using SDL. Required parameters: -#      - "guid": SDL identification GUID of the joystick -#      - "port": the index of the joystick to bind -#      - "motion": the index of the motion sensor to bind -#  - "cemuhookudp" for motion input using Cemu Hook protocol. Required parameters: -#      - "guid": the IP address of the cemu hook server encoded to a hex string. for example 192.168.0.1 = "c0a80001" -#      - "port": the port of the cemu hook server -#      - "pad": the index of the joystick -#      - "motion": the index of the motion sensor of the joystick to bind -motionleft= -motionright= - -[ControlsGeneral] -# To use the debug_pad, prepend `debug_pad_` before each button setting above. -# i.e. debug_pad_button_a= - -# Enable debug pad inputs to the guest -# 0 (default): Disabled, 1: Enabled -debug_pad_enabled = - -# Whether to enable or disable vibration -# 0: Disabled, 1 (default): Enabled -vibration_enabled= - -# Whether to enable or disable accurate vibrations -# 0 (default): Disabled, 1: Enabled -enable_accurate_vibrations= - -# Enables controller motion inputs -# 0: Disabled, 1 (default): Enabled -motion_enabled = - -# Defines the udp device's touch screen coordinate system for cemuhookudp devices -#  - "min_x", "min_y", "max_x", "max_y" -touch_device= - -# for mapping buttons to touch inputs. -#touch_from_button_map=1 -#touch_from_button_maps_0_name=default -#touch_from_button_maps_0_count=2 -#touch_from_button_maps_0_bind_0=foo -#touch_from_button_maps_0_bind_1=bar -# etc. - -# List of Cemuhook UDP servers, delimited by ','. -# Default: 127.0.0.1:26760 -# Example: 127.0.0.1:26760,123.4.5.67:26761 -udp_input_servers = - -# Enable controlling an axis via a mouse input. -# 0 (default): Off, 1: On -mouse_panning = - -# Set mouse sensitivity. -# Default: 1.0 -mouse_panning_sensitivity = - -# Emulate an analog control stick from keyboard inputs. -# 0 (default): Disabled, 1: Enabled -emulate_analog_keyboard = - -# Enable mouse inputs to the guest -# 0 (default): Disabled, 1: Enabled -mouse_enabled = - -# Enable keyboard inputs to the guest -# 0 (default): Disabled, 1: Enabled -keyboard_enabled = - -[Core] -# Whether to use multi-core for CPU emulation -# 0: Disabled, 1 (default): Enabled -use_multi_core = - -# Enable unsafe extended guest system memory layout (8GB DRAM) -# 0 (default): Disabled, 1: Enabled -use_unsafe_extended_memory_layout = - -[Cpu] -# Adjusts various optimizations. -# Auto-select mode enables choice unsafe optimizations. -# Accurate enables only safe optimizations. -# Unsafe allows any unsafe optimizations. -# 0 (default): Auto-select, 1: Accurate, 2: Enable unsafe optimizations -cpu_accuracy = - -# Allow disabling safe optimizations. -# 0 (default): Disabled, 1: Enabled -cpu_debug_mode = - -# Enable inline page tables optimization (faster guest memory access) -# 0: Disabled, 1 (default): Enabled -cpuopt_page_tables = - -# Enable block linking CPU optimization (reduce block dispatcher use during predictable jumps) -# 0: Disabled, 1 (default): Enabled -cpuopt_block_linking = - -# Enable return stack buffer CPU optimization (reduce block dispatcher use during predictable returns) -# 0: Disabled, 1 (default): Enabled -cpuopt_return_stack_buffer = - -# Enable fast dispatcher CPU optimization (use a two-tiered dispatcher architecture) -# 0: Disabled, 1 (default): Enabled -cpuopt_fast_dispatcher = - -# Enable context elimination CPU Optimization (reduce host memory use for guest context) -# 0: Disabled, 1 (default): Enabled -cpuopt_context_elimination = - -# Enable constant propagation CPU optimization (basic IR optimization) -# 0: Disabled, 1 (default): Enabled -cpuopt_const_prop = - -# Enable miscellaneous CPU optimizations (basic IR optimization) -# 0: Disabled, 1 (default): Enabled -cpuopt_misc_ir = - -# Enable reduction of memory misalignment checks (reduce memory fallbacks for misaligned access) -# 0: Disabled, 1 (default): Enabled -cpuopt_reduce_misalign_checks = - -# Enable Host MMU Emulation (faster guest memory access) -# 0: Disabled, 1 (default): Enabled -cpuopt_fastmem = - -# Enable Host MMU Emulation for exclusive memory instructions (faster guest memory access) -# 0: Disabled, 1 (default): Enabled -cpuopt_fastmem_exclusives = - -# Enable fallback on failure of fastmem of exclusive memory instructions (faster guest memory access) -# 0: Disabled, 1 (default): Enabled -cpuopt_recompile_exclusives = - -# Enable optimization to ignore invalid memory accesses (faster guest memory access) -# 0: Disabled, 1 (default): Enabled -cpuopt_ignore_memory_aborts = - -# Enable unfuse FMA (improve performance on CPUs without FMA) -# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select. -# 0: Disabled, 1 (default): Enabled -cpuopt_unsafe_unfuse_fma = - -# Enable faster FRSQRTE and FRECPE -# Only enabled if cpu_accuracy is set to Unsafe. -# 0: Disabled, 1 (default): Enabled -cpuopt_unsafe_reduce_fp_error = - -# Enable faster ASIMD instructions (32 bits only) -# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select. -# 0: Disabled, 1 (default): Enabled -cpuopt_unsafe_ignore_standard_fpcr = - -# Enable inaccurate NaN handling -# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select. -# 0: Disabled, 1 (default): Enabled -cpuopt_unsafe_inaccurate_nan = - -# Disable address space checks (64 bits only) -# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select. -# 0: Disabled, 1 (default): Enabled -cpuopt_unsafe_fastmem_check = - -# Enable faster exclusive instructions -# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select. -# 0: Disabled, 1 (default): Enabled -cpuopt_unsafe_ignore_global_monitor = - -[Renderer] -# Which backend API to use. -# 0: OpenGL (unsupported), 1 (default): Vulkan, 2: Null -backend = - -# Whether to enable asynchronous presentation (Vulkan only) -# 0: Off, 1 (default): On -async_presentation = - -# Forces the GPU to run at the maximum possible clocks (thermal constraints will still be applied). -# 0 (default): Disabled, 1: Enabled -force_max_clock = - -# Enable graphics API debugging mode. -# 0 (default): Disabled, 1: Enabled -debug = - -# Enable shader feedback. -# 0 (default): Disabled, 1: Enabled -renderer_shader_feedback = - -# Enable Nsight Aftermath crash dumps -# 0 (default): Disabled, 1: Enabled -nsight_aftermath = - -# Disable shader loop safety checks, executing the shader without loop logic changes -# 0 (default): Disabled, 1: Enabled -disable_shader_loop_safety_checks = - -# Which Vulkan physical device to use (defaults to 0) -vulkan_device = - -# 0: 0.5x (360p/540p) [EXPERIMENTAL] -# 1: 0.75x (540p/810p) [EXPERIMENTAL] -# 2 (default): 1x (720p/1080p) -# 3: 2x (1440p/2160p) -# 4: 3x (2160p/3240p) -# 5: 4x (2880p/4320p) -# 6: 5x (3600p/5400p) -# 7: 6x (4320p/6480p) -resolution_setup = - -# Pixel filter to use when up- or down-sampling rendered frames. -# 0: Nearest Neighbor -# 1 (default): Bilinear -# 2: Bicubic -# 3: Gaussian -# 4: ScaleForce -# 5: AMD FidelityFX™️ Super Resolution [Vulkan Only] -scaling_filter = - -# Anti-Aliasing (AA) -# 0 (default): None, 1: FXAA -anti_aliasing = - -# Whether to use fullscreen or borderless window mode -# 0 (Windows default): Borderless window, 1 (All other default): Exclusive fullscreen -fullscreen_mode = - -# Aspect ratio -# 0: Default (16:9), 1: Force 4:3, 2: Force 21:9, 3: Force 16:10, 4: Stretch to Window -aspect_ratio = - -# Anisotropic filtering -# 0: Default, 1: 2x, 2: 4x, 3: 8x, 4: 16x -max_anisotropy = - -# Whether to enable VSync or not. -# OpenGL: Values other than 0 enable VSync -# Vulkan: FIFO is selected if the requested mode is not supported by the driver. -# FIFO (VSync) does not drop frames or exhibit tearing but is limited by the screen refresh rate. -# FIFO Relaxed is similar to FIFO but allows tearing as it recovers from a slow down. -# Mailbox can have lower latency than FIFO and does not tear but may drop frames. -# Immediate (no synchronization) just presents whatever is available and can exhibit tearing. -# 0: Immediate (Off), 1 (Default): Mailbox (On), 2: FIFO, 3: FIFO Relaxed -use_vsync = - -# Selects the OpenGL shader backend. NV_gpu_program5 is required for GLASM. If NV_gpu_program5 is -# not available and GLASM is selected, GLSL will be used. -# 0: GLSL, 1 (default): GLASM, 2: SPIR-V -shader_backend = - -# Whether to allow asynchronous shader building. -# 0 (default): Off, 1: On -use_asynchronous_shaders = - -# Uses reactive flushing instead of predictive flushing. Allowing a more accurate syncing of memory. -# 0 (default): Off, 1: On -use_reactive_flushing = - -# NVDEC emulation. -# 0: Disabled, 1: CPU Decoding, 2 (default): GPU Decoding -nvdec_emulation = - -# Accelerate ASTC texture decoding. -# 0 (default): Off, 1: On -accelerate_astc = - -# Turns on the speed limiter, which will limit the emulation speed to the desired speed limit value -# 0: Off, 1: On (default) -use_speed_limit = - -# Limits the speed of the game to run no faster than this value as a percentage of target speed -# 1 - 9999: Speed limit as a percentage of target game speed. 100 (default) -speed_limit = - -# Whether to use disk based shader cache -# 0: Off, 1 (default): On -use_disk_shader_cache = - -# Which gpu accuracy level to use -# 0 (default): Normal, 1: High, 2: Extreme (Very slow) -gpu_accuracy = - -# Whether to use asynchronous GPU emulation -# 0 : Off (slow), 1 (default): On (fast) -use_asynchronous_gpu_emulation = - -# Inform the guest that GPU operations completed more quickly than they did. -# 0: Off, 1 (default): On -use_fast_gpu_time = - -# Force unmodified buffers to be flushed, which can cost performance. -# 0: Off (default), 1: On -use_pessimistic_flushes = - -# Whether to use garbage collection or not for GPU caches. -# 0 (default): Off, 1: On -use_caches_gc = - -# The clear color for the renderer. What shows up on the sides of the bottom screen. -# Must be in range of 0-255. Defaults to 0 for all. -bg_red = -bg_blue = -bg_green = - -[Audio] -# Which audio output engine to use. -# auto (default): Auto-select -# cubeb: Cubeb audio engine (if available) -# sdl2: SDL2 audio engine (if available) -# null: No audio output -output_engine = - -# Which audio device to use. -# auto (default): Auto-select -output_device = - -# Output volume. -# 100 (default): 100%, 0; mute -volume = - -[Data Storage] -# Whether to create a virtual SD card. -# 1: Yes, 0 (default): No -use_virtual_sd = - -# Whether or not to enable gamecard emulation -# 1: Yes, 0 (default): No -gamecard_inserted = - -# Whether or not the gamecard should be emulated as the current game -# If 'gamecard_inserted' is 0 this setting is irrelevant -# 1: Yes, 0 (default): No -gamecard_current_game = - -# Path to an XCI file to use as the gamecard -# If 'gamecard_inserted' is 0 this setting is irrelevant -# If 'gamecard_current_game' is 1 this setting is irrelevant -gamecard_path = - -[System] -# Whether the system is docked -# 1 (default): Yes, 0: No -use_docked_mode = - -# Sets the seed for the RNG generator built into the switch -# rng_seed will be ignored and randomly generated if rng_seed_enabled is false -rng_seed_enabled = -rng_seed = - -# Sets the current time (in seconds since 12:00 AM Jan 1, 1970) that will be used by the time service -# This will auto-increment, with the time set being the time the game is started -# This override will only occur if custom_rtc_enabled is true, otherwise the current time is used -custom_rtc_enabled = -custom_rtc = - -# Sets the systems language index -# 0: Japanese, 1: English (default), 2: French, 3: German, 4: Italian, 5: Spanish, 6: Chinese, -# 7: Korean, 8: Dutch, 9: Portuguese, 10: Russian, 11: Taiwanese, 12: British English, 13: Canadian French, -# 14: Latin American Spanish, 15: Simplified Chinese, 16: Traditional Chinese, 17: Brazilian Portuguese -language_index = - -# The system region that yuzu will use during emulation -# -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan -region_index = - -# The system time zone that yuzu will use during emulation -# 0: Auto-select (default), 1: Default (system archive value), Others: Index for specified time zone -time_zone_index = - -# Sets the sound output mode. -# 0: Mono, 1 (default): Stereo, 2: Surround -sound_index = - -[Miscellaneous] -# A filter which removes logs below a certain logging level. -# Examples: *:Debug Kernel.SVC:Trace Service.*:Critical -log_filter = *:Trace - -# Use developer keys -# 0 (default): Disabled, 1: Enabled -use_dev_keys = - -[Debugging] -# Record frame time data, can be found in the log directory. Boolean value -record_frame_times = -# Determines whether or not yuzu will dump the ExeFS of all games it attempts to load while loading them -dump_exefs=false -# Determines whether or not yuzu will dump all NSOs it attempts to load while loading them -dump_nso=false -# Determines whether or not yuzu will save the filesystem access log. -enable_fs_access_log=false -# Enables verbose reporting services -reporting_services = -# Determines whether or not yuzu will report to the game that the emulated console is in Kiosk Mode -# false: Retail/Normal Mode (default), true: Kiosk Mode -quest_flag = -# Determines whether debug asserts should be enabled, which will throw an exception on asserts. -# false: Disabled (default), true: Enabled -use_debug_asserts = -# Determines whether unimplemented HLE service calls should be automatically stubbed. -# false: Disabled (default), true: Enabled -use_auto_stub = -# Enables/Disables the macro JIT compiler -disable_macro_jit=false -# Determines whether to enable the GDB stub and wait for the debugger to attach before running. -# false: Disabled (default), true: Enabled -use_gdbstub=false -# The port to use for the GDB server, if it is enabled. -gdbstub_port=6543 - -[WebService] -# Whether or not to enable telemetry -# 0: No, 1 (default): Yes -enable_telemetry = -# URL for Web API -web_api_url = https://api.yuzu-emu.org -# Username and token for yuzu Web Service -# See https://profile.yuzu-emu.org/ for more info -yuzu_username = -yuzu_token = - -[Network] -# Name of the network interface device to use with yuzu LAN play. -# e.g. On *nix: 'enp7s0', 'wlp6s0u1u3u3', 'lo' -# e.g. On Windows: 'Ethernet', 'Wi-Fi' -network_interface = - -[AddOns] -# Used to disable add-ons -# List of title IDs of games that will have add-ons disabled (separated by '|'): -title_ids = -# For each title ID, have a key/value pair called `disabled_<title_id>` equal to the names of the add-ons to disable (sep. by '|') -# e.x. disabled_0100000000010000 = Update|DLC <- disables Updates and DLC on Super Mario Odyssey -)"; -} // namespace DefaultINI diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 64663b084..617288ae4 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -52,8 +52,8 @@  #include "core/hle/service/am/applets/applets.h"  #include "core/hle/service/filesystem/filesystem.h"  #include "core/loader/loader.h" +#include "frontend_common/config.h"  #include "jni/android_common/android_common.h" -#include "jni/config.h"  #include "jni/id_cache.h"  #include "jni/native.h"  #include "video_core/renderer_base.h" @@ -664,8 +664,6 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_onTouchReleased(JNIEnv* env, jclass c  void Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeSystem(JNIEnv* env, jclass clazz,                                                              jboolean reload) { -    // Create the default config.ini. -    Config{};      // Initialize the emulated system.      if (!reload) {          EmulationSession::GetInstance().System().Initialize(); @@ -680,17 +678,6 @@ jint Java_org_yuzu_yuzu_1emu_NativeLibrary_defaultCPUCore(JNIEnv* env, jclass cl  void Java_org_yuzu_yuzu_1emu_NativeLibrary_run__Ljava_lang_String_2Ljava_lang_String_2Z(      JNIEnv* env, jclass clazz, jstring j_file, jstring j_savestate, jboolean j_delete_savestate) {} -void Java_org_yuzu_yuzu_1emu_NativeLibrary_reloadSettings(JNIEnv* env, jclass clazz) { -    Config{}; -} - -void Java_org_yuzu_yuzu_1emu_NativeLibrary_initGameIni(JNIEnv* env, jclass clazz, -                                                       jstring j_game_id) { -    std::string_view game_id = env->GetStringUTFChars(j_game_id, 0); - -    env->ReleaseStringUTFChars(j_game_id, game_id.data()); -} -  jdoubleArray Java_org_yuzu_yuzu_1emu_NativeLibrary_getPerfStats(JNIEnv* env, jclass clazz) {      jdoubleArray j_stats = env->NewDoubleArray(4); diff --git a/src/android/app/src/main/jni/native_config.cpp b/src/android/app/src/main/jni/native_config.cpp index 8a704960c..8e81816e5 100644 --- a/src/android/app/src/main/jni/native_config.cpp +++ b/src/android/app/src/main/jni/native_config.cpp @@ -5,11 +5,14 @@  #include <jni.h> +#include "android_config.h" +#include "android_settings.h"  #include "common/logging/log.h"  #include "common/settings.h" +#include "frontend_common/config.h"  #include "jni/android_common/android_common.h" -#include "jni/config.h" -#include "uisettings.h" + +std::unique_ptr<AndroidConfig> config;  template <typename T>  Settings::Setting<T>* getSetting(JNIEnv* env, jstring jkey) { @@ -28,6 +31,22 @@ Settings::Setting<T>* getSetting(JNIEnv* env, jstring jkey) {  extern "C" { +void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_initializeConfig(JNIEnv* env, jobject obj) { +    config = std::make_unique<AndroidConfig>(); +} + +void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_unloadConfig(JNIEnv* env, jobject obj) { +    config.reset(); +} + +void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_reloadSettings(JNIEnv* env, jobject obj) { +    config->AndroidConfig::ReloadAllValues(); +} + +void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_saveSettings(JNIEnv* env, jobject obj) { +    config->AndroidConfig::SaveAllValues(); +} +  jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getBoolean(JNIEnv* env, jobject obj,                                                                 jstring jkey, jboolean getDefault) {      auto setting = getSetting<bool>(env, jkey); | 
