From 13d1ef6681f5bf95be2669720edccd26ea258754 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 18 Jul 2020 19:27:32 +0200 Subject: [PATCH] Android: Centralize setting definitions Except controller settings, because those would be annoying to fit into the same system, and I only need the non-controller settings to be brought over for the next commits to work. --- .../activities/EmulationActivity.java | 5 +- .../dialogs/GamePropertiesDialog.java | 16 +- .../settings/model/AbstractSetting.java | 6 + .../settings/model/BooleanSetting.java | 8 + .../features/settings/model/FloatSetting.java | 8 + .../features/settings/model/IntSetting.java | 8 + .../settings/model/LegacySetting.java | 69 ++ .../features/settings/model/Setting.java | 186 ++++ .../features/settings/model/Settings.java | 65 +- .../settings/model/StringSetting.java | 8 + .../settings/model/view/CheckBoxSetting.java | 11 +- .../settings/model/view/ConfirmRunnable.java | 2 +- .../settings/model/view/FilePicker.java | 11 +- .../model/view/FloatSliderSetting.java | 14 +- .../settings/model/view/HeaderSetting.java | 4 +- .../model/view/InputBindingSetting.java | 26 +- .../settings/model/view/IntSliderSetting.java | 13 +- .../model/view/InvertedCheckBoxSetting.java | 9 +- .../model/view/LogCheckBoxSetting.java | 22 + .../model/view/PercentSliderSetting.java | 12 +- .../settings/model/view/SettingsItem.java | 36 +- .../model/view/SingleChoiceSetting.java | 21 +- ...ingleChoiceSettingDynamicDescriptions.java | 25 +- .../settings/model/view/SliderSetting.java | 5 +- .../model/view/StringSingleChoiceSetting.java | 24 +- .../settings/model/view/SubmenuSetting.java | 4 +- .../settings/ui/SettingsActivity.java | 4 +- .../ui/SettingsActivityPresenter.java | 16 +- .../settings/ui/SettingsActivityView.java | 4 +- .../features/settings/ui/SettingsAdapter.java | 47 +- .../settings/ui/SettingsFragment.java | 4 +- .../ui/SettingsFragmentPresenter.java | 808 +++++++++--------- .../settings/ui/SettingsFragmentView.java | 4 +- .../viewholder/CheckBoxSettingViewHolder.java | 7 +- .../features/settings/utils/SettingsFile.java | 107 +-- .../dolphinemu/fragments/MenuFragment.java | 9 +- .../dolphinemu/model/GameFileCache.java | 10 +- .../dolphinemu/overlay/InputOverlay.java | 3 +- .../dolphinemu/ui/main/MainActivity.java | 24 +- .../dolphinemu/utils/Analytics.java | 46 +- .../dolphinemu/dolphinemu/utils/Rumble.java | 2 +- .../app/src/main/res/values/strings.xml | 2 +- 42 files changed, 929 insertions(+), 786 deletions(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractSetting.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacySetting.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Setting.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/LogCheckBoxSetting.java diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java index 2e5430d9ee..bb325639c9 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java @@ -33,6 +33,7 @@ import androidx.fragment.app.FragmentManager; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; import org.dolphinemu.dolphinemu.fragments.EmulationFragment; @@ -855,7 +856,7 @@ public final class EmulationActivity extends AppCompatActivity { editor.putInt("wiiController", indexSelected); - File wiimoteNewFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_WIIMOTE); + File wiimoteNewFile = SettingsFile.getSettingsFile(Settings.FILE_WIIMOTE); IniFile wiimoteNewIni = new IniFile(wiimoteNewFile); wiimoteNewIni.setString("Wiimote1", "Extension", getResources().getStringArray(R.array.controllersValues)[indexSelected]); @@ -889,7 +890,7 @@ public final class EmulationActivity extends AppCompatActivity else mMotionListener.disable(); - File wiimoteNewFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_WIIMOTE); + File wiimoteNewFile = SettingsFile.getSettingsFile(Settings.FILE_WIIMOTE); IniFile wiimoteNewIni = new IniFile(wiimoteNewFile); wiimoteNewIni.setBoolean("Wiimote1", "IMUIR/Enabled", indexSelected != 1); wiimoteNewIni.save(wiimoteNewFile); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java index ec50ac2854..d7007e529e 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java @@ -8,15 +8,13 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; -import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; -import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; -import org.dolphinemu.dolphinemu.utils.IniFile; import org.dolphinemu.dolphinemu.utils.Log; import java.io.File; @@ -65,14 +63,10 @@ public class GamePropertiesDialog extends DialogFragment .getSupportFragmentManager(), "game_details"); break; case 1: - File dolphinFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_DOLPHIN); - IniFile dolphinIni = new IniFile(dolphinFile); - dolphinIni.setString(Settings.SECTION_INI_CORE, SettingsFile.KEY_DEFAULT_ISO, - path); - dolphinIni.save(dolphinFile); - - NativeLibrary.ReloadConfig(); - Toast.makeText(getContext(), "Default ISO set", Toast.LENGTH_SHORT).show(); + Settings settings = new Settings(); + settings.loadSettings(null); + Setting.MAIN_DEFAULT_ISO.setString(settings, path); + settings.saveSettings(null, getContext()); break; case 2: SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractSetting.java new file mode 100644 index 0000000000..e24565410b --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractSetting.java @@ -0,0 +1,6 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public interface AbstractSetting +{ + boolean delete(Settings settings); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java new file mode 100644 index 0000000000..4ee266a031 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java @@ -0,0 +1,8 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public interface BooleanSetting extends AbstractSetting +{ + boolean getBoolean(Settings settings, boolean defaultValue); + + void setBoolean(Settings settings, boolean newValue); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java new file mode 100644 index 0000000000..b8ed91a4b9 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java @@ -0,0 +1,8 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public interface FloatSetting extends AbstractSetting +{ + float getFloat(Settings settings, float defaultValue); + + void setFloat(Settings settings, float newValue); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java new file mode 100644 index 0000000000..14182df6c3 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java @@ -0,0 +1,8 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public interface IntSetting extends AbstractSetting +{ + int getInt(Settings settings, int defaultValue); + + void setInt(Settings settings, int newValue); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacySetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacySetting.java new file mode 100644 index 0000000000..a04acc47f6 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacySetting.java @@ -0,0 +1,69 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public class LegacySetting implements StringSetting, BooleanSetting, IntSetting, FloatSetting +{ + private final String mFile; + private final String mSection; + private final String mKey; + + public LegacySetting(String file, String section, String key) + { + mFile = file; + mSection = section; + mKey = key; + } + + @Override + public boolean delete(Settings settings) + { + return settings.getSection(mFile, mSection).delete(mKey); + } + + @Override + public String getString(Settings settings, String defaultValue) + { + return settings.getSection(mFile, mSection).getString(mKey, defaultValue); + } + + @Override + public boolean getBoolean(Settings settings, boolean defaultValue) + { + return settings.getSection(mFile, mSection).getBoolean(mKey, defaultValue); + } + + @Override + public int getInt(Settings settings, int defaultValue) + { + return settings.getSection(mFile, mSection).getInt(mKey, defaultValue); + } + + @Override + public float getFloat(Settings settings, float defaultValue) + { + return settings.getSection(mFile, mSection).getFloat(mKey, defaultValue); + } + + @Override + public void setString(Settings settings, String newValue) + { + settings.getSection(mFile, mSection).setString(mKey, newValue); + } + + @Override + public void setBoolean(Settings settings, boolean newValue) + { + settings.getSection(mFile, mSection).setBoolean(mKey, newValue); + } + + @Override + public void setInt(Settings settings, int newValue) + { + settings.getSection(mFile, mSection).setInt(mKey, newValue); + } + + @Override + public void setFloat(Settings settings, float newValue) + { + settings.getSection(mFile, mSection).setFloat(mKey, newValue); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Setting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Setting.java new file mode 100644 index 0000000000..a16ea015ee --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Setting.java @@ -0,0 +1,186 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public enum Setting implements StringSetting, BooleanSetting, IntSetting, FloatSetting +{ + // These entries have the same names and order as in C++, just for consistency. + + MAIN_CPU_CORE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "CPUCore"), + MAIN_DSP_HLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "DSPHLE"), + MAIN_CPU_THREAD(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "CPUThread"), + MAIN_DEFAULT_ISO(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "DefaultISO"), + MAIN_GC_LANGUAGE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SelectedLanguage"), + MAIN_OVERRIDE_REGION_SETTINGS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, + "OverrideRegionSettings"), + MAIN_AUDIO_STRETCH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AudioStretch"), + MAIN_SLOT_A(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SlotA"), + MAIN_SLOT_B(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SlotB"), + MAIN_WII_SD_CARD(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "WiiSDCard"), + MAIN_WIIMOTE_CONTINUOUS_SCANNING(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, + "WiimoteContinuousScanning"), + MAIN_WIIMOTE_ENABLE_SPEAKER(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, + "WiimoteEnableSpeaker"), + MAIN_EMULATION_SPEED(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "EmulationSpeed"), + MAIN_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Overclock"), + MAIN_OVERCLOCK_ENABLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "OverclockEnable"), + MAIN_GFX_BACKEND(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "GFXBackend"), + MAIN_AUTO_DISC_CHANGE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AutoDiscChange"), + MAIN_ALLOW_SD_WRITES(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "WiiSDCardAllowWrites"), + MAIN_ENABLE_SAVESTATES(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "EnableSaveStates"), + + MAIN_DSP_JIT(Settings.FILE_DOLPHIN, Settings.SECTION_INI_DSP, "EnableJIT"), + MAIN_AUDIO_VOLUME(Settings.FILE_DOLPHIN, Settings.SECTION_INI_DSP, "Volume"), + + MAIN_DUMP_PATH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "DumpPath"), + MAIN_LOAD_PATH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "LoadPath"), + MAIN_RESOURCEPACK_PATH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "ResourcePackPath"), + MAIN_FS_PATH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "NANDRootPath"), + MAIN_SD_PATH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, "WiiSDCardPath"), + + MAIN_USE_PANIC_HANDLERS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_INTERFACE, + "UsePanicHandlers"), + MAIN_OSD_MESSAGES(Settings.FILE_DOLPHIN, Settings.SECTION_INI_INTERFACE, + "OnScreenDisplayMessages"), + + MAIN_ANALYTICS_ENABLED(Settings.FILE_DOLPHIN, Settings.SECTION_ANALYTICS, "Enabled"), + MAIN_ANALYTICS_PERMISSION_ASKED(Settings.FILE_DOLPHIN, Settings.SECTION_ANALYTICS, + "PermissionAsked"), + + MAIN_RECURSIVE_ISO_PATHS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL, + "RecursiveISOPaths"), + + MAIN_LAST_PLATFORM_TAB(Settings.FILE_DOLPHIN, Settings.SECTION_INI_ANDROID, "LastPlatformTab"), + + GFX_WIDESCREEN_HACK(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "wideScreenHack"), + GFX_ASPECT_RATIO(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "AspectRatio"), + GFX_SAFE_TEXTURE_CACHE_COLOR_SAMPLES(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, + "SafeTextureCacheColorSamples"), + GFX_SHOW_FPS(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "ShowFPS"), + GFX_ENABLE_GPU_TEXTURE_DECODING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, + "EnableGPUTextureDecoding"), + GFX_ENABLE_PIXEL_LIGHTING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, + "EnablePixelLighting"), + GFX_FAST_DEPTH_CALC(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "FastDepthCalc"), + GFX_MSAA(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "MSAA"), + GFX_EFB_SCALE(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "InternalResolution"), + GFX_DISABLE_FOG(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "DisableFog"), + GFX_BACKEND_MULTITHREADING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, + "BackendMultithreading"), + GFX_WAIT_FOR_SHADERS_BEFORE_STARTING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, + "WaitForShadersBeforeStarting"), + GFX_SHADER_COMPILATION_MODE(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, + "ShaderCompilationMode"), + + GFX_ENHANCE_FORCE_FILTERING(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS, + "ForceFiltering"), + GFX_ENHANCE_MAX_ANISOTROPY(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS, "MaxAnisotropy"), + GFX_ENHANCE_POST_SHADER(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS, + "PostProcessingShader"), + GFX_ENHANCE_FORCE_TRUE_COLOR(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS, + "ForceTrueColor"), + GFX_ENHANCE_DISABLE_COPY_FILTER(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS, + "DisableCopyFilter"), + GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS, + "ArbitraryMipmapDetection"), + + GFX_STEREO_MODE(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoMode"), + GFX_STEREO_DEPTH(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoDepth"), + GFX_STEREO_CONVERGENCE_PERCENTAGE(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, + "StereoConvergencePercentage"), + GFX_STEREO_SWAP_EYES(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoSwapEyes"), + + GFX_HACK_EFB_ACCESS_ENABLE(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "EFBAccessEnable"), + GFX_HACK_SKIP_EFB_COPY_TO_RAM(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, + "EFBToTextureEnable"), + GFX_HACK_SKIP_XFB_COPY_TO_RAM(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, + "XFBToTextureEnable"), + GFX_HACK_DEFER_EFB_COPIES(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "DeferEFBCopies"), + GFX_HACK_IMMEDIATE_XFB(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "ImmediateXFBEnable"), + GFX_HACK_SKIP_DUPLICATE_XFBS(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "SkipDuplicateXFBs"), + GFX_HACK_COPY_EFB_SCALED(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "EFBScaledCopy"), + GFX_HACK_EFB_EMULATE_FORMAT_CHANGES(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, + "EFBEmulateFormatChanges"), + + LOGGER_WRITE_TO_FILE(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_OPTIONS, "WriteToFile"), + LOGGER_VERBOSITY(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_OPTIONS, "Verbosity"), + + // These settings are not yet in the new config system in C++ - please move them once they are + + MAIN_JIT_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitOff"), + MAIN_JIT_LOAD_STORE_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitLoadStoreOff"), + MAIN_JIT_LOAD_STORE_FLOATING_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, + "JitLoadStoreFloatingOff"), + MAIN_JIT_LOAD_STORE_PAIRED_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, + "JitLoadStorePairedOff"), + MAIN_JIT_FLOATING_POINT_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitFloatingPointOff"), + MAIN_JIT_INTEGER_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitIntegerOff"), + MAIN_JIT_PAIRED_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitPairedOff"), + MAIN_JIT_SYSTEM_REGISTERS_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, + "JitSystemRegistersOff"), + MAIN_JIT_BRANCH_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitBranchOff"), + MAIN_JIT_REGISTER_CACHE_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitRegisterCacheOff"); + + private final String mFile; + private final String mSection; + private final String mKey; + + Setting(String file, String section, String key) + { + mFile = file; + mSection = section; + mKey = key; + } + + @Override + public boolean delete(Settings settings) + { + return settings.getSection(mFile, mSection).delete(mKey); + } + + @Override + public String getString(Settings settings, String defaultValue) + { + return settings.getSection(mFile, mSection).getString(mKey, defaultValue); + } + + @Override + public boolean getBoolean(Settings settings, boolean defaultValue) + { + return settings.getSection(mFile, mSection).getBoolean(mKey, defaultValue); + } + + @Override + public int getInt(Settings settings, int defaultValue) + { + return settings.getSection(mFile, mSection).getInt(mKey, defaultValue); + } + + @Override + public float getFloat(Settings settings, float defaultValue) + { + return settings.getSection(mFile, mSection).getFloat(mKey, defaultValue); + } + + @Override + public void setString(Settings settings, String newValue) + { + settings.getSection(mFile, mSection).setString(mKey, newValue); + } + + @Override + public void setBoolean(Settings settings, boolean newValue) + { + settings.getSection(mFile, mSection).setBoolean(mKey, newValue); + } + + @Override + public void setInt(Settings settings, int newValue) + { + settings.getSection(mFile, mSection).setInt(mKey, newValue); + } + + @Override + public void setFloat(Settings settings, float newValue) + { + settings.getSection(mFile, mSection).setFloat(mKey, newValue); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java index c676d68a34..d0803f67d0 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java @@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.features.settings.model; import android.content.Context; import android.text.TextUtils; +import android.widget.Toast; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivityView; @@ -9,13 +10,17 @@ import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; import org.dolphinemu.dolphinemu.services.GameFileCacheService; import org.dolphinemu.dolphinemu.utils.IniFile; -import java.io.File; import java.util.HashMap; import java.util.Map; -import java.util.Set; public class Settings { + public static final String FILE_DOLPHIN = "Dolphin"; + public static final String FILE_GFX = "GFX"; + public static final String FILE_LOGGER = "Logger"; + public static final String FILE_GCPAD = "GCPadNew"; + public static final String FILE_WIIMOTE = "WiimoteNew"; + public static final String SECTION_INI_ANDROID = "Android"; public static final String SECTION_INI_GENERAL = "General"; public static final String SECTION_INI_CORE = "Core"; @@ -39,22 +44,19 @@ public class Settings public static final String SECTION_CONTROLS = "Controls"; public static final String SECTION_PROFILE = "Profile"; - private static final int DSP_HLE = 0; - private static final int DSP_LLE_RECOMPILER = 1; - private static final int DSP_LLE_INTERPRETER = 2; - public static final String SECTION_ANALYTICS = "Analytics"; public static final String GAME_SETTINGS_PLACEHOLDER_FILE_NAME = ""; private String gameId; - private static final String[] configFiles = new String[]{SettingsFile.FILE_NAME_DOLPHIN, - SettingsFile.FILE_NAME_GFX, SettingsFile.FILE_NAME_LOGGER, - SettingsFile.FILE_NAME_WIIMOTE}; + private static final String[] configFiles = new String[]{FILE_DOLPHIN, FILE_GFX, FILE_LOGGER, + FILE_WIIMOTE}; private HashMap mIniFiles = new HashMap<>(); + private boolean mLoadedRecursiveIsoPathsValue = false; + private IniFile getGameSpecificFile() { if (TextUtils.isEmpty(gameId) || mIniFiles.size() != 1) @@ -93,6 +95,8 @@ public class Settings { loadCustomGameSettings(gameId, view); } + + mLoadedRecursiveIsoPathsValue = Setting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(this, false); } private void loadDolphinSettings(SettingsActivityView view) @@ -123,62 +127,37 @@ public class Settings loadSettings(view); } - public void saveSettings(SettingsActivityView view, Context context, Set modifiedSettings) + public void saveSettings(SettingsActivityView view, Context context) { if (TextUtils.isEmpty(gameId)) { - view.showToastMessage("Saved settings to INI files"); + if (context != null) + Toast.makeText(context, "Saved settings to INI files", Toast.LENGTH_SHORT).show(); for (Map.Entry entry : mIniFiles.entrySet()) { SettingsFile.saveFile(entry.getKey(), entry.getValue(), view); } - if (modifiedSettings.contains(SettingsFile.KEY_DSP_ENGINE)) - { - File dolphinFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_DOLPHIN); - IniFile dolphinIni = new IniFile(dolphinFile); - - switch (dolphinIni.getInt(Settings.SECTION_INI_ANDROID, SettingsFile.KEY_DSP_ENGINE, - DSP_HLE)) - { - case DSP_HLE: - dolphinIni.setBoolean(Settings.SECTION_INI_CORE, SettingsFile.KEY_DSP_HLE, true); - dolphinIni.setBoolean(Settings.SECTION_INI_DSP, SettingsFile.KEY_DSP_ENABLE_JIT, true); - break; - - case DSP_LLE_RECOMPILER: - dolphinIni.setBoolean(Settings.SECTION_INI_CORE, SettingsFile.KEY_DSP_HLE, false); - dolphinIni.setBoolean(Settings.SECTION_INI_DSP, SettingsFile.KEY_DSP_ENABLE_JIT, true); - break; - - case DSP_LLE_INTERPRETER: - dolphinIni.setBoolean(Settings.SECTION_INI_CORE, SettingsFile.KEY_DSP_HLE, false); - dolphinIni.setBoolean(Settings.SECTION_INI_DSP, SettingsFile.KEY_DSP_ENABLE_JIT, false); - break; - } - - dolphinIni.save(dolphinFile); - } - // Notify the native code of the changes NativeLibrary.ReloadConfig(); NativeLibrary.ReloadWiimoteConfig(); NativeLibrary.ReloadLoggerConfig(); NativeLibrary.UpdateGCAdapterScanThread(); - if (modifiedSettings.contains(SettingsFile.KEY_RECURSIVE_ISO_PATHS)) + if (mLoadedRecursiveIsoPathsValue != Setting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(this, false)) { // Refresh game library GameFileCacheService.startRescan(context); } - - modifiedSettings.clear(); } else { // custom game settings - view.showToastMessage("Saved settings for " + gameId); + + if (context != null) + Toast.makeText(context, "Saved settings for " + gameId, Toast.LENGTH_SHORT).show(); + SettingsFile.saveCustomGameSettings(gameId, getGameSpecificFile()); } } @@ -214,6 +193,6 @@ public class Settings if (TextUtils.isEmpty(gameId)) return false; - return getSection(SettingsFile.FILE_NAME_DOLPHIN, SECTION_INI_INTERFACE).exists("ThemeName"); + return getSection(Settings.FILE_DOLPHIN, SECTION_INI_INTERFACE).exists("ThemeName"); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java new file mode 100644 index 0000000000..ee710ad7e5 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java @@ -0,0 +1,8 @@ +package org.dolphinemu.dolphinemu.features.settings.model; + +public interface StringSetting extends AbstractSetting +{ + String getString(Settings settings, String defaultValue); + + void setString(Settings settings, String newValue); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/CheckBoxSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/CheckBoxSetting.java index 8e03ac038c..5f8ed11951 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/CheckBoxSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/CheckBoxSetting.java @@ -1,26 +1,29 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; +import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; public class CheckBoxSetting extends SettingsItem { + protected BooleanSetting mSetting; protected boolean mDefaultValue; - public CheckBoxSetting(String file, String section, String key, int titleId, int descriptionId, + public CheckBoxSetting(BooleanSetting setting, int titleId, int descriptionId, boolean defaultValue) { - super(file, section, key, titleId, descriptionId); + super(titleId, descriptionId); + mSetting = setting; mDefaultValue = defaultValue; } public boolean isChecked(Settings settings) { - return settings.getSection(getFile(), getSection()).getBoolean(getKey(), mDefaultValue); + return mSetting.getBoolean(settings, mDefaultValue); } public void setChecked(Settings settings, boolean checked) { - settings.getSection(getFile(), getSection()).setBoolean(getKey(), checked); + mSetting.setBoolean(settings, checked); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/ConfirmRunnable.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/ConfirmRunnable.java index 4950778b64..b1a17ca96a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/ConfirmRunnable.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/ConfirmRunnable.java @@ -9,7 +9,7 @@ public final class ConfirmRunnable extends SettingsItem public ConfirmRunnable(int titleId, int descriptionId, int alertText, int confirmationText, Runnable runnable) { - super(null, null, null, titleId, descriptionId); + super(titleId, descriptionId); mAlertText = alertText; mConfirmationText = confirmationText; mRunnable = runnable; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FilePicker.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FilePicker.java index 8a6890d019..d6c2da5319 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FilePicker.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FilePicker.java @@ -1,28 +1,31 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; import org.dolphinemu.dolphinemu.features.settings.model.Settings; +import org.dolphinemu.dolphinemu.features.settings.model.StringSetting; public final class FilePicker extends SettingsItem { + private StringSetting mSetting; private String mDefaultValue; private int mRequestType; - public FilePicker(String file, String section, String key, int titleId, int descriptionId, + public FilePicker(StringSetting setting, int titleId, int descriptionId, String defaultVault, int requestType) { - super(file, section, key, titleId, descriptionId); + super(titleId, descriptionId); + mSetting = setting; mDefaultValue = defaultVault; mRequestType = requestType; } public String getSelectedValue(Settings settings) { - return settings.getSection(getFile(), getSection()).getString(getKey(), mDefaultValue); + return mSetting.getString(settings, mDefaultValue); } public void setSelectedValue(Settings settings, String selection) { - settings.getSection(getFile(), getSection()).setString(getKey(), selection); + mSetting.setString(settings, selection); } public int getRequestType() diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FloatSliderSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FloatSliderSetting.java index 06c27989de..3c736c376f 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FloatSliderSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FloatSliderSetting.java @@ -1,26 +1,28 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; +import org.dolphinemu.dolphinemu.features.settings.model.FloatSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; public class FloatSliderSetting extends SliderSetting { + protected FloatSetting mSetting; protected float mDefaultValue; - public FloatSliderSetting(String file, String section, String key, int titleId, int descriptionId, - int max, String units, float defaultValue) + public FloatSliderSetting(FloatSetting setting, int titleId, int descriptionId, int max, + String units, float defaultValue) { - super(file, section, key, titleId, descriptionId, max, units); + super(titleId, descriptionId, max, units); + mSetting = setting; mDefaultValue = defaultValue; } public int getSelectedValue(Settings settings) { - float value = settings.getSection(getFile(), getSection()).getFloat(getKey(), mDefaultValue); - return Math.round(value); + return Math.round(mSetting.getFloat(settings, mDefaultValue)); } public void setSelectedValue(Settings settings, float selection) { - settings.getSection(getFile(), getSection()).setFloat(getKey(), selection); + mSetting.setFloat(settings, selection); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/HeaderSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/HeaderSetting.java index 7948d5e67a..c793f9dac8 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/HeaderSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/HeaderSetting.java @@ -2,9 +2,9 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; public final class HeaderSetting extends SettingsItem { - public HeaderSetting(String key, int titleId, int descriptionId) + public HeaderSetting(int titleId, int descriptionId) { - super(null, null, key, titleId, descriptionId); + super(titleId, descriptionId); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java index d1941ab5d0..706a6ef21d 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java @@ -10,17 +10,29 @@ import org.dolphinemu.dolphinemu.features.settings.model.Settings; public class InputBindingSetting extends SettingsItem { - private String gameId; + private String mFile; + private String mSection; + private String mKey; + + private String mGameId; public InputBindingSetting(String file, String section, String key, int titleId, String gameId) { - super(file, section, key, titleId, 0); - this.gameId = gameId; + super(titleId, 0); + mFile = file; + mSection = section; + mKey = key; + mGameId = gameId; + } + + public String getKey() + { + return mKey; } public String getValue(Settings settings) { - return settings.getSection(getFile(), getSection()).getString(getKey(), ""); + return settings.getSection(mFile, mSection).getString(mKey, ""); } /** @@ -60,10 +72,10 @@ public class InputBindingSetting extends SettingsItem preferences = PreferenceManager.getDefaultSharedPreferences(DolphinApplication.getAppContext()); SharedPreferences.Editor editor = preferences.edit(); - editor.putString(getKey() + gameId, ui); + editor.putString(mKey + mGameId, ui); editor.apply(); - settings.getSection(getFile(), getSection()).setString(getKey(), bind); + settings.getSection(mFile, mSection).setString(mKey, bind); } public void clearValue(Settings settings) @@ -79,6 +91,6 @@ public class InputBindingSetting extends SettingsItem public String getGameId() { - return gameId; + return mGameId; } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/IntSliderSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/IntSliderSetting.java index 3455c1dd4a..eab1d4b54a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/IntSliderSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/IntSliderSetting.java @@ -1,25 +1,28 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; +import org.dolphinemu.dolphinemu.features.settings.model.IntSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; public final class IntSliderSetting extends SliderSetting { + private IntSetting mSetting; private int mDefaultValue; - public IntSliderSetting(String file, String section, String key, int titleId, int descriptionId, - int max, String units, int defaultValue) + public IntSliderSetting(IntSetting setting, int titleId, int descriptionId, int max, + String units, int defaultValue) { - super(file, section, key, titleId, descriptionId, max, units); + super(titleId, descriptionId, max, units); + mSetting = setting; mDefaultValue = defaultValue; } public int getSelectedValue(Settings settings) { - return settings.getSection(getFile(), getSection()).getInt(getKey(), mDefaultValue); + return mSetting.getInt(settings, mDefaultValue); } public void setSelectedValue(Settings settings, int selection) { - settings.getSection(getFile(), getSection()).setInt(getKey(), selection); + mSetting.setInt(settings, selection); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InvertedCheckBoxSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InvertedCheckBoxSetting.java index 8381843e43..9e5b9f08eb 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InvertedCheckBoxSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InvertedCheckBoxSetting.java @@ -1,24 +1,25 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; +import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; public final class InvertedCheckBoxSetting extends CheckBoxSetting { - public InvertedCheckBoxSetting(String file, String section, String key, int titleId, + public InvertedCheckBoxSetting(BooleanSetting setting, int titleId, int descriptionId, boolean defaultValue) { - super(file, section, key, titleId, descriptionId, !defaultValue); + super(setting, titleId, descriptionId, !defaultValue); } @Override public boolean isChecked(Settings settings) { - return !settings.getSection(getFile(), getSection()).getBoolean(getKey(), mDefaultValue); + return !mSetting.getBoolean(settings, mDefaultValue); } @Override public void setChecked(Settings settings, boolean checked) { - settings.getSection(getFile(), getSection()).setBoolean(getKey(), !checked); + mSetting.setBoolean(settings, !checked); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/LogCheckBoxSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/LogCheckBoxSetting.java new file mode 100644 index 0000000000..6bd9fccdda --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/LogCheckBoxSetting.java @@ -0,0 +1,22 @@ +package org.dolphinemu.dolphinemu.features.settings.model.view; + +import org.dolphinemu.dolphinemu.features.settings.model.LegacySetting; +import org.dolphinemu.dolphinemu.features.settings.model.Settings; + +public class LogCheckBoxSetting extends CheckBoxSetting +{ + String mKey; + + public LogCheckBoxSetting(String key, int titleId, int descriptionId, + boolean defaultValue) + { + super(new LegacySetting(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_LOGS, key), titleId, + descriptionId, defaultValue); + mKey = key; + } + + public String getKey() + { + return mKey; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/PercentSliderSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/PercentSliderSetting.java index dda5a6a774..14b5eaf459 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/PercentSliderSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/PercentSliderSetting.java @@ -1,25 +1,25 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; +import org.dolphinemu.dolphinemu.features.settings.model.FloatSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; public final class PercentSliderSetting extends FloatSliderSetting { - public PercentSliderSetting(String file, String section, String key, int titleId, - int descriptionId, int max, String units, float defaultValue) + public PercentSliderSetting(FloatSetting setting, int titleId, int descriptionId, int max, + String units, float defaultValue) { - super(file, section, key, titleId, descriptionId, max, units, defaultValue / 100); + super(setting, titleId, descriptionId, max, units, defaultValue / 100); } @Override public int getSelectedValue(Settings settings) { - float value = settings.getSection(getFile(), getSection()).getFloat(getKey(), mDefaultValue); - return Math.round(value * 100); + return Math.round(mSetting.getFloat(settings, mDefaultValue) * 100); } @Override public void setSelectedValue(Settings settings, float selection) { - settings.getSection(getFile(), getSection()).setFloat(getKey(), selection / 100); + mSetting.setFloat(settings, selection / 100); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java index 0a50a33f31..a301f5ec19 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java @@ -21,56 +21,22 @@ public abstract class SettingsItem public static final int TYPE_FILE_PICKER = 9; public static final int TYPE_CONFIRM_RUNNABLE = 10; - private String mFile; - private String mSection; - private String mKey; - private int mNameId; private int mDescriptionId; /** * Base constructor. * - * @param file File to which the Setting belongs. - * @param section Section to which the Setting belongs. - * @param key Identifier for the Setting represented by this Item. * @param nameId Resource ID for a text string to be displayed as this setting's name. * @param descriptionId Resource ID for a text string to be displayed as this setting's description. */ - public SettingsItem(String file, String section, String key, int nameId, int descriptionId) + public SettingsItem(int nameId, int descriptionId) { - mFile = file; - mSection = section; - mKey = key; mNameId = nameId; mDescriptionId = descriptionId; } - /** - * @return The file in which the backing setting belongs. - */ - public String getFile() - { - return mFile; - } - - /** - * @return The header under which the backing setting belongs. - */ - public String getSection() - { - return mSection; - } - - /** - * @return The identifier for the backing setting. - */ - public String getKey() - { - return mKey; - } - /** * @return A resource ID for a text string representing this setting's name. */ diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSetting.java index f3a0b3cf7b..8dac68e536 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSetting.java @@ -1,30 +1,33 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; +import org.dolphinemu.dolphinemu.features.settings.model.IntSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; public final class SingleChoiceSetting extends SettingsItem { + private IntSetting mSetting; private int mDefaultValue; private int mChoicesId; private int mValuesId; private MenuTag menuTag; - public SingleChoiceSetting(String file, String section, String key, int titleId, - int descriptionId, int choicesId, int valuesId, int defaultValue, MenuTag menuTag) + public SingleChoiceSetting(IntSetting setting, int titleId, int descriptionId, int choicesId, + int valuesId, int defaultValue, MenuTag menuTag) { - super(file, section, key, titleId, descriptionId); + super(titleId, descriptionId); + mSetting = setting; + mDefaultValue = defaultValue; mValuesId = valuesId; mChoicesId = choicesId; - mDefaultValue = defaultValue; this.menuTag = menuTag; } - public SingleChoiceSetting(String file, String section, String key, int titleId, - int descriptionId, int choicesId, int valuesId, int defaultValue) + public SingleChoiceSetting(IntSetting setting, int titleId, int descriptionId, int choicesId, + int valuesId, int defaultValue) { - this(file, section, key, titleId, descriptionId, choicesId, valuesId, defaultValue, null); + this(setting, titleId, descriptionId, choicesId, valuesId, defaultValue, null); } public int getChoicesId() @@ -39,7 +42,7 @@ public final class SingleChoiceSetting extends SettingsItem public int getSelectedValue(Settings settings) { - return settings.getSection(getFile(), getSection()).getInt(getKey(), mDefaultValue); + return mSetting.getInt(settings, mDefaultValue); } public MenuTag getMenuTag() @@ -49,7 +52,7 @@ public final class SingleChoiceSetting extends SettingsItem public void setSelectedValue(Settings settings, int selection) { - settings.getSection(getFile(), getSection()).setInt(getKey(), selection); + mSetting.setInt(settings, selection); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java index a3135569b7..bc1cf1ab65 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java @@ -1,10 +1,12 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; +import org.dolphinemu.dolphinemu.features.settings.model.IntSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem { + private IntSetting mSetting; private int mDefaultValue; private int mChoicesId; @@ -13,24 +15,25 @@ public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem private int mDescriptionValuesId; private MenuTag menuTag; - public SingleChoiceSettingDynamicDescriptions(String file, String section, String key, - int titleId, int descriptionId, int choicesId, int valuesId, int descriptionChoicesId, - int descriptionValuesId, int defaultValue, MenuTag menuTag) + public SingleChoiceSettingDynamicDescriptions(IntSetting setting, int titleId, int descriptionId, + int choicesId, int valuesId, int descriptionChoicesId, int descriptionValuesId, + int defaultValue, MenuTag menuTag) { - super(file, section, key, titleId, descriptionId); + super(titleId, descriptionId); + mSetting = setting; + mDefaultValue = defaultValue; mValuesId = valuesId; mChoicesId = choicesId; mDescriptionChoicesId = descriptionChoicesId; mDescriptionValuesId = descriptionValuesId; - mDefaultValue = defaultValue; this.menuTag = menuTag; } - public SingleChoiceSettingDynamicDescriptions(String file, String section, String key, - int titleId, int descriptionId, int choicesId, int valuesId, int descriptionChoicesId, - int descriptionValuesId, int defaultValue) + public SingleChoiceSettingDynamicDescriptions(IntSetting setting, int titleId, int descriptionId, + int choicesId, int valuesId, int descriptionChoicesId, int descriptionValuesId, + int defaultValue) { - this(file, section, key, titleId, descriptionId, choicesId, valuesId, descriptionChoicesId, + this(setting, titleId, descriptionId, choicesId, valuesId, descriptionChoicesId, descriptionValuesId, defaultValue, null); } @@ -56,7 +59,7 @@ public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem public int getSelectedValue(Settings settings) { - return settings.getSection(getFile(), getSection()).getInt(getKey(), mDefaultValue); + return mSetting.getInt(settings, mDefaultValue); } public MenuTag getMenuTag() @@ -66,7 +69,7 @@ public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem public void setSelectedValue(Settings settings, int selection) { - settings.getSection(getFile(), getSection()).setInt(getKey(), selection); + mSetting.setInt(settings, selection); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SliderSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SliderSetting.java index 75c0f9b617..a50d5203a6 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SliderSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SliderSetting.java @@ -7,10 +7,9 @@ public abstract class SliderSetting extends SettingsItem private int mMax; private String mUnits; - public SliderSetting(String file, String section, String key, int nameId, int descriptionId, - int max, String units) + public SliderSetting(int nameId, int descriptionId, int max, String units) { - super(file, section, key, nameId, descriptionId); + super(nameId, descriptionId); mMax = max; mUnits = units; } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java index 8532e34ccd..97ce6d00a2 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java @@ -2,47 +2,51 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; import org.dolphinemu.dolphinemu.DolphinApplication; import org.dolphinemu.dolphinemu.features.settings.model.Settings; +import org.dolphinemu.dolphinemu.features.settings.model.StringSetting; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; public class StringSingleChoiceSetting extends SettingsItem { + private StringSetting mSetting; private String mDefaultValue; private String[] mChoicesId; private String[] mValuesId; private MenuTag mMenuTag; - public StringSingleChoiceSetting(String file, String section, String key, int titleId, + public StringSingleChoiceSetting(StringSetting setting, int titleId, int descriptionId, String[] choicesId, String[] valuesId, String defaultValue, MenuTag menuTag) { - super(file, section, key, titleId, descriptionId); + super(titleId, descriptionId); + mSetting = setting; mChoicesId = choicesId; mValuesId = valuesId; mDefaultValue = defaultValue; mMenuTag = menuTag; } - public StringSingleChoiceSetting(String file, String section, String key, int titleId, + public StringSingleChoiceSetting(StringSetting setting, int titleId, int descriptionId, String[] choicesId, String[] valuesId, String defaultValue) { - this(file, section, key, titleId, descriptionId, choicesId, valuesId, defaultValue, null); + this(setting, titleId, descriptionId, choicesId, valuesId, defaultValue, null); } - public StringSingleChoiceSetting(String file, String section, String key, int titleId, + public StringSingleChoiceSetting(StringSetting setting, int titleId, int descriptionId, int choicesId, int valuesId, String defaultValue, MenuTag menuTag) { - super(file, section, key, titleId, descriptionId); + super(titleId, descriptionId); + mSetting = setting; mChoicesId = DolphinApplication.getAppContext().getResources().getStringArray(choicesId); mValuesId = DolphinApplication.getAppContext().getResources().getStringArray(valuesId); mDefaultValue = defaultValue; mMenuTag = menuTag; } - public StringSingleChoiceSetting(String file, String section, String key, int titleId, + public StringSingleChoiceSetting(StringSetting setting, int titleId, int descriptionId, int choicesId, int valuesId, String defaultValue) { - this(file, section, key, titleId, descriptionId, choicesId, valuesId, defaultValue, null); + this(setting, titleId, descriptionId, choicesId, valuesId, defaultValue, null); } public String[] getChoicesId() @@ -70,7 +74,7 @@ public class StringSingleChoiceSetting extends SettingsItem public String getSelectedValue(Settings settings) { - return settings.getSection(getFile(), getSection()).getString(getKey(), mDefaultValue); + return mSetting.getString(settings, mDefaultValue); } public int getSelectValueIndex(Settings settings) @@ -94,7 +98,7 @@ public class StringSingleChoiceSetting extends SettingsItem public void setSelectedValue(Settings settings, String selection) { - settings.getSection(getFile(), getSection()).setString(getKey(), selection); + mSetting.setString(settings, selection); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SubmenuSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SubmenuSetting.java index fd6f9dd346..598c0fc9cb 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SubmenuSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SubmenuSetting.java @@ -6,9 +6,9 @@ public final class SubmenuSetting extends SettingsItem { private MenuTag mMenuKey; - public SubmenuSetting(String key, int titleId, MenuTag menuKey) + public SubmenuSetting(int titleId, MenuTag menuKey) { - super(null, null, key, titleId, 0); + super(titleId, 0); mMenuKey = menuKey; } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java index e4575b9b14..07e2340be9 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java @@ -224,9 +224,9 @@ public final class SettingsActivity extends AppCompatActivity implements Setting } @Override - public void onSettingChanged(String key) + public void onSettingChanged() { - mPresenter.onSettingChanged(key); + mPresenter.onSettingChanged(); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java index 710510c40c..6f24bbfc28 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java @@ -10,9 +10,6 @@ import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import org.dolphinemu.dolphinemu.utils.Log; -import java.util.HashSet; -import java.util.Set; - public final class SettingsActivityPresenter { private static final String KEY_SHOULD_SAVE = "should_save"; @@ -29,8 +26,6 @@ public final class SettingsActivityPresenter private String gameId; private Context context; - private final Set modifiedSettings = new HashSet<>(); - SettingsActivityPresenter(SettingsActivityView view, Settings settings) { mView = view; @@ -98,7 +93,7 @@ public final class SettingsActivityPresenter public void clearSettings() { mSettings.clearSettings(); - onSettingChanged(null); + onSettingChanged(); } public void onStop(boolean finishing) @@ -112,7 +107,7 @@ public final class SettingsActivityPresenter if (mSettings != null && finishing && mShouldSave) { Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI..."); - mSettings.saveSettings(mView, context, modifiedSettings); + mSettings.saveSettings(mView, context); } } @@ -127,13 +122,8 @@ public final class SettingsActivityPresenter return false; } - public void onSettingChanged(String key) + public void onSettingChanged() { - if (key != null) - { - modifiedSettings.add(key); - } - mShouldSave = true; } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java index f22261d36d..af4d12083b 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java @@ -53,10 +53,8 @@ public interface SettingsActivityView /** * Called by a containing Fragment to tell the Activity that a setting was changed; * unless this has been called, the Activity will not save to disk. - * - * @param key Key of the modified setting. */ - void onSettingChanged(String key); + void onSettingChanged(); /** * Called by a containing Fragment to tell the containing Activity that a GCPad's setting diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java index dc7e503175..da8d00a895 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java @@ -13,6 +13,8 @@ import androidx.recyclerview.widget.RecyclerView; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.dialogs.MotionAlertDialog; +import org.dolphinemu.dolphinemu.features.settings.model.LegacySetting; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.model.view.CheckBoxSetting; import org.dolphinemu.dolphinemu.features.settings.model.view.FilePicker; @@ -36,10 +38,8 @@ import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SettingViewHold import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SingleChoiceViewHolder; import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SliderViewHolder; import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SubmenuViewHolder; -import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; import org.dolphinemu.dolphinemu.ui.main.MainPresenter; import org.dolphinemu.dolphinemu.utils.FileBrowserHelper; -import org.dolphinemu.dolphinemu.utils.IniFile; import java.security.InvalidParameterException; import java.util.ArrayList; @@ -164,7 +164,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter { notifyItemChanged(position); - mView.onSettingChanged(item.getKey()); + mView.onSettingChanged(); }); dialog.setCanceledOnTouchOutside(false); dialog.show(); @@ -308,7 +308,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter entry : SettingsFragmentPresenter.LOG_TYPE_NAMES.entrySet()) { - section.setBoolean(entry.getKey(), value); + new LegacySetting(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_LOGS, entry.getKey()) + .setBoolean(settings, value); } - mView.onSettingChanged(null); + mView.onSettingChanged(); } private void handleMenuTag(MenuTag menuTag, int value) @@ -375,7 +372,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter sl) { - sl.add(new SubmenuSetting(null, R.string.general_submenu, MenuTag.CONFIG_GENERAL)); - sl.add(new SubmenuSetting(null, R.string.interface_submenu, MenuTag.CONFIG_INTERFACE)); - sl.add(new SubmenuSetting(null, R.string.audio_submenu, MenuTag.CONFIG_AUDIO)); - sl.add(new SubmenuSetting(null, R.string.paths_submenu, MenuTag.CONFIG_PATHS)); - sl.add(new SubmenuSetting(null, R.string.gamecube_submenu, MenuTag.CONFIG_GAME_CUBE)); - sl.add(new SubmenuSetting(null, R.string.wii_submenu, MenuTag.CONFIG_WII)); - sl.add(new SubmenuSetting(null, R.string.advanced_submenu, MenuTag.CONFIG_ADVANCED)); - sl.add(new SubmenuSetting(null, R.string.log_submenu, MenuTag.CONFIG_LOG)); - sl.add(new SubmenuSetting(null, R.string.debug_submenu, MenuTag.DEBUG)); - sl.add(new HeaderSetting(null, R.string.gametdb_thanks, 0)); + sl.add(new SubmenuSetting(R.string.general_submenu, MenuTag.CONFIG_GENERAL)); + sl.add(new SubmenuSetting(R.string.interface_submenu, MenuTag.CONFIG_INTERFACE)); + sl.add(new SubmenuSetting(R.string.audio_submenu, MenuTag.CONFIG_AUDIO)); + sl.add(new SubmenuSetting(R.string.paths_submenu, MenuTag.CONFIG_PATHS)); + sl.add(new SubmenuSetting(R.string.gamecube_submenu, MenuTag.CONFIG_GAME_CUBE)); + sl.add(new SubmenuSetting(R.string.wii_submenu, MenuTag.CONFIG_WII)); + sl.add(new SubmenuSetting(R.string.advanced_submenu, MenuTag.CONFIG_ADVANCED)); + sl.add(new SubmenuSetting(R.string.log_submenu, MenuTag.CONFIG_LOG)); + sl.add(new SubmenuSetting(R.string.debug_submenu, MenuTag.DEBUG)); + sl.add(new HeaderSetting(R.string.gametdb_thanks, 0)); } private void addGeneralSettings(ArrayList sl) { - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_DUAL_CORE, R.string.dual_core, R.string.dual_core_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_OVERRIDE_REGION_SETTINGS, R.string.override_region_settings, 0, - false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_AUTO_DISC_CHANGE, R.string.auto_disc_change, 0, false)); - sl.add(new PercentSliderSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_SPEED_LIMIT, R.string.speed_limit, 0, 200, "%", 100)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_ANALYTICS, - SettingsFile.KEY_ANALYTICS_ENABLED, R.string.analytics, 0, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_ENABLE_SAVE_STATES, R.string.enable_save_states, + sl.add(new CheckBoxSetting(Setting.MAIN_CPU_THREAD, R.string.dual_core, + R.string.dual_core_description, true)); + sl.add(new CheckBoxSetting(Setting.MAIN_OVERRIDE_REGION_SETTINGS, + R.string.override_region_settings, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_AUTO_DISC_CHANGE, R.string.auto_disc_change, 0, false)); + sl.add(new PercentSliderSetting(Setting.MAIN_EMULATION_SPEED, R.string.speed_limit, 0, 200, "%", + 100)); + sl.add(new CheckBoxSetting(Setting.MAIN_ANALYTICS_ENABLED, R.string.analytics, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_ENABLE_SAVESTATES, R.string.enable_save_states, R.string.enable_save_states_description, false)); } private void addInterfaceSettings(ArrayList sl) { - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_INTERFACE, - SettingsFile.KEY_USE_PANIC_HANDLERS, R.string.panic_handlers, + sl.add(new CheckBoxSetting(Setting.MAIN_USE_PANIC_HANDLERS, R.string.panic_handlers, R.string.panic_handlers_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_INTERFACE, - SettingsFile.KEY_OSD_MESSAGES, R.string.osd_messages, + sl.add(new CheckBoxSetting(Setting.MAIN_OSD_MESSAGES, R.string.osd_messages, R.string.osd_messages_description, true)); } private void addAudioSettings(ArrayList sl) { + final int DSP_HLE = 0; + final int DSP_LLE_RECOMPILER = 1; + final int DSP_LLE_INTERPRETER = 2; + + IntSetting dspEmulationEngine = new IntSetting() + { + @Override + public int getInt(Settings settings, int defaultValue) + { + if (Setting.MAIN_DSP_HLE.getBoolean(settings, true)) + { + return DSP_HLE; + } + else + { + boolean jit = Setting.MAIN_DSP_JIT.getBoolean(settings, true); + return jit ? DSP_LLE_RECOMPILER : DSP_LLE_INTERPRETER; + } + } + + @Override + public void setInt(Settings settings, int newValue) + { + switch (newValue) + { + case DSP_HLE: + Setting.MAIN_DSP_HLE.setBoolean(settings, true); + Setting.MAIN_DSP_JIT.setBoolean(settings, true); + break; + + case DSP_LLE_RECOMPILER: + Setting.MAIN_DSP_HLE.setBoolean(settings, false); + Setting.MAIN_DSP_JIT.setBoolean(settings, true); + break; + + case DSP_LLE_INTERPRETER: + Setting.MAIN_DSP_HLE.setBoolean(settings, false); + Setting.MAIN_DSP_JIT.setBoolean(settings, false); + break; + } + } + + @Override + public boolean delete(Settings settings) + { + // Not short circuiting + return Setting.MAIN_DSP_HLE.delete(settings) & Setting.MAIN_DSP_JIT.delete(settings); + } + }; + // TODO: Exclude values from arrays instead of having multiple arrays. int defaultCpuCore = NativeLibrary.DefaultCPUCore(); int dspEngineEntries; @@ -262,39 +310,29 @@ public final class SettingsFragmentPresenter dspEngineEntries = R.array.dspEngineEntriesGeneric; dspEngineValues = R.array.dspEngineValuesGeneric; } - // DSP Emulation Engine controls two settings. - // DSP Emulation Engine is read by Settings.saveSettings to modify the relevant settings. - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_ANDROID, - SettingsFile.KEY_DSP_ENGINE, R.string.dsp_emulation_engine, 0, dspEngineEntries, - dspEngineValues, 0)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_AUDIO_STRETCH, R.string.audio_stretch, + sl.add(new SingleChoiceSetting(dspEmulationEngine, R.string.dsp_emulation_engine, 0, + dspEngineEntries, dspEngineValues, 0)); + sl.add(new CheckBoxSetting(Setting.MAIN_AUDIO_STRETCH, R.string.audio_stretch, R.string.audio_stretch_description, false)); - sl.add(new IntSliderSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_DSP, - SettingsFile.KEY_AUDIO_VOLUME, R.string.audio_volume, 0, 100, "%", 100)); + sl.add(new IntSliderSetting(Setting.MAIN_AUDIO_VOLUME, R.string.audio_volume, 0, 100, "%", + 100)); } private void addPathsSettings(ArrayList sl) { - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_GENERAL, - SettingsFile.KEY_RECURSIVE_ISO_PATHS, R.string.search_subfolders, 0, false)); - sl.add(new FilePicker(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_DEFAULT_ISO, R.string.default_ISO, 0, "", + sl.add(new CheckBoxSetting(Setting.MAIN_RECURSIVE_ISO_PATHS, R.string.search_subfolders, 0, + false)); + sl.add(new FilePicker(Setting.MAIN_DEFAULT_ISO, R.string.default_ISO, 0, "", MainPresenter.REQUEST_GAME_FILE)); - sl.add(new FilePicker(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_GENERAL, - SettingsFile.KEY_NAND_ROOT_PATH, R.string.wii_NAND_root, 0, getDefaultNANDRootPath(), + sl.add(new FilePicker(Setting.MAIN_FS_PATH, R.string.wii_NAND_root, 0, getDefaultNANDRootPath(), MainPresenter.REQUEST_DIRECTORY)); - sl.add(new FilePicker(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_GENERAL, - SettingsFile.KEY_DUMP_PATH, R.string.dump_path, 0, getDefaultDumpPath(), + sl.add(new FilePicker(Setting.MAIN_DUMP_PATH, R.string.dump_path, 0, getDefaultDumpPath(), MainPresenter.REQUEST_DIRECTORY)); - sl.add(new FilePicker(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_GENERAL, - SettingsFile.KEY_LOAD_PATH, R.string.load_path, 0, getDefaultLoadPath(), + sl.add(new FilePicker(Setting.MAIN_LOAD_PATH, R.string.load_path, 0, getDefaultLoadPath(), MainPresenter.REQUEST_DIRECTORY)); - sl.add(new FilePicker(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_GENERAL, - SettingsFile.KEY_RESOURCE_PACK_PATH, R.string.resource_pack_path, 0, + sl.add(new FilePicker(Setting.MAIN_RESOURCEPACK_PATH, R.string.resource_pack_path, 0, getDefaultResourcePackPath(), MainPresenter.REQUEST_DIRECTORY)); - sl.add(new FilePicker(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_GENERAL, - SettingsFile.KEY_WII_SD_CARD_PATH, R.string.SD_card_path, 0, getDefaultSDPath(), + sl.add(new FilePicker(Setting.MAIN_SD_PATH, R.string.SD_card_path, 0, getDefaultSDPath(), MainPresenter.REQUEST_SD_FILE)); sl.add(new ConfirmRunnable(R.string.reset_paths, 0, R.string.reset_paths_confirmation, 0, mView.getAdapter()::resetPaths)); @@ -302,29 +340,23 @@ public final class SettingsFragmentPresenter private void addGameCubeSettings(ArrayList sl) { - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_GAME_CUBE_LANGUAGE, R.string.gamecube_system_language, 0, + sl.add(new SingleChoiceSetting(Setting.MAIN_GC_LANGUAGE, R.string.gamecube_system_language, 0, R.array.gameCubeSystemLanguageEntries, R.array.gameCubeSystemLanguageValues, 0)); - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_SLOT_A_DEVICE, R.string.slot_a_device, 0, R.array.slotDeviceEntries, - R.array.slotDeviceValues, 8)); - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_SLOT_B_DEVICE, R.string.slot_b_device, 0, R.array.slotDeviceEntries, - R.array.slotDeviceValues, 255)); + sl.add(new SingleChoiceSetting(Setting.MAIN_SLOT_A, R.string.slot_a_device, 0, + R.array.slotDeviceEntries, R.array.slotDeviceValues, 8)); + sl.add(new SingleChoiceSetting(Setting.MAIN_SLOT_B, R.string.slot_b_device, 0, + R.array.slotDeviceEntries, R.array.slotDeviceValues, 255)); } private void addWiiSettings(ArrayList sl) { - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_WII_SD_CARD, R.string.insert_sd_card, + sl.add(new CheckBoxSetting(Setting.MAIN_WII_SD_CARD, R.string.insert_sd_card, R.string.insert_sd_card_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_WII_SD_CARD_ALLOW_WRITES, R.string.wii_sd_card_allow_writes, 0, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_WIIMOTE_SCAN, R.string.wiimote_scanning, + sl.add(new CheckBoxSetting(Setting.MAIN_ALLOW_SD_WRITES, R.string.wii_sd_card_allow_writes, 0, + true)); + sl.add(new CheckBoxSetting(Setting.MAIN_WIIMOTE_CONTINUOUS_SCANNING, R.string.wiimote_scanning, R.string.wiimote_scanning_description, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_WIIMOTE_SPEAKER, R.string.wiimote_speaker, + sl.add(new CheckBoxSetting(Setting.MAIN_WIIMOTE_ENABLE_SPEAKER, R.string.wiimote_speaker, R.string.wiimote_speaker_description, false)); } @@ -351,14 +383,11 @@ public final class SettingsFragmentPresenter emuCoresEntries = R.array.emuCoresEntriesGeneric; emuCoresValues = R.array.emuCoresValuesGeneric; } - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_CPU_CORE, R.string.cpu_core, 0, emuCoresEntries, emuCoresValues, - defaultCpuCore)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_OVERCLOCK_ENABLE, R.string.overclock_enable, + sl.add(new SingleChoiceSetting(Setting.MAIN_CPU_CORE, R.string.cpu_core, 0, emuCoresEntries, + emuCoresValues, defaultCpuCore)); + sl.add(new CheckBoxSetting(Setting.MAIN_OVERCLOCK_ENABLE, R.string.overclock_enable, R.string.overclock_enable_description, false)); - sl.add(new PercentSliderSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_OVERCLOCK_PERCENT, R.string.overclock_title, + sl.add(new PercentSliderSetting(Setting.MAIN_OVERCLOCK, R.string.overclock_title, R.string.overclock_title_description, 400, "%", 100)); } @@ -366,20 +395,20 @@ public final class SettingsFragmentPresenter { for (int i = 0; i < 4; i++) { + LegacySetting gcPadSetting; if (mGameID.equals("")) { - // TODO: This controller_0 + i business is quite the hack. It should work, but only if the definitions are kept together and in order. - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_GCPAD_TYPE + i, R.string.controller_0 + i, 0, - R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, MenuTag.getGCPadMenuTag(i))); + gcPadSetting = new LegacySetting(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, + SettingsFile.KEY_GCPAD_TYPE + i); } else { - sl.add(new SingleChoiceSetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME, - Settings.SECTION_CONTROLS, SettingsFile.KEY_GCPAD_G_TYPE + i, - R.string.controller_0 + i, 0, R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, - MenuTag.getGCPadMenuTag(i))); + gcPadSetting = new LegacySetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME, + Settings.SECTION_CONTROLS, SettingsFile.KEY_GCPAD_G_TYPE + i); } + // TODO: This controller_0 + i business is quite the hack. It should work, but only if the definitions are kept together and in order. + sl.add(new SingleChoiceSetting(gcPadSetting, R.string.controller_0 + i, 0, + R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, MenuTag.getGCPadMenuTag(i))); } } @@ -387,103 +416,84 @@ public final class SettingsFragmentPresenter { for (int i = 0; i < 4; i++) { - // TODO: This wiimote_0 + i business is quite the hack. It should work, but only if the definitions are kept together and in order. + LegacySetting wiimoteSetting; if (mGameID.equals("")) { - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_WIIMOTE, - Settings.SECTION_WIIMOTE + (i + 1), SettingsFile.KEY_WIIMOTE_TYPE, - R.string.wiimote_4 + i, 0, R.array.wiimoteTypeEntries, R.array.wiimoteTypeValues, - 0, MenuTag.getWiimoteMenuTag(i + 4))); + wiimoteSetting = new LegacySetting(Settings.FILE_WIIMOTE, + Settings.SECTION_WIIMOTE + (i + 1), SettingsFile.KEY_WIIMOTE_TYPE); } else { - sl.add(new SingleChoiceSetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME, - Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIMOTE_G_TYPE + i, - R.string.wiimote_4 + i, 0, R.array.wiimoteTypeEntries, R.array.wiimoteTypeValues, - 0, MenuTag.getWiimoteMenuTag(i + 4))); + wiimoteSetting = new LegacySetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME, + Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIMOTE_G_TYPE + i); } + // TODO: This wiimote_0 + i business is quite the hack. It should work, but only if the definitions are kept together and in order. + sl.add(new SingleChoiceSetting(wiimoteSetting, R.string.wiimote_4 + i, 0, + R.array.wiimoteTypeEntries, R.array.wiimoteTypeValues, 0, + MenuTag.getWiimoteMenuTag(i + 4))); } } private void addGraphicsSettings(ArrayList sl) { - sl.add(new HeaderSetting(null, R.string.graphics_general, 0)); - sl.add(new StringSingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_VIDEO_BACKEND, R.string.video_backend, 0, + sl.add(new HeaderSetting(R.string.graphics_general, 0)); + sl.add(new StringSingleChoiceSetting(Setting.MAIN_GFX_BACKEND, R.string.video_backend, 0, R.array.videoBackendEntries, R.array.videoBackendValues, "OGL")); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_SHOW_FPS, R.string.show_fps, R.string.show_fps_description, false)); - sl.add(new SingleChoiceSettingDynamicDescriptions(SettingsFile.FILE_NAME_GFX, - Settings.SECTION_GFX_SETTINGS, SettingsFile.KEY_SHADER_COMPILATION_MODE, + sl.add(new CheckBoxSetting(Setting.GFX_SHOW_FPS, R.string.show_fps, + R.string.show_fps_description, false)); + sl.add(new SingleChoiceSettingDynamicDescriptions(Setting.GFX_SHADER_COMPILATION_MODE, R.string.shader_compilation_mode, 0, R.array.shaderCompilationModeEntries, R.array.shaderCompilationModeValues, R.array.shaderCompilationDescriptionEntries, R.array.shaderCompilationDescriptionValues, 0)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_WAIT_FOR_SHADERS, R.string.wait_for_shaders, - R.string.wait_for_shaders_description, false)); - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_ASPECT_RATIO, R.string.aspect_ratio, 0, R.array.aspectRatioEntries, - R.array.aspectRatioValues, 0)); + sl.add(new CheckBoxSetting(Setting.GFX_WAIT_FOR_SHADERS_BEFORE_STARTING, + R.string.wait_for_shaders, R.string.wait_for_shaders_description, false)); + sl.add(new SingleChoiceSetting(Setting.GFX_ASPECT_RATIO, R.string.aspect_ratio, 0, + R.array.aspectRatioEntries, R.array.aspectRatioValues, 0)); - sl.add(new HeaderSetting(null, R.string.graphics_enhancements_and_hacks, 0)); - sl.add(new SubmenuSetting(null, R.string.enhancements_submenu, MenuTag.ENHANCEMENTS)); - sl.add(new SubmenuSetting(null, R.string.hacks_submenu, MenuTag.HACKS)); + sl.add(new HeaderSetting(R.string.graphics_enhancements_and_hacks, 0)); + sl.add(new SubmenuSetting(R.string.enhancements_submenu, MenuTag.ENHANCEMENTS)); + sl.add(new SubmenuSetting(R.string.hacks_submenu, MenuTag.HACKS)); } private void addEnhanceSettings(ArrayList sl) { - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_INTERNAL_RES, R.string.internal_resolution, + sl.add(new SingleChoiceSetting(Setting.GFX_EFB_SCALE, R.string.internal_resolution, R.string.internal_resolution_description, R.array.internalResolutionEntries, R.array.internalResolutionValues, 1)); - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_FSAA, R.string.FSAA, R.string.FSAA_description, R.array.FSAAEntries, - R.array.FSAAValues, 1)); - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_ENHANCEMENTS, - SettingsFile.KEY_ANISOTROPY, R.string.anisotropic_filtering, - R.string.anisotropic_filtering_description, R.array.anisotropicFilteringEntries, - R.array.anisotropicFilteringValues, 0)); + sl.add(new SingleChoiceSetting(Setting.GFX_MSAA, R.string.FSAA, R.string.FSAA_description, + R.array.FSAAEntries, R.array.FSAAValues, 1)); + sl.add(new SingleChoiceSetting(Setting.GFX_ENHANCE_MAX_ANISOTROPY, + R.string.anisotropic_filtering, R.string.anisotropic_filtering_description, + R.array.anisotropicFilteringEntries, R.array.anisotropicFilteringValues, 0)); - int stereoModeValue = - mSettings.getSection(SettingsFile.FILE_NAME_GFX, Settings.SECTION_STEREOSCOPY) - .getInt(SettingsFile.KEY_STEREO_MODE, 0); + int stereoModeValue = Setting.GFX_STEREO_MODE.getInt(mSettings, 0); final int anaglyphMode = 3; String subDir = stereoModeValue == anaglyphMode ? "Anaglyph" : null; String[] shaderListEntries = getShaderList(subDir); String[] shaderListValues = new String[shaderListEntries.length]; System.arraycopy(shaderListEntries, 0, shaderListValues, 0, shaderListEntries.length); shaderListValues[0] = ""; - sl.add(new StringSingleChoiceSetting(SettingsFile.FILE_NAME_GFX, - Settings.SECTION_GFX_ENHANCEMENTS, SettingsFile.KEY_POST_SHADER, + sl.add(new StringSingleChoiceSetting(Setting.GFX_ENHANCE_POST_SHADER, R.string.post_processing_shader, 0, shaderListEntries, shaderListValues, "")); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_SCALED_EFB, R.string.scaled_efb_copy, + sl.add(new CheckBoxSetting(Setting.GFX_HACK_COPY_EFB_SCALED, R.string.scaled_efb_copy, R.string.scaled_efb_copy_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_PER_PIXEL, R.string.per_pixel_lighting, + sl.add(new CheckBoxSetting(Setting.GFX_ENABLE_PIXEL_LIGHTING, R.string.per_pixel_lighting, R.string.per_pixel_lighting_description, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_ENHANCEMENTS, - SettingsFile.KEY_FORCE_FILTERING, R.string.force_texture_filtering, - R.string.force_texture_filtering_description, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, - Settings.SECTION_GFX_ENHANCEMENTS, SettingsFile.KEY_FORCE_24_BIT_COLOR, - R.string.force_24bit_color, R.string.force_24bit_color_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_DISABLE_FOG, R.string.disable_fog, R.string.disable_fog_description, - false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_ENHANCEMENTS, - SettingsFile.KEY_DISABLE_COPY_FILTER, R.string.disable_copy_filter, - R.string.disable_copy_filter_description, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_ENHANCEMENTS, - SettingsFile.KEY_ARBITRARY_MIPMAP_DETECTION, R.string.arbitrary_mipmap_detection, - R.string.arbitrary_mipmap_detection_description, + sl.add(new CheckBoxSetting(Setting.GFX_ENHANCE_FORCE_FILTERING, + R.string.force_texture_filtering, R.string.force_texture_filtering_description, false)); + sl.add(new CheckBoxSetting(Setting.GFX_ENHANCE_FORCE_TRUE_COLOR, R.string.force_24bit_color, + R.string.force_24bit_color_description, true)); + sl.add(new CheckBoxSetting(Setting.GFX_DISABLE_FOG, R.string.disable_fog, + R.string.disable_fog_description, false)); + sl.add(new CheckBoxSetting(Setting.GFX_ENHANCE_DISABLE_COPY_FILTER, + R.string.disable_copy_filter, R.string.disable_copy_filter_description, false)); + sl.add(new CheckBoxSetting(Setting.GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION, + R.string.arbitrary_mipmap_detection, R.string.arbitrary_mipmap_detection_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_WIDE_SCREEN_HACK, R.string.wide_screen_hack, + sl.add(new CheckBoxSetting(Setting.GFX_WIDESCREEN_HACK, R.string.wide_screen_hack, R.string.wide_screen_hack_description, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_BACKEND_MULTITHREADING, R.string.backend_multithreading, + sl.add(new CheckBoxSetting(Setting.GFX_BACKEND_MULTITHREADING, R.string.backend_multithreading, R.string.backend_multithreading_description, false)); /* @@ -497,8 +507,7 @@ public final class SettingsFragmentPresenter (helper.supportsGLES3() && helper.GetVersion() >= 310 && helper.SupportsExtension("GL_ANDROID_extension_pack_es31a"))) { - sl.add(new SubmenuSetting(SettingsFile.KEY_STEREO_MODE, R.string.stereoscopy_submenu, - MenuTag.STEREOSCOPY)); + sl.add(new SubmenuSetting(R.string.stereoscopy_submenu, MenuTag.STEREOSCOPY)); } } @@ -544,113 +553,89 @@ public final class SettingsFragmentPresenter private void addHackSettings(ArrayList sl) { - sl.add(new HeaderSetting(null, R.string.embedded_frame_buffer, 0)); - sl.add(new InvertedCheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_SKIP_EFB, R.string.skip_efb_access, + sl.add(new HeaderSetting(R.string.embedded_frame_buffer, 0)); + sl.add(new InvertedCheckBoxSetting(Setting.GFX_HACK_EFB_ACCESS_ENABLE, R.string.skip_efb_access, R.string.skip_efb_access_description, false)); - sl.add(new InvertedCheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_IGNORE_FORMAT, R.string.ignore_format_changes, - R.string.ignore_format_changes_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_EFB_TEXTURE, R.string.efb_copy_method, + sl.add(new InvertedCheckBoxSetting(Setting.GFX_HACK_EFB_EMULATE_FORMAT_CHANGES, + R.string.ignore_format_changes, R.string.ignore_format_changes_description, true)); + sl.add(new CheckBoxSetting(Setting.GFX_HACK_SKIP_EFB_COPY_TO_RAM, R.string.efb_copy_method, R.string.efb_copy_method_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_DEFER_EFB_COPIES, R.string.defer_efb_copies, + sl.add(new CheckBoxSetting(Setting.GFX_HACK_DEFER_EFB_COPIES, R.string.defer_efb_copies, R.string.defer_efb_copies_description, true)); - sl.add(new HeaderSetting(null, R.string.texture_cache, 0)); - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_TEXCACHE_ACCURACY, R.string.texture_cache_accuracy, - R.string.texture_cache_accuracy_description, R.array.textureCacheAccuracyEntries, - R.array.textureCacheAccuracyValues, 128)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_GPU_TEXTURE_DECODING, R.string.gpu_texture_decoding, - R.string.gpu_texture_decoding_description, false)); + sl.add(new HeaderSetting(R.string.texture_cache, 0)); + sl.add(new SingleChoiceSetting(Setting.GFX_SAFE_TEXTURE_CACHE_COLOR_SAMPLES, + R.string.texture_cache_accuracy, R.string.texture_cache_accuracy_description, + R.array.textureCacheAccuracyEntries, R.array.textureCacheAccuracyValues, 128)); + sl.add(new CheckBoxSetting(Setting.GFX_ENABLE_GPU_TEXTURE_DECODING, + R.string.gpu_texture_decoding, R.string.gpu_texture_decoding_description, false)); - sl.add(new HeaderSetting(null, R.string.external_frame_buffer, 0)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_XFB_TEXTURE, R.string.xfb_copy_method, + sl.add(new HeaderSetting(R.string.external_frame_buffer, 0)); + sl.add(new CheckBoxSetting(Setting.GFX_HACK_SKIP_XFB_COPY_TO_RAM, R.string.xfb_copy_method, R.string.xfb_copy_method_description, true)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_IMMEDIATE_XFB, R.string.immediate_xfb, + sl.add(new CheckBoxSetting(Setting.GFX_HACK_IMMEDIATE_XFB, R.string.immediate_xfb, R.string.immediate_xfb_description, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_HACKS, - SettingsFile.KEY_SKIP_DUPLICATE_XFBS, R.string.skip_duplicate_xfbs, + sl.add(new CheckBoxSetting(Setting.GFX_HACK_SKIP_DUPLICATE_XFBS, R.string.skip_duplicate_xfbs, R.string.skip_duplicate_xfbs_description, true)); - sl.add(new HeaderSetting(null, R.string.other, 0)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS, - SettingsFile.KEY_FAST_DEPTH, R.string.fast_depth_calculation, + sl.add(new HeaderSetting(R.string.other, 0)); + sl.add(new CheckBoxSetting(Setting.GFX_FAST_DEPTH_CALC, R.string.fast_depth_calculation, R.string.fast_depth_calculation_description, true)); } private void addLogConfigurationSettings(ArrayList sl) { - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_LOGGER, Settings.SECTION_LOGGER_OPTIONS, - SettingsFile.KEY_ENABLE_LOGGING, R.string.enable_logging, + sl.add(new CheckBoxSetting(Setting.LOGGER_WRITE_TO_FILE, R.string.enable_logging, R.string.enable_logging_description, false)); - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_LOGGER, Settings.SECTION_LOGGER_OPTIONS, - SettingsFile.KEY_LOG_VERBOSITY, R.string.log_verbosity, 0, getLogVerbosityEntries(), - getLogVerbosityValues(), 1)); + sl.add(new SingleChoiceSetting(Setting.LOGGER_VERBOSITY, R.string.log_verbosity, 0, + getLogVerbosityEntries(), getLogVerbosityValues(), 1)); sl.add(new ConfirmRunnable(R.string.log_enable_all, 0, R.string.log_enable_all_confirmation, 0, () -> mView.getAdapter().setAllLogTypes(true))); sl.add(new ConfirmRunnable(R.string.log_disable_all, 0, R.string.log_disable_all_confirmation, 0, () -> mView.getAdapter().setAllLogTypes(false))); - sl.add(new HeaderSetting(null, R.string.log_types, 0)); + sl.add(new HeaderSetting(R.string.log_types, 0)); for (Map.Entry entry : LOG_TYPE_NAMES.entrySet()) { // TitleID is handled by special case in CheckBoxSettingViewHolder. - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_LOGGER, Settings.SECTION_LOGGER_LOGS, - entry.getKey(), 0, 0, false)); + sl.add(new LogCheckBoxSetting(entry.getKey(), 0, 0, false)); } } private void addDebugSettings(ArrayList sl) { - sl.add(new HeaderSetting(null, R.string.debug_warning, 0)); + sl.add(new HeaderSetting(R.string.debug_warning, 0)); - sl.add(new HeaderSetting(null, R.string.debug_jit_header, 0)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITOFF, R.string.debug_jitoff, 0, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITLOADSTOREOFF, R.string.debug_jitloadstoreoff, 0, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, - SettingsFile.KEY_DEBUG_JITLOADSTOREFLOATINGPOINTOFF, Settings.SECTION_DEBUG, + sl.add(new HeaderSetting(R.string.debug_jit_header, 0)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_OFF, R.string.debug_jitoff, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_LOAD_STORE_OFF, R.string.debug_jitloadstoreoff, 0, + false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_LOAD_STORE_FLOATING_OFF, R.string.debug_jitloadstorefloatingoff, 0, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITLOADSTOREPAIREDOFF, R.string.debug_jitloadstorepairedoff, 0, - false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITFLOATINGPOINTOFF, R.string.debug_jitfloatingpointoff, 0, - false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITINTEGEROFF, R.string.debug_jitintegeroff, 0, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITPAIREDOFF, R.string.debug_jitpairedoff, 0, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITSYSTEMREGISTEROFF, R.string.debug_jitsystemregistersoffr, 0, - false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITBRANCHOFF, R.string.debug_jitbranchoff, 0, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_DEBUG, - SettingsFile.KEY_DEBUG_JITREGISTERCACHEOFF, R.string.debug_jitregistercacheoff, 0, + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_LOAD_STORE_PAIRED_OFF, + R.string.debug_jitloadstorepairedoff, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_FLOATING_POINT_OFF, + R.string.debug_jitfloatingpointoff, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_INTEGER_OFF, R.string.debug_jitintegeroff, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_PAIRED_OFF, R.string.debug_jitpairedoff, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_SYSTEM_REGISTERS_OFF, + R.string.debug_jitsystemregistersoff, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_BRANCH_OFF, R.string.debug_jitbranchoff, 0, false)); + sl.add(new CheckBoxSetting(Setting.MAIN_JIT_REGISTER_CACHE_OFF, + R.string.debug_jitregistercacheoff, 0, false)); } private void addStereoSettings(ArrayList sl) { - sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_STEREOSCOPY, - SettingsFile.KEY_STEREO_MODE, R.string.stereoscopy_mode, 0, + sl.add(new SingleChoiceSetting(Setting.GFX_STEREO_MODE, R.string.stereoscopy_mode, 0, R.array.stereoscopyEntries, R.array.stereoscopyValues, 0)); - sl.add(new IntSliderSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_STEREOSCOPY, - SettingsFile.KEY_STEREO_DEPTH, R.string.stereoscopy_depth, + sl.add(new IntSliderSetting(Setting.GFX_STEREO_DEPTH, R.string.stereoscopy_depth, R.string.stereoscopy_depth_description, 100, "%", 20)); - sl.add(new IntSliderSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_STEREOSCOPY, - SettingsFile.KEY_STEREO_CONV, R.string.stereoscopy_convergence, - R.string.stereoscopy_convergence_description, 200, "%", 0)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_STEREOSCOPY, - SettingsFile.KEY_STEREO_SWAP, R.string.stereoscopy_swap_eyes, + sl.add(new IntSliderSetting(Setting.GFX_STEREO_CONVERGENCE_PERCENTAGE, + R.string.stereoscopy_convergence, R.string.stereoscopy_convergence_description, 200, + "%", 0)); + sl.add(new CheckBoxSetting(Setting.GFX_STEREO_SWAP_EYES, R.string.stereoscopy_swap_eyes, R.string.stereoscopy_swap_eyes_description, false)); } @@ -658,70 +643,73 @@ public final class SettingsFragmentPresenter { if (gcPadType == 1) // Emulated { - sl.add(new HeaderSetting(null, R.string.generic_buttons, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_buttons, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_A + gcPadNumber, R.string.button_a, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_B + gcPadNumber, R.string.button_b, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_X + gcPadNumber, R.string.button_x, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_Y + gcPadNumber, R.string.button_y, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_Z + gcPadNumber, R.string.button_z, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_START + gcPadNumber, R.string.button_start, mGameID)); - sl.add(new HeaderSetting(null, R.string.controller_control, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.controller_control, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_CONTROL_UP + gcPadNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_CONTROL_DOWN + gcPadNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_CONTROL_LEFT + gcPadNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_CONTROL_RIGHT + gcPadNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.controller_c, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.controller_c, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_C_UP + gcPadNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_C_DOWN + gcPadNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_C_LEFT + gcPadNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_C_RIGHT + gcPadNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.controller_trig, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.controller_trig, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_TRIGGER_L + gcPadNumber, R.string.trigger_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_TRIGGER_R + gcPadNumber, R.string.trigger_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.controller_dpad, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.controller_dpad, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_DPAD_UP + gcPadNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_DPAD_DOWN + gcPadNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_DPAD_LEFT + gcPadNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_GCBIND_DPAD_RIGHT + gcPadNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.emulation_control_rumble, 0)); - sl.add(new RumbleBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.emulation_control_rumble, 0)); + sl.add(new RumbleBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_EMU_RUMBLE + gcPadNumber, R.string.emulation_control_rumble, mGameID)); } else // Adapter { - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_GCADAPTER_RUMBLE + gcPadNumber, R.string.gc_adapter_rumble, + LegacySetting rumble = new LegacySetting(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, + SettingsFile.KEY_GCADAPTER_RUMBLE + gcPadNumber); + LegacySetting bongo = new LegacySetting(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, + SettingsFile.KEY_GCADAPTER_BONGOS + gcPadNumber); + + sl.add(new CheckBoxSetting(rumble, R.string.gc_adapter_rumble, R.string.gc_adapter_rumble_description, false)); - sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE, - SettingsFile.KEY_GCADAPTER_BONGOS + gcPadNumber, R.string.gc_adapter_bongos, + sl.add(new CheckBoxSetting(bongo, R.string.gc_adapter_bongos, R.string.gc_adapter_bongos_description, false)); } } @@ -732,110 +720,110 @@ public final class SettingsFragmentPresenter // But game game specific extension settings are saved in their own profile. These profiles // do not have any way to specify the controller that is loaded outside of knowing the filename // of the profile that was loaded. + LegacySetting extension; if (mGameID.isEmpty()) { - sl.add(new StringSingleChoiceSetting(SettingsFile.FILE_NAME_WIIMOTE, - Settings.SECTION_WIIMOTE + (wiimoteNumber - 3), SettingsFile.KEY_WIIMOTE_EXTENSION, - R.string.wiimote_extensions, 0, R.array.wiimoteExtensionsEntries, - R.array.wiimoteExtensionsValues, getExtensionValue(wiimoteNumber - 3), - MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber))); + extension = new LegacySetting(Settings.FILE_WIIMOTE, + Settings.SECTION_WIIMOTE + (wiimoteNumber - 3), SettingsFile.KEY_WIIMOTE_EXTENSION); } else { mSettings.loadWiimoteProfile(mGameID, wiimoteNumber - 4); - sl.add(new StringSingleChoiceSetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME, - Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4), - R.string.wiimote_extensions, 0, R.array.wiimoteExtensionsEntries, - R.array.wiimoteExtensionsValues, getExtensionValue(wiimoteNumber - 4), - MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber))); + extension = new LegacySetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME, + Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4)); } - sl.add(new HeaderSetting(null, R.string.generic_buttons, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new StringSingleChoiceSetting(extension, R.string.wiimote_extensions, 0, + R.array.wiimoteExtensionsEntries, R.array.wiimoteExtensionsValues, + getExtensionValue(wiimoteNumber - 3), + MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber))); + + sl.add(new HeaderSetting(R.string.generic_buttons, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_A + wiimoteNumber, R.string.button_a, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_B + wiimoteNumber, R.string.button_b, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_1 + wiimoteNumber, R.string.button_one, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_2 + wiimoteNumber, R.string.button_two, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_MINUS + wiimoteNumber, R.string.button_minus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_PLUS + wiimoteNumber, R.string.button_plus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_HOME + wiimoteNumber, R.string.button_home, mGameID)); - sl.add(new HeaderSetting(null, R.string.wiimote_ir, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.wiimote_ir, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_IR_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_IR_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_IR_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_IR_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_IR_FORWARD + wiimoteNumber, R.string.generic_forward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_IR_BACKWARD + wiimoteNumber, R.string.generic_backward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_IR_HIDE + wiimoteNumber, R.string.ir_hide, mGameID)); - sl.add(new HeaderSetting(null, R.string.wiimote_swing, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.wiimote_swing, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SWING_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SWING_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SWING_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SWING_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SWING_FORWARD + wiimoteNumber, R.string.generic_forward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SWING_BACKWARD + wiimoteNumber, R.string.generic_backward, mGameID)); - sl.add(new HeaderSetting(null, R.string.wiimote_tilt, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.wiimote_tilt, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TILT_FORWARD + wiimoteNumber, R.string.generic_forward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TILT_BACKWARD + wiimoteNumber, R.string.generic_backward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TILT_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TILT_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TILT_MODIFIER + wiimoteNumber, R.string.tilt_modifier, mGameID)); - sl.add(new HeaderSetting(null, R.string.wiimote_shake, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.wiimote_shake, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SHAKE_X + wiimoteNumber, R.string.shake_x, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SHAKE_Y + wiimoteNumber, R.string.shake_y, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_SHAKE_Z + wiimoteNumber, R.string.shake_z, mGameID)); - sl.add(new HeaderSetting(null, R.string.controller_dpad, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.controller_dpad, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DPAD_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DPAD_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DPAD_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DPAD_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.emulation_control_rumble, 0)); - sl.add(new RumbleBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.emulation_control_rumble, 0)); + sl.add(new RumbleBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_EMU_RUMBLE + wiimoteNumber, R.string.emulation_control_rumble, mGameID)); } @@ -846,316 +834,316 @@ public final class SettingsFragmentPresenter switch (extentionType) { case 1: // Nunchuk - sl.add(new HeaderSetting(null, R.string.generic_buttons, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_buttons, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_C + wiimoteNumber, R.string.nunchuk_button_c, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_Z + wiimoteNumber, R.string.button_z, mGameID)); - sl.add(new HeaderSetting(null, R.string.generic_stick, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_stick, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.wiimote_swing, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.wiimote_swing, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_FORWARD + wiimoteNumber, R.string.generic_forward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_BACKWARD + wiimoteNumber, R.string.generic_backward, mGameID)); - sl.add(new HeaderSetting(null, R.string.wiimote_tilt, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.wiimote_tilt, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_FORWARD + wiimoteNumber, R.string.generic_forward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_BACKWARD + wiimoteNumber, R.string.generic_backward, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_MODIFIER + wiimoteNumber, R.string.tilt_modifier, mGameID)); - sl.add(new HeaderSetting(null, R.string.wiimote_shake, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.wiimote_shake, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SHAKE_X + wiimoteNumber, R.string.shake_x, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SHAKE_Y + wiimoteNumber, R.string.shake_y, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_NUNCHUK_SHAKE_Z + wiimoteNumber, R.string.shake_z, mGameID)); break; case 2: // Classic - sl.add(new HeaderSetting(null, R.string.generic_buttons, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_buttons, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_A + wiimoteNumber, R.string.button_a, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_B + wiimoteNumber, R.string.button_b, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_X + wiimoteNumber, R.string.button_x, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_Y + wiimoteNumber, R.string.button_y, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_ZL + wiimoteNumber, R.string.classic_button_zl, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_ZR + wiimoteNumber, R.string.classic_button_zr, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_MINUS + wiimoteNumber, R.string.button_minus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_PLUS + wiimoteNumber, R.string.button_plus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_HOME + wiimoteNumber, R.string.button_home, mGameID)); - sl.add(new HeaderSetting(null, R.string.classic_leftstick, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.classic_leftstick, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.classic_rightstick, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.classic_rightstick, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.controller_trig, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.controller_trig, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_TRIGGER_L + wiimoteNumber, R.string.trigger_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_TRIGGER_R + wiimoteNumber, R.string.trigger_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.controller_dpad, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.controller_dpad, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); break; case 3: // Guitar - sl.add(new HeaderSetting(null, R.string.guitar_frets, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.guitar_frets, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_FRET_GREEN + wiimoteNumber, R.string.generic_green, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_FRET_RED + wiimoteNumber, R.string.generic_red, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_FRET_YELLOW + wiimoteNumber, R.string.generic_yellow, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_FRET_BLUE + wiimoteNumber, R.string.generic_blue, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_FRET_ORANGE + wiimoteNumber, R.string.generic_orange, mGameID)); - sl.add(new HeaderSetting(null, R.string.guitar_strum, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.guitar_strum, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_STRUM_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_STRUM_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new HeaderSetting(null, R.string.generic_buttons, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_buttons, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_MINUS + wiimoteNumber, R.string.button_minus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_PLUS + wiimoteNumber, R.string.button_plus, mGameID)); - sl.add(new HeaderSetting(null, R.string.generic_stick, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_stick, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_STICK_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_STICK_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_STICK_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_STICK_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.guitar_whammy, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.guitar_whammy, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_GUITAR_WHAMMY_BAR + wiimoteNumber, R.string.generic_right, mGameID)); break; case 4: // Drums - sl.add(new HeaderSetting(null, R.string.drums_pads, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.drums_pads, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_PAD_RED + wiimoteNumber, R.string.generic_red, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_PAD_YELLOW + wiimoteNumber, R.string.generic_yellow, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_PAD_BLUE + wiimoteNumber, R.string.generic_blue, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_PAD_GREEN + wiimoteNumber, R.string.generic_green, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_PAD_ORANGE + wiimoteNumber, R.string.generic_orange, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_PAD_BASS + wiimoteNumber, R.string.drums_pad_bass, mGameID)); - sl.add(new HeaderSetting(null, R.string.generic_stick, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_stick, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_STICK_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_STICK_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_STICK_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_STICK_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.generic_buttons, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_buttons, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_MINUS + wiimoteNumber, R.string.button_minus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_DRUMS_PLUS + wiimoteNumber, R.string.button_plus, mGameID)); break; case 5: // Turntable - sl.add(new HeaderSetting(null, R.string.generic_buttons, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_buttons, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_GREEN_LEFT + wiimoteNumber, R.string.turntable_button_green_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_RED_LEFT + wiimoteNumber, R.string.turntable_button_red_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_BLUE_LEFT + wiimoteNumber, R.string.turntable_button_blue_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_GREEN_RIGHT + wiimoteNumber, R.string.turntable_button_green_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_RED_RIGHT + wiimoteNumber, R.string.turntable_button_red_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_BLUE_RIGHT + wiimoteNumber, R.string.turntable_button_blue_right, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_MINUS + wiimoteNumber, R.string.button_minus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_PLUS + wiimoteNumber, R.string.button_plus, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_EUPHORIA + wiimoteNumber, R.string.turntable_button_euphoria, mGameID)); - sl.add(new HeaderSetting(null, R.string.turntable_table_left, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.turntable_table_left, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_LEFT_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_LEFT_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.turntable_table_right, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.turntable_table_right, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_RIGHT_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_RIGHT_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.generic_stick, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.generic_stick, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_UP + wiimoteNumber, R.string.generic_up, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_DOWN + wiimoteNumber, R.string.generic_down, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); - sl.add(new HeaderSetting(null, R.string.turntable_effect, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.turntable_effect, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_EFFECT_DIAL + wiimoteNumber, R.string.turntable_effect_dial, mGameID)); - sl.add(new HeaderSetting(null, R.string.turntable_crossfade, 0)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new HeaderSetting(R.string.turntable_crossfade, 0)); + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_CROSSFADE_LEFT + wiimoteNumber, R.string.generic_left, mGameID)); - sl.add(new InputBindingSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS, + sl.add(new InputBindingSetting(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS, SettingsFile.KEY_WIIBIND_TURNTABLE_CROSSFADE_RIGHT + wiimoteNumber, R.string.generic_right, mGameID)); break; @@ -1167,7 +1155,7 @@ public final class SettingsFragmentPresenter IniFile.Section section; if (mGameID.equals("")) // Main settings { - section = mSettings.getSection(SettingsFile.FILE_NAME_WIIMOTE, + section = mSettings.getSection(Settings.FILE_WIIMOTE, Settings.SECTION_WIIMOTE + wiimoteNumber); } else // Game settings diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java index 4951164a5b..fd89dbe26d 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java @@ -66,10 +66,8 @@ public interface SettingsFragmentView /** * Have the fragment tell the containing Activity that a setting was modified. - * - * @param key Key of the modified setting, potentially null for multiple settings. */ - void onSettingChanged(String key); + void onSettingChanged(); /** * Have the fragment tell the containing Activity that a GCPad's setting was modified. diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.java index e7103632c6..afecec4ebd 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.java @@ -5,8 +5,8 @@ import android.widget.CheckBox; import android.widget.TextView; import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.model.view.CheckBoxSetting; +import org.dolphinemu.dolphinemu.features.settings.model.view.LogCheckBoxSetting; import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsFragmentPresenter; @@ -39,9 +39,10 @@ public final class CheckBoxSettingViewHolder extends SettingViewHolder mItem = (CheckBoxSetting) item; // Special case for LogTypes retrieved via JNI since those aren't string references. - if (item.getNameId() == 0 && item.getSection().equals(Settings.SECTION_LOGGER_LOGS)) + if (item.getNameId() == 0 && item instanceof LogCheckBoxSetting) { - mTextSettingName.setText(SettingsFragmentPresenter.LOG_TYPE_NAMES.get(item.getKey())); + String key = ((LogCheckBoxSetting) item).getKey(); + mTextSettingName.setText(SettingsFragmentPresenter.LOG_TYPE_NAMES.get(key)); } else { diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java index 04d4c5627a..e5238c460c 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java @@ -16,92 +16,6 @@ import java.io.File; */ public final class SettingsFile { - public static final String FILE_NAME_DOLPHIN = "Dolphin"; - public static final String FILE_NAME_GFX = "GFX"; - public static final String FILE_NAME_LOGGER = "Logger"; - public static final String FILE_NAME_GCPAD = "GCPadNew"; - public static final String FILE_NAME_WIIMOTE = "WiimoteNew"; - - public static final String KEY_DSP_ENGINE = "DSPEngine"; - public static final String KEY_LAST_PLATFORM_TAB = "LastPlatformTab"; - - public static final String KEY_CPU_CORE = "CPUCore"; - public static final String KEY_DUAL_CORE = "CPUThread"; - public static final String KEY_OVERCLOCK_ENABLE = "OverclockEnable"; - public static final String KEY_OVERCLOCK_PERCENT = "Overclock"; - public static final String KEY_SPEED_LIMIT = "EmulationSpeed"; - public static final String KEY_VIDEO_BACKEND = "GFXBackend"; - - public static final String KEY_DSP_HLE = "DSPHLE"; - public static final String KEY_DSP_ENABLE_JIT = "EnableJIT"; - public static final String KEY_AUDIO_STRETCH = "AudioStretch"; - public static final String KEY_AUDIO_VOLUME = "Volume"; - - public static final String KEY_AUTO_DISC_CHANGE = "AutoDiscChange"; - public static final String KEY_GAME_CUBE_LANGUAGE = "SelectedLanguage"; - public static final String KEY_OVERRIDE_REGION_SETTINGS = "OverrideRegionSettings"; - public static final String KEY_SLOT_A_DEVICE = "SlotA"; - public static final String KEY_SLOT_B_DEVICE = "SlotB"; - public static final String KEY_ENABLE_SAVE_STATES = "EnableSaveStates"; - public static final String KEY_RECURSIVE_ISO_PATHS = "RecursiveISOPaths"; - public static final String KEY_DEFAULT_ISO = "DefaultISO"; - public static final String KEY_NAND_ROOT_PATH = "NANDRootPath"; - public static final String KEY_DUMP_PATH = "DumpPath"; - public static final String KEY_LOAD_PATH = "LoadPath"; - public static final String KEY_RESOURCE_PACK_PATH = "ResourcePackPath"; - public static final String KEY_WII_SD_CARD_PATH = "WiiSDCardPath"; - - public static final String KEY_ANALYTICS_ENABLED = "Enabled"; - public static final String KEY_ANALYTICS_PERMISSION_ASKED = "PermissionAsked"; - - public static final String KEY_USE_PANIC_HANDLERS = "UsePanicHandlers"; - public static final String KEY_OSD_MESSAGES = "OnScreenDisplayMessages"; - - public static final String KEY_SHOW_FPS = "ShowFPS"; - public static final String KEY_INTERNAL_RES = "InternalResolution"; - public static final String KEY_FSAA = "MSAA"; - public static final String KEY_ANISOTROPY = "MaxAnisotropy"; - public static final String KEY_POST_SHADER = "PostProcessingShader"; - public static final String KEY_SCALED_EFB = "EFBScaledCopy"; - public static final String KEY_PER_PIXEL = "EnablePixelLighting"; - public static final String KEY_FORCE_FILTERING = "ForceFiltering"; - public static final String KEY_DISABLE_FOG = "DisableFog"; - public static final String KEY_DISABLE_COPY_FILTER = "DisableCopyFilter"; - public static final String KEY_ARBITRARY_MIPMAP_DETECTION = "ArbitraryMipmapDetection"; - public static final String KEY_WIDE_SCREEN_HACK = "wideScreenHack"; - public static final String KEY_FORCE_24_BIT_COLOR = "ForceTrueColor"; - public static final String KEY_BACKEND_MULTITHREADING = "BackendMultithreading"; - - public static final String KEY_STEREO_MODE = "StereoMode"; - public static final String KEY_STEREO_DEPTH = "StereoDepth"; - public static final String KEY_STEREO_CONV = "StereoConvergencePercentage"; - public static final String KEY_STEREO_SWAP = "StereoSwapEyes"; - - public static final String KEY_SKIP_EFB = "EFBAccessEnable"; - public static final String KEY_IGNORE_FORMAT = "EFBEmulateFormatChanges"; - public static final String KEY_EFB_TEXTURE = "EFBToTextureEnable"; - public static final String KEY_DEFER_EFB_COPIES = "DeferEFBCopies"; - public static final String KEY_TEXCACHE_ACCURACY = "SafeTextureCacheColorSamples"; - public static final String KEY_GPU_TEXTURE_DECODING = "EnableGPUTextureDecoding"; - public static final String KEY_XFB_TEXTURE = "XFBToTextureEnable"; - public static final String KEY_IMMEDIATE_XFB = "ImmediateXFBEnable"; - public static final String KEY_SKIP_DUPLICATE_XFBS = "SkipDuplicateXFBs"; - public static final String KEY_FAST_DEPTH = "FastDepthCalc"; - public static final String KEY_ASPECT_RATIO = "AspectRatio"; - public static final String KEY_SHADER_COMPILATION_MODE = "ShaderCompilationMode"; - public static final String KEY_WAIT_FOR_SHADERS = "WaitForShadersBeforeStarting"; - - public static final String KEY_DEBUG_JITOFF = "JitOff"; - public static final String KEY_DEBUG_JITLOADSTOREOFF = "JitLoadStoreOff"; - public static final String KEY_DEBUG_JITLOADSTOREFLOATINGPOINTOFF = "JitLoadStoreFloatingOff"; - public static final String KEY_DEBUG_JITLOADSTOREPAIREDOFF = "JitLoadStorePairedOff"; - public static final String KEY_DEBUG_JITFLOATINGPOINTOFF = "JitFloatingPointOff"; - public static final String KEY_DEBUG_JITINTEGEROFF = "JitIntegerOff"; - public static final String KEY_DEBUG_JITPAIREDOFF = "JitPairedOff"; - public static final String KEY_DEBUG_JITSYSTEMREGISTEROFF = "JitSystemRegistersOff"; - public static final String KEY_DEBUG_JITBRANCHOFF = "JitBranchOff"; - public static final String KEY_DEBUG_JITREGISTERCACHEOFF = "JitRegisterCacheOff"; - public static final String KEY_GCPAD_TYPE = "SIDevice"; public static final String KEY_GCPAD_PLAYER_1 = "SIDevice0"; public static final String KEY_GCPAD_G_TYPE = "PadType"; @@ -264,14 +178,6 @@ public final class SettingsFile public static final String KEY_WIIBIND_TURNTABLE_CROSSFADE_LEFT = "TurntableCrossLeft_"; public static final String KEY_WIIBIND_TURNTABLE_CROSSFADE_RIGHT = "TurntableCrossRight_"; - public static final String KEY_WII_SD_CARD = "WiiSDCard"; - public static final String KEY_WII_SD_CARD_ALLOW_WRITES = "WiiSDCardAllowWrites"; - public static final String KEY_WIIMOTE_SCAN = "WiimoteContinuousScanning"; - public static final String KEY_WIIMOTE_SPEAKER = "WiimoteEnableSpeaker"; - - public static final String KEY_ENABLE_LOGGING = "WriteToFile"; - public static final String KEY_LOG_VERBOSITY = "Verbosity"; - private static BiMap sectionsMap = new BiMap<>(); static @@ -310,7 +216,7 @@ public final class SettingsFile { readFile(getSettingsFile(fileName), ini, view); - if (fileName.equals(SettingsFile.FILE_NAME_DOLPHIN)) + if (fileName.equals(Settings.FILE_DOLPHIN)) { addGcPadSettingsIfTheyDontExist(ini); } @@ -505,15 +411,4 @@ public final class SettingsFile } } } - - public static void firstAnalyticsAdd(boolean enabled) - { - IniFile dolphinIni = new IniFile(); - readFile(SettingsFile.FILE_NAME_DOLPHIN, dolphinIni, null); - - dolphinIni.setBoolean(Settings.SECTION_ANALYTICS, KEY_ANALYTICS_ENABLED, enabled); - dolphinIni.setBoolean(Settings.SECTION_ANALYTICS, KEY_ANALYTICS_PERMISSION_ASKED, true); - - saveFile(SettingsFile.FILE_NAME_DOLPHIN, dolphinIni, null); - } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java index 2d053a99d7..eeff9cda14 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java @@ -16,8 +16,8 @@ import androidx.fragment.app.Fragment; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; -import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; public final class MenuFragment extends Fragment implements View.OnClickListener { @@ -83,11 +83,8 @@ public final class MenuFragment extends Fragment implements View.OnClickListener updatePauseUnpauseVisibility(); - boolean enableSaveStates = ((EmulationActivity) getActivity()).getSettings() - .getSection(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE) - .getBoolean(SettingsFile.KEY_ENABLE_SAVE_STATES, false); - - if (enableSaveStates) + Settings settings = ((EmulationActivity) getActivity()).getSettings(); + if (Setting.MAIN_ENABLE_SAVESTATES.getBoolean(settings, false)) { options.findViewById(R.id.menu_quicksave).setVisibility(View.VISIBLE); options.findViewById(R.id.menu_quickload).setVisibility(View.VISIBLE); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java index 281fc65349..7ee178c9b7 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java @@ -4,9 +4,8 @@ import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; -import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; -import org.dolphinemu.dolphinemu.utils.IniFile; import java.io.File; import java.util.HashSet; @@ -82,10 +81,9 @@ public class GameFileCache */ public boolean scanLibrary(Context context) { - IniFile dolphinIni = - new IniFile(SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_DOLPHIN)); - boolean recursiveScan = dolphinIni.getBoolean(Settings.SECTION_INI_GENERAL, - SettingsFile.KEY_RECURSIVE_ISO_PATHS, false); + Settings settings = new Settings(); + settings.loadSettings(null); + boolean recursiveScan = Setting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(settings, false); removeNonExistentGameFolders(context); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java index ea1a6ecb54..1c988ec3a6 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java @@ -706,8 +706,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener // Add all the enabled overlay items back to the HashSet. if (EmulationActivity.isGameCubeGame()) { - IniFile dolphinIni = - new IniFile(SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_DOLPHIN)); + IniFile dolphinIni = new IniFile(SettingsFile.getSettingsFile(Settings.FILE_DOLPHIN)); switch (dolphinIni.getInt(Settings.SECTION_INI_CORE, SettingsFile.KEY_GCPAD_PLAYER_1, EMULATED_GAMECUBE_CONTROLLER)) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java index d96efd27df..bebe91e064 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java @@ -20,22 +20,19 @@ import com.google.android.material.tabs.TabLayout; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.adapters.PlatformPagerAdapter; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; -import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; import org.dolphinemu.dolphinemu.services.GameFileCacheService; import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.ui.platform.PlatformGamesView; import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import org.dolphinemu.dolphinemu.utils.FileBrowserHelper; -import org.dolphinemu.dolphinemu.utils.IniFile; import org.dolphinemu.dolphinemu.utils.PermissionsHandler; import org.dolphinemu.dolphinemu.utils.StartupHandler; -import java.io.File; - /** * The main Activity of the Lollipop style UI. Manages several PlatformGamesFragments, which * individually display a grid of available games for each Fragment, in a tabbed layout. @@ -273,18 +270,19 @@ public final class MainActivity extends AppCompatActivity implements MainView { super.onTabSelected(tab); - File dolphinFile = SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_DOLPHIN); - IniFile dolphinIni = new IniFile(dolphinFile); - dolphinIni.setInt(Settings.SECTION_INI_ANDROID, SettingsFile.KEY_LAST_PLATFORM_TAB, - tab.getPosition()); - dolphinIni.save(dolphinFile); + Settings settings = new Settings(); + settings.loadSettings(null); + + Setting.MAIN_LAST_PLATFORM_TAB.setInt(settings, tab.getPosition()); + + // Context is set to null to avoid toasts + settings.saveSettings(null, null); } }); - IniFile dolphinIni = - new IniFile(SettingsFile.getSettingsFile(SettingsFile.FILE_NAME_DOLPHIN)); - mViewPager.setCurrentItem(dolphinIni.getInt(Settings.SECTION_INI_ANDROID, - SettingsFile.KEY_LAST_PLATFORM_TAB, 0)); + Settings settings = new Settings(); + settings.loadSettings(null); + mViewPager.setCurrentItem(Setting.MAIN_LAST_PLATFORM_TAB.getInt(settings, 0)); showGames(); GameFileCacheService.startLoad(this); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java index f38d4e9e05..59e44c7087 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java @@ -1,9 +1,7 @@ package org.dolphinemu.dolphinemu.utils; import android.content.Context; -import android.content.SharedPreferences; import android.os.Build; -import android.preference.PreferenceManager; import androidx.appcompat.app.AlertDialog; @@ -12,16 +10,11 @@ import com.android.volley.toolbox.StringRequest; import org.dolphinemu.dolphinemu.DolphinApplication; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; -import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; public class Analytics { - private static final String analyticsAsked = - Settings.SECTION_ANALYTICS + "_" + SettingsFile.KEY_ANALYTICS_PERMISSION_ASKED; - private static final String analyticsEnabled = - Settings.SECTION_ANALYTICS + "_" + SettingsFile.KEY_ANALYTICS_ENABLED; - private static final String DEVICE_MANUFACTURER = "DEVICE_MANUFACTURER"; private static final String DEVICE_OS = "DEVICE_OS"; private static final String DEVICE_MODEL = "DEVICE_MODEL"; @@ -29,39 +22,42 @@ public class Analytics public static void checkAnalyticsInit(Context context) { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - if (!preferences.getBoolean(analyticsAsked, false)) + new AfterDirectoryInitializationRunner().run(context, false, () -> { - new AfterDirectoryInitializationRunner().run(context, false, - () -> showMessage(context, preferences)); - } + Settings settings = new Settings(); + settings.loadSettings(null); + if (!Setting.MAIN_ANALYTICS_PERMISSION_ASKED.getBoolean(settings, false)) + { + showMessage(context, settings); + } + }); } - private static void showMessage(Context context, SharedPreferences preferences) + private static void showMessage(Context context, Settings settings) { - // We asked, set to true regardless of answer - SharedPreferences.Editor sPrefsEditor = preferences.edit(); - sPrefsEditor.putBoolean(analyticsAsked, true); - sPrefsEditor.apply(); - new AlertDialog.Builder(context, R.style.DolphinDialogBase) .setTitle(context.getString(R.string.analytics)) .setMessage(context.getString(R.string.analytics_desc)) .setPositiveButton(R.string.yes, (dialogInterface, i) -> { - sPrefsEditor.putBoolean(analyticsEnabled, true); - sPrefsEditor.apply(); - SettingsFile.firstAnalyticsAdd(true); + firstAnalyticsAdd(settings, true); }) .setNegativeButton(R.string.no, (dialogInterface, i) -> { - sPrefsEditor.putBoolean(analyticsEnabled, false); - sPrefsEditor.apply(); - SettingsFile.firstAnalyticsAdd(false); + firstAnalyticsAdd(settings, false); }) .show(); } + private static void firstAnalyticsAdd(Settings settings, boolean enabled) + { + Setting.MAIN_ANALYTICS_ENABLED.setBoolean(settings, enabled); + Setting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true); + + // Context is set to null to avoid toasts + settings.saveSettings(null, null); + } + public static void sendReport(String endpoint, byte[] data) { StringRequest request = new StringRequest(Request.Method.POST, endpoint, diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java index a0930d9f06..e7b7360537 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java @@ -29,7 +29,7 @@ public class Rumble for (int i = 0; i < 8; i++) { String deviceName = activity.getSettings() - .getSection(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_BINDINGS) + .getSection(Settings.FILE_DOLPHIN, Settings.SECTION_BINDINGS) .getString(SettingsFile.KEY_EMU_RUMBLE + i, ""); if (!deviceName.isEmpty()) diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 356bfc1a62..1b10ac6250 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -287,7 +287,7 @@ Jit Floating Point Disabled Jit Integer Disabled Jit Paired Disabled - Jit System Registers Disabled + Jit System Registers Disabled Jit Branch Disabled Jit Register Cache Disabled