summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java2
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java26
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java6
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GamePropertiesDialog.java32
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractBooleanSetting.java8
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractFloatSetting.java8
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractIntSetting.java8
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractLegacySetting.java33
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractSetting.java10
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractStringSetting.java8
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java52
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java185
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java76
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java123
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyBooleanSetting.java24
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyFloatSetting.java24
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyIntSetting.java24
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyStringSetting.java24
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java42
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java123
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java107
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/CheckBoxSetting.java21
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/ConfirmRunnable.java10
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FilePicker.java32
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/FloatSliderSetting.java23
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/HeaderSetting.java12
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java33
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/IntSliderSetting.java22
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InvertedCheckBoxSetting.java18
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/LogCheckBoxSetting.java21
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/PercentSliderSetting.java19
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/RumbleBindingSetting.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java56
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSetting.java28
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java34
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SliderSetting.java5
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java43
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SubmenuSetting.java11
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java31
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java32
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java4
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java51
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java4
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java942
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java4
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/CheckBoxSettingViewHolder.java17
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/FilePickerViewHolder.java25
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java10
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/RumbleBindingViewHolder.java10
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SettingViewHolder.java22
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java10
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SliderViewHolder.java10
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java107
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/MenuFragment.java33
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/GameFileCache.java13
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java3
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java30
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java2
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java52
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Rumble.java2
61 files changed, 1842 insertions, 919 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 8f3a10b8af..86e75d55ec 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -335,6 +335,8 @@ public final class NativeLibrary
public static native int DefaultCPUCore();
+ public static native String GetDefaultGraphicsBackendName();
+
public static native int GetMaxLogLevel();
public static native void ReloadConfig();
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..6c70839b40 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
@@ -34,6 +34,8 @@ import androidx.fragment.app.FragmentManager;
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
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.fragments.EmulationFragment;
import org.dolphinemu.dolphinemu.fragments.MenuFragment;
@@ -101,7 +103,8 @@ public final class EmulationActivity extends AppCompatActivity
MENU_ACTION_LOAD_SLOT6, MENU_ACTION_EXIT, MENU_ACTION_CHANGE_DISC,
MENU_ACTION_RESET_OVERLAY, MENU_SET_IR_SENSITIVITY, MENU_ACTION_CHOOSE_DOUBLETAP,
MENU_ACTION_SCREEN_ORIENTATION, MENU_ACTION_MOTION_CONTROLS, MENU_ACTION_PAUSE_EMULATION,
- MENU_ACTION_UNPAUSE_EMULATION, MENU_ACTION_OVERLAY_CONTROLS})
+ MENU_ACTION_UNPAUSE_EMULATION, MENU_ACTION_OVERLAY_CONTROLS, MENU_ACTION_SETTINGS_CORE,
+ MENU_ACTION_SETTINGS_GRAPHICS})
public @interface MenuAction
{
}
@@ -140,6 +143,8 @@ public final class EmulationActivity extends AppCompatActivity
public static final int MENU_ACTION_PAUSE_EMULATION = 31;
public static final int MENU_ACTION_UNPAUSE_EMULATION = 32;
public static final int MENU_ACTION_OVERLAY_CONTROLS = 33;
+ public static final int MENU_ACTION_SETTINGS_CORE = 34;
+ public static final int MENU_ACTION_SETTINGS_GRAPHICS = 35;
private static SparseIntArray buttonsActionsMap = new SparseIntArray();
@@ -364,6 +369,13 @@ public final class EmulationActivity extends AppCompatActivity
}
@Override
+ protected void onDestroy()
+ {
+ super.onDestroy();
+ mSettings.close();
+ }
+
+ @Override
public void onBackPressed()
{
if (!closeSubmenu())
@@ -641,6 +653,14 @@ public final class EmulationActivity extends AppCompatActivity
showMotionControlsOptions();
return;
+ case MENU_ACTION_SETTINGS_CORE:
+ SettingsActivity.launch(this, MenuTag.CONFIG);
+ return;
+
+ case MENU_ACTION_SETTINGS_GRAPHICS:
+ SettingsActivity.launch(this, MenuTag.GRAPHICS);
+ return;
+
case MENU_ACTION_EXIT:
mEmulationFragment.stopEmulation();
finish();
@@ -855,7 +875,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 +909,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/adapters/GameAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java
index 9fa73b3da1..ff2db6b6a5 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java
@@ -156,11 +156,12 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl
return true;
}
- GamePropertiesDialog fragment =
- GamePropertiesDialog
- .newInstance(holder.gameFile.getPath(), gameId, holder.gameFile.getPlatform());
+ GamePropertiesDialog fragment = GamePropertiesDialog.newInstance(holder.gameFile.getPath(),
+ gameId, holder.gameFile.getRevision(), holder.gameFile.getPlatform());
+
((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction()
.add(fragment, GamePropertiesDialog.TAG).commit();
+
return true;
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java
index 44a57337e3..6790f331b2 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java
@@ -100,9 +100,9 @@ public final class GameRowPresenter extends Presenter
return true;
}
- GamePropertiesDialog fragment =
- GamePropertiesDialog.newInstance(holder.gameFile.getPath(), gameId,
- holder.gameFile.getPlatform());
+ GamePropertiesDialog fragment = GamePropertiesDialog.newInstance(holder.gameFile.getPath(),
+ gameId, holder.gameFile.getRevision(), holder.gameFile.getPlatform());
+
((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction()
.add(fragment, GamePropertiesDialog.TAG).commit();
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..15521e6043 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.Settings;
+import org.dolphinemu.dolphinemu.features.settings.model.StringSetting;
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;
@@ -26,15 +24,18 @@ public class GamePropertiesDialog extends DialogFragment
public static final String TAG = "GamePropertiesDialog";
public static final String ARG_PATH = "path";
public static final String ARG_GAMEID = "game_id";
+ public static final String ARG_REVISION = "revision";
public static final String ARG_PLATFORM = "platform";
- public static GamePropertiesDialog newInstance(String path, String gameId, int platform)
+ public static GamePropertiesDialog newInstance(String path, String gameId, int revision,
+ int platform)
{
GamePropertiesDialog fragment = new GamePropertiesDialog();
Bundle arguments = new Bundle();
arguments.putString(ARG_PATH, path);
arguments.putString(ARG_GAMEID, gameId);
+ arguments.putInt(ARG_REVISION, revision);
arguments.putInt(ARG_PLATFORM, platform);
fragment.setArguments(arguments);
@@ -50,6 +51,7 @@ public class GamePropertiesDialog extends DialogFragment
String path = requireArguments().getString(ARG_PATH);
String gameId = requireArguments().getString(ARG_GAMEID);
+ int revision = requireArguments().getInt(ARG_REVISION);
int platform = requireArguments().getInt(ARG_PLATFORM);
builder.setTitle(requireContext()
@@ -65,30 +67,28 @@ 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();
+ try (Settings settings = new Settings())
+ {
+ settings.loadSettings(null);
+ StringSetting.MAIN_DEFAULT_ISO.setString(settings, path);
+ settings.saveSettings(null, getContext());
+ }
break;
case 2:
- SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId);
+ SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId, revision);
break;
case 3:
- SettingsActivity.launch(getContext(), MenuTag.GRAPHICS, gameId);
+ SettingsActivity.launch(getContext(), MenuTag.GRAPHICS, gameId, revision);
break;
case 4:
- SettingsActivity.launch(getContext(), MenuTag.GCPAD_TYPE, gameId);
+ SettingsActivity.launch(getContext(), MenuTag.GCPAD_TYPE, gameId, revision);
break;
case 5:
// Clear option for GC, Wii controls for else
if (platform == Platform.GAMECUBE.toInt())
clearGameSettings(gameId);
else
- SettingsActivity.launch(getActivity(), MenuTag.WIIMOTE, gameId);
+ SettingsActivity.launch(getActivity(), MenuTag.WIIMOTE, gameId, revision);
break;
case 6:
clearGameSettings(gameId);
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractBooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractBooleanSetting.java
new file mode 100644
index 0000000000..3ac6ee3640
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractBooleanSetting.java
@@ -0,0 +1,8 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public interface AbstractBooleanSetting extends AbstractSetting
+{
+ boolean getBoolean(Settings settings);
+
+ void setBoolean(Settings settings, boolean newValue);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractFloatSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractFloatSetting.java
new file mode 100644
index 0000000000..49b7c4e2ee
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractFloatSetting.java
@@ -0,0 +1,8 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public interface AbstractFloatSetting extends AbstractSetting
+{
+ float getFloat(Settings settings);
+
+ void setFloat(Settings settings, float newValue);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractIntSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractIntSetting.java
new file mode 100644
index 0000000000..2d9411a297
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractIntSetting.java
@@ -0,0 +1,8 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public interface AbstractIntSetting extends AbstractSetting
+{
+ int getInt(Settings settings);
+
+ void setInt(Settings settings, int newValue);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractLegacySetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractLegacySetting.java
new file mode 100644
index 0000000000..2075a668f0
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractLegacySetting.java
@@ -0,0 +1,33 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public class AbstractLegacySetting implements AbstractSetting
+{
+ protected final String mFile;
+ protected final String mSection;
+ protected final String mKey;
+
+ public AbstractLegacySetting(String file, String section, String key)
+ {
+ mFile = file;
+ mSection = section;
+ mKey = key;
+ }
+
+ @Override
+ public boolean isOverridden(Settings settings)
+ {
+ return settings.isGameSpecific() && settings.getSection(mFile, mSection).exists(mKey);
+ }
+
+ @Override
+ public boolean isRuntimeEditable()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean delete(Settings settings)
+ {
+ return settings.getSection(mFile, mSection).delete(mKey);
+ }
+}
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..e9ed2443d0
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractSetting.java
@@ -0,0 +1,10 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public interface AbstractSetting
+{
+ boolean isOverridden(Settings settings);
+
+ boolean isRuntimeEditable();
+
+ boolean delete(Settings settings);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractStringSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractStringSetting.java
new file mode 100644
index 0000000000..efc557763b
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AbstractStringSetting.java
@@ -0,0 +1,8 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public interface AbstractStringSetting extends AbstractSetting
+{
+ String getString(Settings settings);
+
+ void setString(Settings settings, String newValue);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java
new file mode 100644
index 0000000000..9eecf8407f
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/AdHocBooleanSetting.java
@@ -0,0 +1,52 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public class AdHocBooleanSetting implements AbstractBooleanSetting
+{
+ private final String mFile;
+ private final String mSection;
+ private final String mKey;
+ private final boolean mDefaultValue;
+
+ public AdHocBooleanSetting(String file, String section, String key, boolean defaultValue)
+ {
+ mFile = file;
+ mSection = section;
+ mKey = key;
+ mDefaultValue = defaultValue;
+
+ if (!NativeConfig.isSettingSaveable(file, section, key))
+ {
+ throw new IllegalArgumentException("File/section/key is unknown or legacy");
+ }
+ }
+
+ @Override
+ public boolean isOverridden(Settings settings)
+ {
+ return NativeConfig.isOverridden(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean isRuntimeEditable()
+ {
+ return true;
+ }
+
+ @Override
+ public boolean delete(Settings settings)
+ {
+ return NativeConfig.deleteKey(settings.getActiveLayer(), mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean getBoolean(Settings settings)
+ {
+ return NativeConfig.getBoolean(settings.getActiveLayer(), mFile, mSection, mKey, mDefaultValue);
+ }
+
+ @Override
+ public void setBoolean(Settings settings, boolean newValue)
+ {
+ NativeConfig.setBoolean(settings.getActiveLayer(), mFile, mSection, mKey, newValue);
+ }
+}
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..29269e40d3
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/BooleanSetting.java
@@ -0,0 +1,185 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public enum BooleanSetting implements AbstractBooleanSetting
+{
+ // These entries have the same names and order as in C++, just for consistency.
+
+ MAIN_DSP_HLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "DSPHLE", true),
+ MAIN_CPU_THREAD(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "CPUThread", true),
+ MAIN_OVERRIDE_REGION_SETTINGS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE,
+ "OverrideRegionSettings", false),
+ MAIN_AUDIO_STRETCH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AudioStretch", false),
+ MAIN_WII_SD_CARD(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "WiiSDCard", true),
+ MAIN_WIIMOTE_CONTINUOUS_SCANNING(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE,
+ "WiimoteContinuousScanning", false),
+ MAIN_WIIMOTE_ENABLE_SPEAKER(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE,
+ "WiimoteEnableSpeaker", false),
+ MAIN_OVERCLOCK_ENABLE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "OverclockEnable", false),
+ MAIN_AUTO_DISC_CHANGE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AutoDiscChange", false),
+ MAIN_ALLOW_SD_WRITES(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "WiiSDCardAllowWrites",
+ true),
+ MAIN_ENABLE_SAVESTATES(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "EnableSaveStates",
+ false),
+
+ MAIN_DSP_JIT(Settings.FILE_DOLPHIN, Settings.SECTION_INI_DSP, "EnableJIT", true),
+
+ MAIN_USE_PANIC_HANDLERS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_INTERFACE,
+ "UsePanicHandlers", true),
+ MAIN_OSD_MESSAGES(Settings.FILE_DOLPHIN, Settings.SECTION_INI_INTERFACE,
+ "OnScreenDisplayMessages", true),
+
+ MAIN_ANALYTICS_ENABLED(Settings.FILE_DOLPHIN, Settings.SECTION_ANALYTICS, "Enabled", false),
+ MAIN_ANALYTICS_PERMISSION_ASKED(Settings.FILE_DOLPHIN, Settings.SECTION_ANALYTICS,
+ "PermissionAsked", false),
+
+ MAIN_RECURSIVE_ISO_PATHS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_GENERAL,
+ "RecursiveISOPaths", false),
+
+ GFX_WIDESCREEN_HACK(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "wideScreenHack", false),
+ GFX_SHOW_FPS(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "ShowFPS", false),
+ GFX_ENABLE_GPU_TEXTURE_DECODING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS,
+ "EnableGPUTextureDecoding", false),
+ GFX_ENABLE_PIXEL_LIGHTING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS,
+ "EnablePixelLighting", false),
+ GFX_FAST_DEPTH_CALC(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "FastDepthCalc", true),
+ GFX_DISABLE_FOG(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "DisableFog", false),
+ GFX_BACKEND_MULTITHREADING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS,
+ "BackendMultithreading", false),
+ GFX_WAIT_FOR_SHADERS_BEFORE_STARTING(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS,
+ "WaitForShadersBeforeStarting", false),
+
+ GFX_ENHANCE_FORCE_FILTERING(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS,
+ "ForceFiltering", false),
+ GFX_ENHANCE_FORCE_TRUE_COLOR(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS,
+ "ForceTrueColor", true),
+ GFX_ENHANCE_DISABLE_COPY_FILTER(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS,
+ "DisableCopyFilter", true),
+ GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS,
+ "ArbitraryMipmapDetection", true),
+
+ GFX_STEREO_SWAP_EYES(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoSwapEyes", false),
+
+ GFX_HACK_EFB_ACCESS_ENABLE(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "EFBAccessEnable",
+ true),
+ GFX_HACK_SKIP_EFB_COPY_TO_RAM(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS,
+ "EFBToTextureEnable", true),
+ GFX_HACK_SKIP_XFB_COPY_TO_RAM(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS,
+ "XFBToTextureEnable", true),
+ GFX_HACK_DEFER_EFB_COPIES(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "DeferEFBCopies", true),
+ GFX_HACK_IMMEDIATE_XFB(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "ImmediateXFBEnable",
+ false),
+ GFX_HACK_SKIP_DUPLICATE_XFBS(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "SkipDuplicateXFBs",
+ true),
+ GFX_HACK_COPY_EFB_SCALED(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS, "EFBScaledCopy", true),
+ GFX_HACK_EFB_EMULATE_FORMAT_CHANGES(Settings.FILE_GFX, Settings.SECTION_GFX_HACKS,
+ "EFBEmulateFormatChanges", false),
+
+ LOGGER_WRITE_TO_FILE(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_OPTIONS, "WriteToFile", false),
+
+ // 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", false),
+ MAIN_JIT_LOAD_STORE_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitLoadStoreOff", false),
+ MAIN_JIT_LOAD_STORE_FLOATING_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG,
+ "JitLoadStoreFloatingOff", false),
+ MAIN_JIT_LOAD_STORE_PAIRED_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG,
+ "JitLoadStorePairedOff", false),
+ MAIN_JIT_FLOATING_POINT_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitFloatingPointOff",
+ false),
+ MAIN_JIT_INTEGER_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitIntegerOff", false),
+ MAIN_JIT_PAIRED_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitPairedOff", false),
+ MAIN_JIT_SYSTEM_REGISTERS_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG,
+ "JitSystemRegistersOff", false),
+ MAIN_JIT_BRANCH_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitBranchOff", false),
+ MAIN_JIT_REGISTER_CACHE_OFF(Settings.FILE_DOLPHIN, Settings.SECTION_DEBUG, "JitRegisterCacheOff",
+ false);
+
+ private static final BooleanSetting[] NOT_RUNTIME_EDITABLE_ARRAY = new BooleanSetting[]{
+ MAIN_DSP_HLE,
+ MAIN_CPU_THREAD,
+ MAIN_OVERRIDE_REGION_SETTINGS,
+ MAIN_WII_SD_CARD, // Can actually be changed, but specific code is required
+ MAIN_DSP_JIT
+ };
+
+ private static final Set<BooleanSetting> NOT_RUNTIME_EDITABLE =
+ new HashSet<>(Arrays.asList(NOT_RUNTIME_EDITABLE_ARRAY));
+
+ private final String mFile;
+ private final String mSection;
+ private final String mKey;
+ private final boolean mDefaultValue;
+
+ BooleanSetting(String file, String section, String key, boolean defaultValue)
+ {
+ mFile = file;
+ mSection = section;
+ mKey = key;
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public boolean isOverridden(Settings settings)
+ {
+ if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ return settings.getSection(mFile, mSection).exists(mKey);
+ else
+ return NativeConfig.isOverridden(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean isRuntimeEditable()
+ {
+ for (BooleanSetting setting : NOT_RUNTIME_EDITABLE)
+ {
+ if (setting == this)
+ return false;
+ }
+
+ return NativeConfig.isSettingSaveable(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean delete(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.deleteKey(settings.getActiveLayer(), mFile, mSection, mKey);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).delete(mKey);
+ }
+ }
+
+ @Override
+ public boolean getBoolean(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.getBoolean(settings.getActiveLayer(), mFile, mSection, mKey,
+ mDefaultValue);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).getBoolean(mKey, mDefaultValue);
+ }
+ }
+
+ @Override
+ public void setBoolean(Settings settings, boolean newValue)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ NativeConfig.setBoolean(settings.getActiveLayer(), mFile, mSection, mKey, newValue);
+ }
+ else
+ {
+ settings.getSection(mFile, mSection).setBoolean(mKey, 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..8dc2e2841f
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/FloatSetting.java
@@ -0,0 +1,76 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public enum FloatSetting implements AbstractFloatSetting
+{
+ // These entries have the same names and order as in C++, just for consistency.
+
+ MAIN_EMULATION_SPEED(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "EmulationSpeed", 1.0f),
+ MAIN_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Overclock", 1.0f);
+
+ private final String mFile;
+ private final String mSection;
+ private final String mKey;
+ private final float mDefaultValue;
+
+ FloatSetting(String file, String section, String key, float defaultValue)
+ {
+ mFile = file;
+ mSection = section;
+ mKey = key;
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public boolean isOverridden(Settings settings)
+ {
+ if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ return settings.getSection(mFile, mSection).exists(mKey);
+ else
+ return NativeConfig.isOverridden(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean isRuntimeEditable()
+ {
+ return NativeConfig.isSettingSaveable(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean delete(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.deleteKey(settings.getActiveLayer(), mFile, mSection, mKey);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).delete(mKey);
+ }
+ }
+
+ @Override
+ public float getFloat(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.getFloat(settings.getActiveLayer(), mFile, mSection, mKey, mDefaultValue);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).getFloat(mKey, mDefaultValue);
+ }
+ }
+
+ @Override
+ public void setFloat(Settings settings, float newValue)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ NativeConfig.setFloat(settings.getActiveLayer(), mFile, mSection, mKey, newValue);
+ }
+ else
+ {
+ settings.getSection(mFile, mSection).setFloat(mKey, 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..7fc265d38f
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/IntSetting.java
@@ -0,0 +1,123 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+import org.dolphinemu.dolphinemu.NativeLibrary;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public enum IntSetting implements AbstractIntSetting
+{
+ // 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",
+ NativeLibrary.DefaultCPUCore()),
+ MAIN_GC_LANGUAGE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SelectedLanguage", 0),
+ MAIN_SLOT_A(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SlotA", 8),
+ MAIN_SLOT_B(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SlotB", 255),
+
+ MAIN_AUDIO_VOLUME(Settings.FILE_DOLPHIN, Settings.SECTION_INI_DSP, "Volume", 100),
+
+ MAIN_LAST_PLATFORM_TAB(Settings.FILE_DOLPHIN, Settings.SECTION_INI_ANDROID, "LastPlatformTab", 0),
+
+ GFX_ASPECT_RATIO(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "AspectRatio", 0),
+ GFX_SAFE_TEXTURE_CACHE_COLOR_SAMPLES(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS,
+ "SafeTextureCacheColorSamples", 128),
+ GFX_MSAA(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "MSAA", 1),
+ GFX_EFB_SCALE(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS, "InternalResolution", 1),
+ GFX_SHADER_COMPILATION_MODE(Settings.FILE_GFX, Settings.SECTION_GFX_SETTINGS,
+ "ShaderCompilationMode", 0),
+
+ GFX_ENHANCE_MAX_ANISOTROPY(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS, "MaxAnisotropy",
+ 0),
+
+ GFX_STEREO_MODE(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoMode", 0),
+ GFX_STEREO_DEPTH(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoDepth", 20),
+ GFX_STEREO_CONVERGENCE_PERCENTAGE(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY,
+ "StereoConvergencePercentage", 100),
+
+ LOGGER_VERBOSITY(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_OPTIONS, "Verbosity", 1);
+
+ private static final IntSetting[] NOT_RUNTIME_EDITABLE_ARRAY = new IntSetting[]{
+ MAIN_CPU_CORE,
+ MAIN_GC_LANGUAGE,
+ MAIN_SLOT_A, // Can actually be changed, but specific code is required
+ MAIN_SLOT_B, // Can actually be changed, but specific code is required
+ };
+
+ private static final Set<IntSetting> NOT_RUNTIME_EDITABLE =
+ new HashSet<>(Arrays.asList(NOT_RUNTIME_EDITABLE_ARRAY));
+
+ private final String mFile;
+ private final String mSection;
+ private final String mKey;
+ private final int mDefaultValue;
+
+ IntSetting(String file, String section, String key, int defaultValue)
+ {
+ mFile = file;
+ mSection = section;
+ mKey = key;
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public boolean isOverridden(Settings settings)
+ {
+ if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ return settings.getSection(mFile, mSection).exists(mKey);
+ else
+ return NativeConfig.isOverridden(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean isRuntimeEditable()
+ {
+ for (IntSetting setting : NOT_RUNTIME_EDITABLE)
+ {
+ if (setting == this)
+ return false;
+ }
+
+ return NativeConfig.isSettingSaveable(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean delete(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.deleteKey(settings.getActiveLayer(), mFile, mSection, mKey);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).delete(mKey);
+ }
+ }
+
+ @Override
+ public int getInt(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.getInt(settings.getActiveLayer(), mFile, mSection, mKey, mDefaultValue);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).getInt(mKey, mDefaultValue);
+ }
+ }
+
+ @Override
+ public void setInt(Settings settings, int newValue)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ NativeConfig.setInt(settings.getActiveLayer(), mFile, mSection, mKey, newValue);
+ }
+ else
+ {
+ settings.getSection(mFile, mSection).setInt(mKey, newValue);
+ }
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyBooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyBooleanSetting.java
new file mode 100644
index 0000000000..c2f4a8895d
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyBooleanSetting.java
@@ -0,0 +1,24 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public class LegacyBooleanSetting extends AbstractLegacySetting implements AbstractBooleanSetting
+{
+ private final boolean mDefaultValue;
+
+ public LegacyBooleanSetting(String file, String section, String key, boolean defaultValue)
+ {
+ super(file, section, key);
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public boolean getBoolean(Settings settings)
+ {
+ return settings.getSection(mFile, mSection).getBoolean(mKey, mDefaultValue);
+ }
+
+ @Override
+ public void setBoolean(Settings settings, boolean newValue)
+ {
+ settings.getSection(mFile, mSection).setBoolean(mKey, newValue);
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyFloatSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyFloatSetting.java
new file mode 100644
index 0000000000..fb4858ceea
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyFloatSetting.java
@@ -0,0 +1,24 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public class LegacyFloatSetting extends AbstractLegacySetting implements AbstractFloatSetting
+{
+ private final float mDefaultValue;
+
+ public LegacyFloatSetting(String file, String section, String key, float defaultValue)
+ {
+ super(file, section, key);
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public float getFloat(Settings settings)
+ {
+ return settings.getSection(mFile, mSection).getFloat(mKey, mDefaultValue);
+ }
+
+ @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/LegacyIntSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyIntSetting.java
new file mode 100644
index 0000000000..7d52660efe
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyIntSetting.java
@@ -0,0 +1,24 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public class LegacyIntSetting extends AbstractLegacySetting implements AbstractIntSetting
+{
+ private final int mDefaultValue;
+
+ public LegacyIntSetting(String file, String section, String key, int defaultValue)
+ {
+ super(file, section, key);
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public int getInt(Settings settings)
+ {
+ return settings.getSection(mFile, mSection).getInt(mKey, mDefaultValue);
+ }
+
+ @Override
+ public void setInt(Settings settings, int newValue)
+ {
+ settings.getSection(mFile, mSection).setInt(mKey, newValue);
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyStringSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyStringSetting.java
new file mode 100644
index 0000000000..8ada455cea
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/LegacyStringSetting.java
@@ -0,0 +1,24 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public class LegacyStringSetting extends AbstractLegacySetting implements AbstractStringSetting
+{
+ private final String mDefaultValue;
+
+ public LegacyStringSetting(String file, String section, String key, String defaultValue)
+ {
+ super(file, section, key);
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public String getString(Settings settings)
+ {
+ return settings.getSection(mFile, mSection).getString(mKey, mDefaultValue);
+ }
+
+ @Override
+ public void setString(Settings settings, String newValue)
+ {
+ settings.getSection(mFile, mSection).setString(mKey, newValue);
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java
new file mode 100644
index 0000000000..51c29f833b
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/NativeConfig.java
@@ -0,0 +1,42 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+public class NativeConfig
+{
+ public static final int LAYER_BASE_OR_CURRENT = 0;
+ public static final int LAYER_LOCAL_GAME = 1;
+
+ public static native boolean isSettingSaveable(String file, String section, String key);
+
+ public static native void loadGameInis(String gameId, int revision);
+
+ public static native void unloadGameInis();
+
+ public static native void save(int layer);
+
+ public static native boolean isOverridden(String file, String section, String key);
+
+ public static native boolean deleteKey(int layer, String file, String section, String key);
+
+ public static native String getString(int layer, String file, String section, String key,
+ String defaultValue);
+
+ public static native boolean getBoolean(int layer, String file, String section, String key,
+ boolean defaultValue);
+
+ public static native int getInt(int layer, String file, String section, String key,
+ int defaultValue);
+
+ public static native float getFloat(int layer, String file, String section, String key,
+ float defaultValue);
+
+ public static native void setString(int layer, String file, String section, String key,
+ String value);
+
+ public static native void setBoolean(int layer, String file, String section, String key,
+ boolean value);
+
+ public static native void setInt(int layer, String file, String section, String key, int value);
+
+ public static native void setFloat(int layer, String file, String section, String key,
+ float value);
+}
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..5d650371c4 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,18 @@ 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.io.Closeable;
import java.util.HashMap;
import java.util.Map;
-import java.util.Set;
-public class Settings
+public class Settings implements Closeable
{
+ 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,25 +45,23 @@ 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 String mGameId;
+ private int mRevision;
- 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<String, IniFile> mIniFiles = new HashMap<>();
+ private boolean mLoadedRecursiveIsoPathsValue = false;
+
private IniFile getGameSpecificFile()
{
- if (TextUtils.isEmpty(gameId) || mIniFiles.size() != 1)
+ if (!isGameSpecific() || mIniFiles.size() != 1)
throw new IllegalStateException();
return mIniFiles.get(GAME_SETTINGS_PLACEHOLDER_FILE_NAME);
@@ -65,7 +69,7 @@ public class Settings
public IniFile.Section getSection(String fileName, String sectionName)
{
- if (TextUtils.isEmpty(gameId))
+ if (!isGameSpecific())
{
return mIniFiles.get(fileName).getOrCreateSection(sectionName);
}
@@ -76,6 +80,16 @@ public class Settings
}
}
+ public boolean isGameSpecific()
+ {
+ return !TextUtils.isEmpty(mGameId);
+ }
+
+ public int getActiveLayer()
+ {
+ return isGameSpecific() ? NativeConfig.LAYER_LOCAL_GAME : NativeConfig.LAYER_BASE_OR_CURRENT;
+ }
+
public boolean isEmpty()
{
return mIniFiles.isEmpty();
@@ -85,14 +99,21 @@ public class Settings
{
mIniFiles = new HashMap<>();
- if (TextUtils.isEmpty(gameId))
+ if (!isGameSpecific())
{
loadDolphinSettings(view);
}
else
{
- loadCustomGameSettings(gameId, view);
+ // Loading game INIs while the core is running will mess with the game INIs loaded by the core
+ if (NativeLibrary.IsRunning())
+ throw new IllegalStateException("Attempted to load game INI while emulating");
+
+ NativeConfig.loadGameInis(mGameId, mRevision);
+ loadCustomGameSettings(mGameId, view);
}
+
+ mLoadedRecursiveIsoPathsValue = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(this);
}
private void loadDolphinSettings(SettingsActivityView view)
@@ -117,69 +138,54 @@ public class Settings
SettingsFile.readWiimoteProfile(gameId, getGameSpecificFile(), padId);
}
- public void loadSettings(String gameId, SettingsActivityView view)
+ public void loadSettings(String gameId, int revision, SettingsActivityView view)
{
- this.gameId = gameId;
+ mGameId = gameId;
+ mRevision = revision;
loadSettings(view);
}
- public void saveSettings(SettingsActivityView view, Context context, Set<String> modifiedSettings)
+ public void saveSettings(SettingsActivityView view, Context context)
{
- if (TextUtils.isEmpty(gameId))
+ if (!isGameSpecific())
{
- 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<String, IniFile> entry : mIniFiles.entrySet())
{
SettingsFile.saveFile(entry.getKey(), entry.getValue(), view);
}
- if (modifiedSettings.contains(SettingsFile.KEY_DSP_ENGINE))
+ NativeConfig.save(NativeConfig.LAYER_BASE_OR_CURRENT);
+
+ if (!NativeLibrary.IsRunning())
{
- 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 to legacy settings
+ NativeLibrary.ReloadConfig();
+ NativeLibrary.ReloadWiimoteConfig();
}
- // Notify the native code of the changes
- NativeLibrary.ReloadConfig();
- NativeLibrary.ReloadWiimoteConfig();
+ // LogManager does use the new config system, but doesn't pick up on changes automatically
NativeLibrary.ReloadLoggerConfig();
NativeLibrary.UpdateGCAdapterScanThread();
- if (modifiedSettings.contains(SettingsFile.KEY_RECURSIVE_ISO_PATHS))
+ if (mLoadedRecursiveIsoPathsValue != BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(this))
{
// Refresh game library
GameFileCacheService.startRescan(context);
}
-
- modifiedSettings.clear();
}
else
{
// custom game settings
- view.showToastMessage("Saved settings for " + gameId);
- SettingsFile.saveCustomGameSettings(gameId, getGameSpecificFile());
+
+ if (context != null)
+ Toast.makeText(context, "Saved settings for " + mGameId, Toast.LENGTH_SHORT).show();
+
+ SettingsFile.saveCustomGameSettings(mGameId, getGameSpecificFile());
+
+ NativeConfig.save(NativeConfig.LAYER_LOCAL_GAME);
}
}
@@ -211,9 +217,18 @@ public class Settings
// possible to know which lines were added intentionally by the user and which lines were added
// unintentionally, which is why we have to delete the whole file in order to fix everything.
- if (TextUtils.isEmpty(gameId))
+ if (!isGameSpecific())
return false;
- return getSection(SettingsFile.FILE_NAME_DOLPHIN, SECTION_INI_INTERFACE).exists("ThemeName");
+ return getSection(Settings.FILE_DOLPHIN, SECTION_INI_INTERFACE).exists("ThemeName");
+ }
+
+ @Override
+ public void close()
+ {
+ if (isGameSpecific())
+ {
+ NativeConfig.unloadGameInis();
+ }
}
}
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..272e2b02cd
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/StringSetting.java
@@ -0,0 +1,107 @@
+package org.dolphinemu.dolphinemu.features.settings.model;
+
+import org.dolphinemu.dolphinemu.NativeLibrary;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public enum StringSetting implements AbstractStringSetting
+{
+ // These entries have the same names and order as in C++, just for consistency.
+
+ MAIN_DEFAULT_ISO(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "DefaultISO", ""),
+ MAIN_GFX_BACKEND(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "GFXBackend",
+ NativeLibrary.GetDefaultGraphicsBackendName()),
+
+ 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", ""),
+
+ GFX_ENHANCE_POST_SHADER(Settings.FILE_GFX, Settings.SECTION_GFX_ENHANCEMENTS,
+ "PostProcessingShader", "");
+
+ private static final StringSetting[] NOT_RUNTIME_EDITABLE_ARRAY = new StringSetting[]{
+ MAIN_GFX_BACKEND,
+ };
+
+ private static final Set<StringSetting> NOT_RUNTIME_EDITABLE =
+ new HashSet<>(Arrays.asList(NOT_RUNTIME_EDITABLE_ARRAY));
+
+ private final String mFile;
+ private final String mSection;
+ private final String mKey;
+ private final String mDefaultValue;
+
+ StringSetting(String file, String section, String key, String defaultValue)
+ {
+ mFile = file;
+ mSection = section;
+ mKey = key;
+ mDefaultValue = defaultValue;
+ }
+
+ @Override
+ public boolean isOverridden(Settings settings)
+ {
+ if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ return settings.getSection(mFile, mSection).exists(mKey);
+ else
+ return NativeConfig.isOverridden(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean isRuntimeEditable()
+ {
+ for (StringSetting setting : NOT_RUNTIME_EDITABLE)
+ {
+ if (setting == this)
+ return false;
+ }
+
+ return NativeConfig.isSettingSaveable(mFile, mSection, mKey);
+ }
+
+ @Override
+ public boolean delete(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.deleteKey(settings.getActiveLayer(), mFile, mSection, mKey);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).delete(mKey);
+ }
+ }
+
+ @Override
+ public String getString(Settings settings)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ return NativeConfig.getString(settings.getActiveLayer(), mFile, mSection, mKey,
+ mDefaultValue);
+ }
+ else
+ {
+ return settings.getSection(mFile, mSection).getString(mKey, mDefaultValue);
+ }
+ }
+
+ @Override
+ public void setString(Settings settings, String newValue)
+ {
+ if (NativeConfig.isSettingSaveable(mFile, mSection, mKey))
+ {
+ NativeConfig.setString(settings.getActiveLayer(), mFile, mSection, mKey, newValue);
+ }
+ else
+ {
+ settings.getSection(mFile, mSection).setString(mKey, 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..891d5e5346 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,27 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
public class CheckBoxSetting extends SettingsItem
{
- protected boolean mDefaultValue;
+ protected AbstractBooleanSetting mSetting;
- public CheckBoxSetting(String file, String section, String key, int titleId, int descriptionId,
- boolean defaultValue)
+ public CheckBoxSetting(AbstractBooleanSetting setting, int titleId, int descriptionId)
{
- super(file, section, key, titleId, descriptionId);
- mDefaultValue = defaultValue;
+ super(titleId, descriptionId);
+ mSetting = setting;
}
public boolean isChecked(Settings settings)
{
- return settings.getSection(getFile(), getSection()).getBoolean(getKey(), mDefaultValue);
+ return mSetting.getBoolean(settings);
}
public void setChecked(Settings settings, boolean checked)
{
- settings.getSection(getFile(), getSection()).setBoolean(getKey(), checked);
+ mSetting.setBoolean(settings, checked);
}
@Override
@@ -28,4 +29,10 @@ public class CheckBoxSetting extends SettingsItem
{
return TYPE_CHECKBOX;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
+ }
}
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..f0a1dee5eb 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
@@ -1,5 +1,7 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
+
public final class ConfirmRunnable extends SettingsItem
{
private int mAlertText;
@@ -9,7 +11,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;
@@ -35,4 +37,10 @@ public final class ConfirmRunnable extends SettingsItem
{
return TYPE_CONFIRM_RUNNABLE;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return null;
+ }
}
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..a198556574 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,34 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
+import androidx.annotation.Nullable;
+
public final class FilePicker extends SettingsItem
{
- private String mDefaultValue;
+ private AbstractStringSetting mSetting;
private int mRequestType;
+ private String mDefaultPathRelativeToUserDirectory;
- public FilePicker(String file, String section, String key, int titleId, int descriptionId,
- String defaultVault, int requestType)
+ public FilePicker(AbstractStringSetting setting, int titleId, int descriptionId, int requestType,
+ @Nullable String defaultPathRelativeToUserDirectory)
{
- super(file, section, key, titleId, descriptionId);
- mDefaultValue = defaultVault;
+ super(titleId, descriptionId);
+ mSetting = setting;
mRequestType = requestType;
+ mDefaultPathRelativeToUserDirectory = defaultPathRelativeToUserDirectory;
}
public String getSelectedValue(Settings settings)
{
- return settings.getSection(getFile(), getSection()).getString(getKey(), mDefaultValue);
+ return mSetting.getString(settings);
}
public void setSelectedValue(Settings settings, String selection)
{
- settings.getSection(getFile(), getSection()).setString(getKey(), selection);
+ mSetting.setString(settings, selection);
}
public int getRequestType()
@@ -30,9 +36,21 @@ public final class FilePicker extends SettingsItem
return mRequestType;
}
+ @Nullable
+ public String getDefaultPathRelativeToUserDirectory()
+ {
+ return mDefaultPathRelativeToUserDirectory;
+ }
+
@Override
public int getType()
{
return TYPE_FILE_PICKER;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
+ }
}
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..7d9df45056 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,33 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractFloatSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
public class FloatSliderSetting extends SliderSetting
{
- protected float mDefaultValue;
+ protected AbstractFloatSetting mSetting;
- public FloatSliderSetting(String file, String section, String key, int titleId, int descriptionId,
- int max, String units, float defaultValue)
+ public FloatSliderSetting(AbstractFloatSetting setting, int titleId, int descriptionId, int max,
+ String units)
{
- super(file, section, key, titleId, descriptionId, max, units);
- mDefaultValue = defaultValue;
+ super(titleId, descriptionId, max, units);
+ mSetting = setting;
}
public int getSelectedValue(Settings settings)
{
- float value = settings.getSection(getFile(), getSection()).getFloat(getKey(), mDefaultValue);
- return Math.round(value);
+ return Math.round(mSetting.getFloat(settings));
}
public void setSelectedValue(Settings settings, float selection)
{
- settings.getSection(getFile(), getSection()).setFloat(getKey(), selection);
+ mSetting.setFloat(settings, selection);
+ }
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
}
}
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..3e9a35d694 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
@@ -1,10 +1,12 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
+
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
@@ -12,4 +14,10 @@ public final class HeaderSetting extends SettingsItem
{
return SettingsItem.TYPE_HEADER;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return null;
+ }
}
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..a31348facb 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
@@ -6,21 +6,34 @@ import android.view.InputDevice;
import android.view.KeyEvent;
import org.dolphinemu.dolphinemu.DolphinApplication;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
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 +73,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 +92,12 @@ public class InputBindingSetting extends SettingsItem
public String getGameId()
{
- return gameId;
+ return mGameId;
+ }
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return null;
}
}
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..9c54346bba 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,33 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
public final class IntSliderSetting extends SliderSetting
{
- private int mDefaultValue;
+ private AbstractIntSetting mSetting;
- public IntSliderSetting(String file, String section, String key, int titleId, int descriptionId,
- int max, String units, int defaultValue)
+ public IntSliderSetting(AbstractIntSetting setting, int titleId, int descriptionId, int max,
+ String units)
{
- super(file, section, key, titleId, descriptionId, max, units);
- mDefaultValue = defaultValue;
+ super(titleId, descriptionId, max, units);
+ mSetting = setting;
}
public int getSelectedValue(Settings settings)
{
- return settings.getSection(getFile(), getSection()).getInt(getKey(), mDefaultValue);
+ return mSetting.getInt(settings);
}
public void setSelectedValue(Settings settings, int selection)
{
- settings.getSection(getFile(), getSection()).setInt(getKey(), selection);
+ mSetting.setInt(settings, selection);
+ }
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
}
}
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..c2dc519fbf 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,32 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
public final class InvertedCheckBoxSetting extends CheckBoxSetting
{
- public InvertedCheckBoxSetting(String file, String section, String key, int titleId,
- int descriptionId, boolean defaultValue)
+ public InvertedCheckBoxSetting(AbstractBooleanSetting setting, int titleId,
+ int descriptionId)
{
- super(file, section, key, titleId, descriptionId, !defaultValue);
+ super(setting, titleId, descriptionId);
}
@Override
public boolean isChecked(Settings settings)
{
- return !settings.getSection(getFile(), getSection()).getBoolean(getKey(), mDefaultValue);
+ return !mSetting.getBoolean(settings);
}
@Override
public void setChecked(Settings settings, boolean checked)
{
- settings.getSection(getFile(), getSection()).setBoolean(getKey(), !checked);
+ mSetting.setBoolean(settings, !checked);
+ }
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
}
}
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..f20be482af
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/LogCheckBoxSetting.java
@@ -0,0 +1,21 @@
+package org.dolphinemu.dolphinemu.features.settings.model.view;
+
+import org.dolphinemu.dolphinemu.features.settings.model.AdHocBooleanSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.Settings;
+
+public class LogCheckBoxSetting extends CheckBoxSetting
+{
+ String mKey;
+
+ public LogCheckBoxSetting(String key, int titleId, int descriptionId)
+ {
+ super(new AdHocBooleanSetting(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_LOGS, key, false),
+ titleId, descriptionId);
+ 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..e0dbbc29d3 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,32 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractFloatSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
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(AbstractFloatSetting setting, int titleId, int descriptionId, int max,
+ String units)
{
- super(file, section, key, titleId, descriptionId, max, units, defaultValue / 100);
+ super(setting, titleId, descriptionId, max, units);
}
@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) * 100);
}
@Override
public void setSelectedValue(Settings settings, float selection)
{
- settings.getSection(getFile(), getSection()).setFloat(getKey(), selection / 100);
+ mSetting.setFloat(settings, selection / 100);
+ }
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/RumbleBindingSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/RumbleBindingSetting.java
index fa0bfb95c5..90e87305a9 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/RumbleBindingSetting.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/RumbleBindingSetting.java
@@ -6,6 +6,7 @@ import android.view.KeyEvent;
import org.dolphinemu.dolphinemu.DolphinApplication;
import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.utils.Rumble;
@@ -55,4 +56,10 @@ public class RumbleBindingSetting extends InputBindingSetting
{
return TYPE_RUMBLE_BINDING;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return null;
+ }
}
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..2e154d69d3 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
@@ -1,5 +1,8 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.NativeLibrary;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
/**
@@ -21,57 +24,23 @@ 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.
*/
public int getNameId()
@@ -91,4 +60,21 @@ public abstract class SettingsItem
* @return An integer (ideally, one of the constants defined in this file)
*/
public abstract int getType();
+
+ protected abstract AbstractSetting getSetting();
+
+ public boolean isOverridden(Settings settings)
+ {
+ AbstractSetting setting = getSetting();
+ return setting != null && setting.isOverridden(settings);
+ }
+
+ public boolean isEditable()
+ {
+ if (!NativeLibrary.IsRunning())
+ return true;
+
+ AbstractSetting setting = getSetting();
+ return setting != null && setting.isRuntimeEditable();
+ }
}
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..121e83aae0 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,32 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
public final class SingleChoiceSetting extends SettingsItem
{
- private int mDefaultValue;
+ private AbstractIntSetting mSetting;
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(AbstractIntSetting setting, int titleId, int descriptionId,
+ int choicesId, int valuesId, MenuTag menuTag)
{
- super(file, section, key, titleId, descriptionId);
+ super(titleId, descriptionId);
+ mSetting = setting;
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(AbstractIntSetting setting, int titleId, int descriptionId,
+ int choicesId, int valuesId)
{
- this(file, section, key, titleId, descriptionId, choicesId, valuesId, defaultValue, null);
+ this(setting, titleId, descriptionId, choicesId, valuesId, null);
}
public int getChoicesId()
@@ -39,7 +41,7 @@ public final class SingleChoiceSetting extends SettingsItem
public int getSelectedValue(Settings settings)
{
- return settings.getSection(getFile(), getSection()).getInt(getKey(), mDefaultValue);
+ return mSetting.getInt(settings);
}
public MenuTag getMenuTag()
@@ -49,7 +51,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
@@ -57,4 +59,10 @@ public final class SingleChoiceSetting extends SettingsItem
{
return TYPE_SINGLE_CHOICE;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
+ }
}
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..96320aee0e 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,11 +1,13 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem
{
- private int mDefaultValue;
+ private AbstractIntSetting mSetting;
private int mChoicesId;
private int mValuesId;
@@ -13,25 +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(AbstractIntSetting setting, int titleId,
+ int descriptionId, int choicesId, int valuesId, int descriptionChoicesId,
+ int descriptionValuesId, MenuTag menuTag)
{
- super(file, section, key, titleId, descriptionId);
+ super(titleId, descriptionId);
+ mSetting = setting;
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(AbstractIntSetting setting, int titleId,
+ int descriptionId, int choicesId, int valuesId, int descriptionChoicesId,
+ int descriptionValuesId)
{
- this(file, section, key, titleId, descriptionId, choicesId, valuesId, descriptionChoicesId,
- descriptionValuesId, defaultValue, null);
+ this(setting, titleId, descriptionId, choicesId, valuesId, descriptionChoicesId,
+ descriptionValuesId, null);
}
public int getChoicesId()
@@ -56,7 +58,7 @@ public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem
public int getSelectedValue(Settings settings)
{
- return settings.getSection(getFile(), getSection()).getInt(getKey(), mDefaultValue);
+ return mSetting.getInt(settings);
}
public MenuTag getMenuTag()
@@ -66,7 +68,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
@@ -74,4 +76,10 @@ public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem
{
return TYPE_SINGLE_CHOICE_DYNAMIC_DESCRIPTIONS;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
+ }
}
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..e7badc8688 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
@@ -1,48 +1,49 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
import org.dolphinemu.dolphinemu.DolphinApplication;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
public class StringSingleChoiceSetting extends SettingsItem
{
- private String mDefaultValue;
+ private AbstractStringSetting mSetting;
private String[] mChoicesId;
private String[] mValuesId;
private MenuTag mMenuTag;
- public StringSingleChoiceSetting(String file, String section, String key, int titleId,
- int descriptionId, String[] choicesId, String[] valuesId, String defaultValue,
- MenuTag menuTag)
+ public StringSingleChoiceSetting(AbstractStringSetting setting, int titleId,
+ int descriptionId, String[] choicesId, String[] valuesId, 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,
- int descriptionId, String[] choicesId, String[] valuesId, String defaultValue)
+ public StringSingleChoiceSetting(AbstractStringSetting setting, int titleId,
+ int descriptionId, String[] choicesId, String[] valuesId)
{
- this(file, section, key, titleId, descriptionId, choicesId, valuesId, defaultValue, null);
+ this(setting, titleId, descriptionId, choicesId, valuesId, null);
}
- public StringSingleChoiceSetting(String file, String section, String key, int titleId,
- int descriptionId, int choicesId, int valuesId, String defaultValue, MenuTag menuTag)
+ public StringSingleChoiceSetting(AbstractStringSetting setting, int titleId,
+ int descriptionId, int choicesId, int valuesId, 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,
- int descriptionId, int choicesId, int valuesId, String defaultValue)
+ public StringSingleChoiceSetting(AbstractStringSetting setting, int titleId,
+ int descriptionId, int choicesId, int valuesId)
{
- this(file, section, key, titleId, descriptionId, choicesId, valuesId, defaultValue, null);
+ this(setting, titleId, descriptionId, choicesId, valuesId, null);
}
public String[] getChoicesId()
@@ -70,7 +71,7 @@ public class StringSingleChoiceSetting extends SettingsItem
public String getSelectedValue(Settings settings)
{
- return settings.getSection(getFile(), getSection()).getString(getKey(), mDefaultValue);
+ return mSetting.getString(settings);
}
public int getSelectValueIndex(Settings settings)
@@ -94,7 +95,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
@@ -102,6 +103,12 @@ public class StringSingleChoiceSetting extends SettingsItem
{
return TYPE_STRING_SINGLE_CHOICE;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return mSetting;
+ }
}
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..5add7ae5fe 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
@@ -1,14 +1,15 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
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;
}
@@ -22,4 +23,10 @@ public final class SubmenuSetting extends SettingsItem
{
return TYPE_SUBMENU;
}
+
+ @Override
+ public AbstractSetting getSetting()
+ {
+ return null;
+ }
}
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..e043b36f24 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
@@ -26,16 +26,27 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
{
private static final String ARG_MENU_TAG = "menu_tag";
private static final String ARG_GAME_ID = "game_id";
+ private static final String ARG_REVISION = "revision";
private static final String FRAGMENT_TAG = "settings";
private SettingsActivityPresenter mPresenter;
private ProgressDialog dialog;
- public static void launch(Context context, MenuTag menuTag, String gameId)
+ public static void launch(Context context, MenuTag menuTag, String gameId, int revision)
{
Intent settings = new Intent(context, SettingsActivity.class);
settings.putExtra(ARG_MENU_TAG, menuTag);
settings.putExtra(ARG_GAME_ID, gameId);
+ settings.putExtra(ARG_REVISION, revision);
+ context.startActivity(settings);
+ }
+
+ public static void launch(Context context, MenuTag menuTag)
+ {
+ Intent settings = new Intent(context, SettingsActivity.class);
+ settings.putExtra(ARG_MENU_TAG, menuTag);
+ settings.putExtra(ARG_GAME_ID, "");
+ settings.putExtra(ARG_REVISION, 0);
context.startActivity(settings);
}
@@ -57,10 +68,11 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
Intent launcher = getIntent();
String gameID = launcher.getStringExtra(ARG_GAME_ID);
+ int revision = launcher.getIntExtra(ARG_REVISION, 0);
MenuTag menuTag = (MenuTag) launcher.getSerializableExtra(ARG_MENU_TAG);
mPresenter = new SettingsActivityPresenter(this, getSettings());
- mPresenter.onCreate(savedInstanceState, menuTag, gameID, getApplicationContext());
+ mPresenter.onCreate(savedInstanceState, menuTag, gameID, revision, getApplicationContext());
}
@Override
@@ -95,18 +107,23 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
/**
* If this is called, the user has left the settings screen (potentially through the
- * home button) and will expect their changes to be persisted. So we kick off an
- * IntentService which will do so on a background thread.
+ * home button) and will expect their changes to be persisted.
*/
@Override
protected void onStop()
{
super.onStop();
-
mPresenter.onStop(isFinishing());
}
@Override
+ protected void onDestroy()
+ {
+ super.onDestroy();
+ mPresenter.onDestroy();
+ }
+
+ @Override
public void showSettingsFragment(MenuTag menuTag, Bundle extras, boolean addToStack,
String gameID)
{
@@ -224,9 +241,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..c954bfe516 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";
@@ -27,25 +24,35 @@ public final class SettingsActivityPresenter
private MenuTag menuTag;
private String gameId;
+ private int revision;
private Context context;
- private final Set<String> modifiedSettings = new HashSet<>();
-
SettingsActivityPresenter(SettingsActivityView view, Settings settings)
{
mView = view;
mSettings = settings;
}
- public void onCreate(Bundle savedInstanceState, MenuTag menuTag, String gameId, Context context)
+ public void onCreate(Bundle savedInstanceState, MenuTag menuTag, String gameId, int revision,
+ Context context)
{
this.menuTag = menuTag;
this.gameId = gameId;
+ this.revision = revision;
this.context = context;
mShouldSave = savedInstanceState != null && savedInstanceState.getBoolean(KEY_SHOULD_SAVE);
}
+ public void onDestroy()
+ {
+ if (mSettings != null)
+ {
+ mSettings.close();
+ mSettings = null;
+ }
+ }
+
public void onStart()
{
prepareDolphinDirectoriesIfNeeded();
@@ -57,7 +64,7 @@ public final class SettingsActivityPresenter
{
if (!TextUtils.isEmpty(gameId))
{
- mSettings.loadSettings(gameId, mView);
+ mSettings.loadSettings(gameId, revision, mView);
if (mSettings.gameIniContainsJunk())
{
@@ -98,7 +105,7 @@ public final class SettingsActivityPresenter
public void clearSettings()
{
mSettings.clearSettings();
- onSettingChanged(null);
+ onSettingChanged();
}
public void onStop(boolean finishing)
@@ -112,7 +119,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 +134,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..01ecfd3ffc 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,7 +13,9 @@ import androidx.recyclerview.widget.RecyclerView;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.dialogs.MotionAlertDialog;
+import org.dolphinemu.dolphinemu.features.settings.model.AdHocBooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
+import org.dolphinemu.dolphinemu.features.settings.model.StringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.CheckBoxSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.FilePicker;
import org.dolphinemu.dolphinemu.features.settings.model.view.FloatSliderSetting;
@@ -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<SettingViewHolde
item.setChecked(getSettings(), checked);
notifyItemChanged(position);
- mView.onSettingChanged(item.getKey());
+ mView.onSettingChanged();
}
public void onSingleChoiceClick(SingleChoiceSetting item, int position)
@@ -265,7 +265,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
dialog.setOnDismissListener(dialog1 ->
{
notifyItemChanged(position);
- mView.onSettingChanged(item.getKey());
+ mView.onSettingChanged();
});
dialog.setCanceledOnTouchOutside(false);
dialog.show();
@@ -308,7 +308,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
FilePicker filePicker = (FilePicker) mClickedItem;
if (!filePicker.getSelectedValue(mView.getSettings()).equals(selectedFile))
- mView.onSettingChanged(filePicker.getKey());
+ mView.onSettingChanged();
filePicker.setSelectedValue(mView.getSettings(), selectedFile);
@@ -317,32 +317,29 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
public void resetPaths()
{
- IniFile.Section coreSection = mView.getSettings().getSection(SettingsFile.FILE_NAME_DOLPHIN,
- Settings.SECTION_INI_CORE);
- IniFile.Section generalSection = mView.getSettings().getSection(SettingsFile.FILE_NAME_DOLPHIN,
- Settings.SECTION_INI_GENERAL);
-
- coreSection.delete(SettingsFile.KEY_DEFAULT_ISO);
- generalSection.delete(SettingsFile.KEY_NAND_ROOT_PATH);
- generalSection.delete(SettingsFile.KEY_DUMP_PATH);
- generalSection.delete(SettingsFile.KEY_LOAD_PATH);
- generalSection.delete(SettingsFile.KEY_RESOURCE_PACK_PATH);
- generalSection.delete(SettingsFile.KEY_WII_SD_CARD_PATH);
-
- mView.onSettingChanged(null);
+ Settings settings = mView.getSettings();
+
+ StringSetting.MAIN_DEFAULT_ISO.delete(settings);
+ StringSetting.MAIN_FS_PATH.delete(settings);
+ StringSetting.MAIN_DUMP_PATH.delete(settings);
+ StringSetting.MAIN_LOAD_PATH.delete(settings);
+ StringSetting.MAIN_RESOURCEPACK_PATH.delete(settings);
+ StringSetting.MAIN_SD_PATH.delete(settings);
+
+ mView.onSettingChanged();
}
public void setAllLogTypes(boolean value)
{
- IniFile.Section section = mView.getSettings().getSection(SettingsFile.FILE_NAME_LOGGER,
- Settings.SECTION_LOGGER_LOGS);
+ Settings settings = mView.getSettings();
for (Map.Entry<String, String> entry : SettingsFragmentPresenter.LOG_TYPE_NAMES.entrySet())
{
- section.setBoolean(entry.getKey(), value);
+ new AdHocBooleanSetting(Settings.FILE_LOGGER, Settings.SECTION_LOGGER_LOGS, entry.getKey(),
+ false).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<SettingViewHolde
int value = getValueForSingleChoiceSelection(scSetting, which);
if (scSetting.getSelectedValue(getSettings()) != value)
- mView.onSettingChanged(mClickedItem.getKey());
+ mView.onSettingChanged();
handleMenuTag(scSetting.getMenuTag(), value);
@@ -390,7 +387,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
int value = getValueForSingleChoiceDynamicDescriptionsSelection(scSetting, which);
if (scSetting.getSelectedValue(getSettings()) != value)
- mView.onSettingChanged(mClickedItem.getKey());
+ mView.onSettingChanged();
scSetting.setSelectedValue(getSettings(), value);
@@ -401,7 +398,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
StringSingleChoiceSetting scSetting = (StringSingleChoiceSetting) mClickedItem;
String value = scSetting.getValueAt(which);
if (!scSetting.getSelectedValue(getSettings()).equals(value))
- mView.onSettingChanged(mClickedItem.getKey());
+ mView.onSettingChanged();
handleMenuTag(scSetting.getMenuTag(), which);
@@ -413,7 +410,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{
IntSliderSetting sliderSetting = (IntSliderSetting) mClickedItem;
if (sliderSetting.getSelectedValue(getSettings()) != mSeekbarProgress)
- mView.onSettingChanged(mClickedItem.getKey());
+ mView.onSettingChanged();
sliderSetting.setSelectedValue(getSettings(), mSeekbarProgress);
@@ -423,7 +420,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{
FloatSliderSetting sliderSetting = (FloatSliderSetting) mClickedItem;
if (sliderSetting.getSelectedValue(getSettings()) != mSeekbarProgress)
- mView.onSettingChanged(mClickedItem.getKey());
+ mView.onSettingChanged();
sliderSetting.setSelectedValue(getSettings(), mSeekbarProgress);
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
index e10dfbaf71..155cf1bfac 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
@@ -193,9 +193,9 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
}
@Override
- public void onSettingChanged(String key)
+ public void onSettingChanged()
{
- mActivity.onSettingChanged(key);
+ mActivity.onSettingChanged();
}
@Override
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
index 60b3256fbe..e36a960179 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
@@ -5,7 +5,15 @@ import android.text.TextUtils;
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.FloatSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.IntSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.LegacyBooleanSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.LegacyIntSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.LegacyStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
+import org.dolphinemu.dolphinemu.features.settings.model.StringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.CheckBoxSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.ConfirmRunnable;
import org.dolphinemu.dolphinemu.features.settings.model.view.FilePicker;
@@ -13,6 +21,7 @@ import org.dolphinemu.dolphinemu.features.settings.model.view.HeaderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.InputBindingSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.IntSliderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.InvertedCheckBoxSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.view.LogCheckBoxSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.PercentSliderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.RumbleBindingSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
@@ -206,48 +215,107 @@ public final class SettingsFragmentPresenter
private void addConfigSettings(ArrayList<SettingsItem> 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<SettingsItem> 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,
- R.string.enable_save_states_description, false));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_CPU_THREAD, R.string.dual_core,
+ R.string.dual_core_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_OVERRIDE_REGION_SETTINGS,
+ R.string.override_region_settings, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_AUTO_DISC_CHANGE, R.string.auto_disc_change, 0));
+ sl.add(new PercentSliderSetting(FloatSetting.MAIN_EMULATION_SPEED, R.string.speed_limit, 0, 200,
+ "%"));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_ANALYTICS_ENABLED, R.string.analytics, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_ENABLE_SAVESTATES, R.string.enable_save_states,
+ R.string.enable_save_states_description));
}
private void addInterfaceSettings(ArrayList<SettingsItem> sl)
{
- sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_INTERFACE,
- SettingsFile.KEY_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,
- R.string.osd_messages_description, true));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_USE_PANIC_HANDLERS, R.string.panic_handlers,
+ R.string.panic_handlers_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_OSD_MESSAGES, R.string.osd_messages,
+ R.string.osd_messages_description));
}
private void addAudioSettings(ArrayList<SettingsItem> sl)
{
+ final int DSP_HLE = 0;
+ final int DSP_LLE_RECOMPILER = 1;
+ final int DSP_LLE_INTERPRETER = 2;
+
+ AbstractIntSetting dspEmulationEngine = new AbstractIntSetting()
+ {
+ @Override
+ public int getInt(Settings settings)
+ {
+ if (BooleanSetting.MAIN_DSP_HLE.getBoolean(settings))
+ {
+ return DSP_HLE;
+ }
+ else
+ {
+ boolean jit = BooleanSetting.MAIN_DSP_JIT.getBoolean(settings);
+ return jit ? DSP_LLE_RECOMPILER : DSP_LLE_INTERPRETER;
+ }
+ }
+
+ @Override
+ public void setInt(Settings settings, int newValue)
+ {
+ switch (newValue)
+ {
+ case DSP_HLE:
+ BooleanSetting.MAIN_DSP_HLE.setBoolean(settings, true);
+ BooleanSetting.MAIN_DSP_JIT.setBoolean(settings, true);
+ break;
+
+ case DSP_LLE_RECOMPILER:
+ BooleanSetting.MAIN_DSP_HLE.setBoolean(settings, false);
+ BooleanSetting.MAIN_DSP_JIT.setBoolean(settings, true);
+ break;
+
+ case DSP_LLE_INTERPRETER:
+ BooleanSetting.MAIN_DSP_HLE.setBoolean(settings, false);
+ BooleanSetting.MAIN_DSP_JIT.setBoolean(settings, false);
+ break;
+ }
+ }
+
+ @Override
+ public boolean isOverridden(Settings settings)
+ {
+ return BooleanSetting.MAIN_DSP_HLE.isOverridden(settings) ||
+ BooleanSetting.MAIN_DSP_JIT.isOverridden(settings);
+ }
+
+ @Override
+ public boolean isRuntimeEditable()
+ {
+ return BooleanSetting.MAIN_DSP_HLE.isRuntimeEditable() &&
+ BooleanSetting.MAIN_DSP_JIT.isRuntimeEditable();
+ }
+
+ @Override
+ public boolean delete(Settings settings)
+ {
+ // Not short circuiting
+ return BooleanSetting.MAIN_DSP_HLE.delete(settings) &
+ BooleanSetting.MAIN_DSP_JIT.delete(settings);
+ }
+ };
+
// TODO: Exclude values from arrays instead of having multiple arrays.
int defaultCpuCore = NativeLibrary.DefaultCPUCore();
int dspEngineEntries;
@@ -262,70 +330,53 @@ 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,
- 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 SingleChoiceSetting(dspEmulationEngine, R.string.dsp_emulation_engine, 0,
+ dspEngineEntries, dspEngineValues));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_AUDIO_STRETCH, R.string.audio_stretch,
+ R.string.audio_stretch_description));
+ sl.add(new IntSliderSetting(IntSetting.MAIN_AUDIO_VOLUME, R.string.audio_volume, 0, 100, "%"));
}
private void addPathsSettings(ArrayList<SettingsItem> 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, "",
- 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(),
- 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(),
- 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(),
- 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,
- 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(),
- MainPresenter.REQUEST_SD_FILE));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_RECURSIVE_ISO_PATHS, R.string.search_subfolders,
+ 0));
+ sl.add(new FilePicker(StringSetting.MAIN_DEFAULT_ISO, R.string.default_ISO, 0,
+ MainPresenter.REQUEST_GAME_FILE, null));
+ sl.add(new FilePicker(StringSetting.MAIN_FS_PATH, R.string.wii_NAND_root, 0,
+ MainPresenter.REQUEST_DIRECTORY, "/Wii"));
+ sl.add(new FilePicker(StringSetting.MAIN_DUMP_PATH, R.string.dump_path, 0,
+ MainPresenter.REQUEST_DIRECTORY, "/Dump"));
+ sl.add(new FilePicker(StringSetting.MAIN_LOAD_PATH, R.string.load_path, 0,
+ MainPresenter.REQUEST_DIRECTORY, "/Load"));
+ sl.add(new FilePicker(StringSetting.MAIN_RESOURCEPACK_PATH, R.string.resource_pack_path, 0,
+ MainPresenter.REQUEST_DIRECTORY, "/ResourcePacks"));
+ sl.add(new FilePicker(StringSetting.MAIN_SD_PATH, R.string.SD_card_path, 0,
+ MainPresenter.REQUEST_SD_FILE, "/Wii/sd.raw"));
sl.add(new ConfirmRunnable(R.string.reset_paths, 0, R.string.reset_paths_confirmation, 0,
mView.getAdapter()::resetPaths));
}
private void addGameCubeSettings(ArrayList<SettingsItem> sl)
{
- sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE,
- SettingsFile.KEY_GAME_CUBE_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(IntSetting.MAIN_GC_LANGUAGE, R.string.gamecube_system_language,
+ 0, R.array.gameCubeSystemLanguageEntries, R.array.gameCubeSystemLanguageValues));
+ sl.add(new SingleChoiceSetting(IntSetting.MAIN_SLOT_A, R.string.slot_a_device, 0,
+ R.array.slotDeviceEntries, R.array.slotDeviceValues));
+ sl.add(new SingleChoiceSetting(IntSetting.MAIN_SLOT_B, R.string.slot_b_device, 0,
+ R.array.slotDeviceEntries, R.array.slotDeviceValues));
}
private void addWiiSettings(ArrayList<SettingsItem> sl)
{
- sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_DOLPHIN, Settings.SECTION_INI_CORE,
- SettingsFile.KEY_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,
- 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,
- R.string.wiimote_speaker_description, false));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_WII_SD_CARD, R.string.insert_sd_card,
+ R.string.insert_sd_card_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_ALLOW_SD_WRITES,
+ R.string.wii_sd_card_allow_writes, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_WIIMOTE_CONTINUOUS_SCANNING,
+ R.string.wiimote_scanning, R.string.wiimote_scanning_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_WIIMOTE_ENABLE_SPEAKER, R.string.wiimote_speaker,
+ R.string.wiimote_speaker_description));
}
private void addAdvancedSettings(ArrayList<SettingsItem> sl)
@@ -351,35 +402,32 @@ 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,
- 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,
- R.string.overclock_title_description, 400, "%", 100));
+ sl.add(new SingleChoiceSetting(IntSetting.MAIN_CPU_CORE, R.string.cpu_core, 0, emuCoresEntries,
+ emuCoresValues));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_OVERCLOCK_ENABLE, R.string.overclock_enable,
+ R.string.overclock_enable_description));
+ sl.add(new PercentSliderSetting(FloatSetting.MAIN_OVERCLOCK, R.string.overclock_title,
+ R.string.overclock_title_description, 400, "%"));
}
private void addGcPadSettings(ArrayList<SettingsItem> sl)
{
for (int i = 0; i < 4; i++)
{
+ LegacyIntSetting 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 LegacyIntSetting(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE,
+ SettingsFile.KEY_GCPAD_TYPE + i, 0);
}
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 LegacyIntSetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME,
+ Settings.SECTION_CONTROLS, SettingsFile.KEY_GCPAD_G_TYPE + i, 0);
}
+ // 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, MenuTag.getGCPadMenuTag(i)));
}
}
@@ -387,104 +435,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.
+ LegacyIntSetting 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 LegacyIntSetting(Settings.FILE_WIIMOTE,
+ Settings.SECTION_WIIMOTE + (i + 1), SettingsFile.KEY_WIIMOTE_TYPE, 0);
}
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 LegacyIntSetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME,
+ Settings.SECTION_CONTROLS, SettingsFile.KEY_WIIMOTE_G_TYPE + i, 0);
}
+ // 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,
+ MenuTag.getWiimoteMenuTag(i + 4)));
}
}
private void addGraphicsSettings(ArrayList<SettingsItem> 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,
- 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 HeaderSetting(R.string.graphics_general, 0));
+ sl.add(new StringSingleChoiceSetting(StringSetting.MAIN_GFX_BACKEND, R.string.video_backend, 0,
+ R.array.videoBackendEntries, R.array.videoBackendValues));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_SHOW_FPS, R.string.show_fps,
+ R.string.show_fps_description));
+ sl.add(new SingleChoiceSettingDynamicDescriptions(IntSetting.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 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));
+ R.array.shaderCompilationDescriptionValues));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_WAIT_FOR_SHADERS_BEFORE_STARTING,
+ R.string.wait_for_shaders, R.string.wait_for_shaders_description));
+ sl.add(new SingleChoiceSetting(IntSetting.GFX_ASPECT_RATIO, R.string.aspect_ratio, 0,
+ R.array.aspectRatioEntries, R.array.aspectRatioValues));
+
+ 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<SettingsItem> 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(IntSetting.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));
-
- int stereoModeValue =
- mSettings.getSection(SettingsFile.FILE_NAME_GFX, Settings.SECTION_STEREOSCOPY)
- .getInt(SettingsFile.KEY_STEREO_MODE, 0);
+ R.array.internalResolutionValues));
+ sl.add(new SingleChoiceSetting(IntSetting.GFX_MSAA, R.string.FSAA, R.string.FSAA_description,
+ R.array.FSAAEntries, R.array.FSAAValues));
+ sl.add(new SingleChoiceSetting(IntSetting.GFX_ENHANCE_MAX_ANISOTROPY,
+ R.string.anisotropic_filtering, R.string.anisotropic_filtering_description,
+ R.array.anisotropicFilteringEntries, R.array.anisotropicFilteringValues));
+
+ int stereoModeValue = IntSetting.GFX_STEREO_MODE.getInt(mSettings);
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,
- 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,
- 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,
- 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,
- true));
- sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_GFX_SETTINGS,
- SettingsFile.KEY_WIDE_SCREEN_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,
- R.string.backend_multithreading_description, false));
+ sl.add(new StringSingleChoiceSetting(StringSetting.GFX_ENHANCE_POST_SHADER,
+ R.string.post_processing_shader, 0, shaderListEntries, shaderListValues));
+
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_HACK_COPY_EFB_SCALED, R.string.scaled_efb_copy,
+ R.string.scaled_efb_copy_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_ENABLE_PIXEL_LIGHTING,
+ R.string.per_pixel_lighting, R.string.per_pixel_lighting_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_ENHANCE_FORCE_FILTERING,
+ R.string.force_texture_filtering, R.string.force_texture_filtering_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_ENHANCE_FORCE_TRUE_COLOR,
+ R.string.force_24bit_color, R.string.force_24bit_color_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_DISABLE_FOG, R.string.disable_fog,
+ R.string.disable_fog_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_ENHANCE_DISABLE_COPY_FILTER,
+ R.string.disable_copy_filter, R.string.disable_copy_filter_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION,
+ R.string.arbitrary_mipmap_detection, R.string.arbitrary_mipmap_detection_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_WIDESCREEN_HACK, R.string.wide_screen_hack,
+ R.string.wide_screen_hack_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_BACKEND_MULTITHREADING,
+ R.string.backend_multithreading, R.string.backend_multithreading_description));
/*
Check if we support stereo
@@ -497,8 +525,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,185 +571,164 @@ public final class SettingsFragmentPresenter
private void addHackSettings(ArrayList<SettingsItem> 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,
- 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,
- 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,
- 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(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,
- 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,
- 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,
- 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,
- R.string.fast_depth_calculation_description, true));
+ sl.add(new HeaderSetting(R.string.embedded_frame_buffer, 0));
+ sl.add(new InvertedCheckBoxSetting(BooleanSetting.GFX_HACK_EFB_ACCESS_ENABLE,
+ R.string.skip_efb_access, R.string.skip_efb_access_description));
+ sl.add(new InvertedCheckBoxSetting(BooleanSetting.GFX_HACK_EFB_EMULATE_FORMAT_CHANGES,
+ R.string.ignore_format_changes, R.string.ignore_format_changes_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_HACK_SKIP_EFB_COPY_TO_RAM,
+ R.string.efb_copy_method, R.string.efb_copy_method_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_HACK_DEFER_EFB_COPIES, R.string.defer_efb_copies,
+ R.string.defer_efb_copies_description));
+
+ sl.add(new HeaderSetting(R.string.texture_cache, 0));
+ sl.add(new SingleChoiceSetting(IntSetting.GFX_SAFE_TEXTURE_CACHE_COLOR_SAMPLES,
+ R.string.texture_cache_accuracy, R.string.texture_cache_accuracy_description,
+ R.array.textureCacheAccuracyEntries, R.array.textureCacheAccuracyValues));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_ENABLE_GPU_TEXTURE_DECODING,
+ R.string.gpu_texture_decoding, R.string.gpu_texture_decoding_description));
+
+ sl.add(new HeaderSetting(R.string.external_frame_buffer, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_HACK_SKIP_XFB_COPY_TO_RAM,
+ R.string.xfb_copy_method, R.string.xfb_copy_method_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_HACK_IMMEDIATE_XFB, R.string.immediate_xfb,
+ R.string.immediate_xfb_description));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_HACK_SKIP_DUPLICATE_XFBS,
+ R.string.skip_duplicate_xfbs, R.string.skip_duplicate_xfbs_description));
+
+ sl.add(new HeaderSetting(R.string.other, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_FAST_DEPTH_CALC, R.string.fast_depth_calculation,
+ R.string.fast_depth_calculation_description));
}
private void addLogConfigurationSettings(ArrayList<SettingsItem> sl)
{
- sl.add(new CheckBoxSetting(SettingsFile.FILE_NAME_LOGGER, Settings.SECTION_LOGGER_OPTIONS,
- SettingsFile.KEY_ENABLE_LOGGING, 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 CheckBoxSetting(BooleanSetting.LOGGER_WRITE_TO_FILE, R.string.enable_logging,
+ R.string.enable_logging_description));
+ sl.add(new SingleChoiceSetting(IntSetting.LOGGER_VERBOSITY, R.string.log_verbosity, 0,
+ getLogVerbosityEntries(), getLogVerbosityValues()));
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<String, String> 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));
}
}
private void addDebugSettings(ArrayList<SettingsItem> sl)
{
- sl.add(new HeaderSetting(null, 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,
- 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,
- false));
+ sl.add(new HeaderSetting(R.string.debug_warning, 0));
+
+ sl.add(new HeaderSetting(R.string.debug_jit_header, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_OFF, R.string.debug_jitoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_LOAD_STORE_OFF,
+ R.string.debug_jitloadstoreoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_LOAD_STORE_FLOATING_OFF,
+ R.string.debug_jitloadstorefloatingoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_LOAD_STORE_PAIRED_OFF,
+ R.string.debug_jitloadstorepairedoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_FLOATING_POINT_OFF,
+ R.string.debug_jitfloatingpointoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_INTEGER_OFF, R.string.debug_jitintegeroff,
+ 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_PAIRED_OFF, R.string.debug_jitpairedoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_SYSTEM_REGISTERS_OFF,
+ R.string.debug_jitsystemregistersoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_BRANCH_OFF, R.string.debug_jitbranchoff, 0));
+ sl.add(new CheckBoxSetting(BooleanSetting.MAIN_JIT_REGISTER_CACHE_OFF,
+ R.string.debug_jitregistercacheoff, 0));
}
private void addStereoSettings(ArrayList<SettingsItem> sl)
{
- sl.add(new SingleChoiceSetting(SettingsFile.FILE_NAME_GFX, Settings.SECTION_STEREOSCOPY,
- SettingsFile.KEY_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,
- 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,
- R.string.stereoscopy_swap_eyes_description, false));
+ sl.add(new SingleChoiceSetting(IntSetting.GFX_STEREO_MODE, R.string.stereoscopy_mode, 0,
+ R.array.stereoscopyEntries, R.array.stereoscopyValues));
+ sl.add(new IntSliderSetting(IntSetting.GFX_STEREO_DEPTH, R.string.stereoscopy_depth,
+ R.string.stereoscopy_depth_description, 100, "%"));
+ sl.add(new IntSliderSetting(IntSetting.GFX_STEREO_CONVERGENCE_PERCENTAGE,
+ R.string.stereoscopy_convergence, R.string.stereoscopy_convergence_description, 200,
+ "%"));
+ sl.add(new CheckBoxSetting(BooleanSetting.GFX_STEREO_SWAP_EYES, R.string.stereoscopy_swap_eyes,
+ R.string.stereoscopy_swap_eyes_description));
}
private void addGcPadSubSettings(ArrayList<SettingsItem> sl, int gcPadNumber, int gcPadType)
{
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,
- 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,
- R.string.gc_adapter_bongos_description, false));
+ LegacyBooleanSetting rumble = new LegacyBooleanSetting(Settings.FILE_DOLPHIN,
+ Settings.SECTION_INI_CORE, SettingsFile.KEY_GCADAPTER_RUMBLE + gcPadNumber, false);
+ LegacyBooleanSetting bongo = new LegacyBooleanSetting(Settings.FILE_DOLPHIN,
+ Settings.SECTION_INI_CORE, SettingsFile.KEY_GCADAPTER_BONGOS + gcPadNumber, false);
+
+ sl.add(new CheckBoxSetting(rumble, R.string.gc_adapter_rumble,
+ R.string.gc_adapter_rumble_description));
+ sl.add(new CheckBoxSetting(bongo, R.string.gc_adapter_bongos,
+ R.string.gc_adapter_bongos_description));
}
}
@@ -732,110 +738,111 @@ 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.
+ LegacyStringSetting extension;
if (mGameID.isEmpty())
{
- sl.add(new StringSingleChoiceSetting(SettingsFile.FILE_NAME_WIIMOTE,
+ extension = new LegacyStringSetting(Settings.FILE_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)));
+ getExtensionValue(wiimoteNumber - 3));
}
else
{
mSettings.loadWiimoteProfile(mGameID, wiimoteNumber - 4);
- sl.add(new StringSingleChoiceSetting(Settings.GAME_SETTINGS_PLACEHOLDER_FILE_NAME,
+ extension = new LegacyStringSetting(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)));
+ getExtensionValue(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,
+ 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 +853,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 +1174,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
@@ -1178,31 +1185,6 @@ public final class SettingsFragmentPresenter
return section.getString(SettingsFile.KEY_WIIMOTE_EXTENSION, "None");
}
- public static String getDefaultNANDRootPath()
- {
- return DirectoryInitialization.getUserDirectory() + "/Wii";
- }
-
- public static String getDefaultDumpPath()
- {
- return DirectoryInitialization.getUserDirectory() + "/Dump";
- }
-
- public static String getDefaultLoadPath()
- {
- return DirectoryInitialization.getUserDirectory() + "/Load";
- }
-
- public static String getDefaultResourcePackPath()
- {
- return DirectoryInitialization.getUserDirectory() + "/ResourcePacks";
- }
-
- public static String getDefaultSDPath()
- {
- return DirectoryInitialization.getUserDirectory() + "/Wii/sd.raw";
- }
-
private static int getLogVerbosityEntries()
{
// Value obtained from LOG_LEVELS in Common/Logging/Log.h
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..07206a04fa 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
{
@@ -58,13 +59,23 @@ public final class CheckBoxSettingViewHolder extends SettingViewHolder
}
mCheckbox.setChecked(mItem.isChecked(getAdapter().getSettings()));
+
+ setStyle(mTextSettingName, mItem);
}
@Override
public void onClick(View clicked)
{
+ if (!mItem.isEditable())
+ {
+ showNotRuntimeEditableError();
+ return;
+ }
+
mCheckbox.toggle();
getAdapter().onBooleanClick(mItem, getAdapterPosition(), mCheckbox.isChecked());
+
+ setStyle(mTextSettingName, mItem);
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/FilePickerViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/FilePickerViewHolder.java
index e887fe4afb..39b17d587a 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/FilePickerViewHolder.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/FilePickerViewHolder.java
@@ -1,5 +1,6 @@
package org.dolphinemu.dolphinemu.features.settings.ui.viewholder;
+import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;
@@ -8,6 +9,7 @@ import org.dolphinemu.dolphinemu.features.settings.model.view.FilePicker;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
+import org.dolphinemu.dolphinemu.utils.DirectoryInitialization;
public final class FilePickerViewHolder extends SettingViewHolder
{
@@ -43,13 +45,32 @@ public final class FilePickerViewHolder extends SettingViewHolder
}
else
{
- mTextSettingDescription.setText(mFilePicker.getSelectedValue(getAdapter().getSettings()));
+ String path = mFilePicker.getSelectedValue(getAdapter().getSettings());
+
+ if (TextUtils.isEmpty(path))
+ {
+ String defaultPathRelative = mFilePicker.getDefaultPathRelativeToUserDirectory();
+ if (defaultPathRelative != null)
+ {
+ path = DirectoryInitialization.getUserDirectory() + defaultPathRelative;
+ }
+ }
+
+ mTextSettingDescription.setText(path);
}
+
+ setStyle(mTextSettingName, mItem);
}
@Override
public void onClick(View clicked)
{
+ if (!mItem.isEditable())
+ {
+ showNotRuntimeEditableError();
+ return;
+ }
+
if (mFilePicker.getRequestType() == MainPresenter.REQUEST_DIRECTORY)
{
getAdapter().onFilePickerDirectoryClick(mItem);
@@ -58,5 +79,7 @@ public final class FilePickerViewHolder extends SettingViewHolder
{
getAdapter().onFilePickerFileClick(mItem);
}
+
+ setStyle(mTextSettingName, mItem);
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java
index 8fcc63d941..7dda7b3630 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java
@@ -44,11 +44,21 @@ public final class InputBindingSettingViewHolder extends SettingViewHolder
mTextSettingName.setText(mItem.getNameId());
mTextSettingDescription
.setText(sharedPreferences.getString(mItem.getKey() + mItem.getGameId(), ""));
+
+ setStyle(mTextSettingName, mItem);
}
@Override
public void onClick(View clicked)
{
+ if (!mItem.isEditable())
+ {
+ showNotRuntimeEditableError();
+ return;
+ }
+
getAdapter().onInputBindingClick(mItem, getAdapterPosition());
+
+ setStyle(mTextSettingName, mItem);
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/RumbleBindingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/RumbleBindingViewHolder.java
index a5b8d9c944..3968e0c078 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/RumbleBindingViewHolder.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/RumbleBindingViewHolder.java
@@ -44,11 +44,21 @@ public class RumbleBindingViewHolder extends SettingViewHolder
mTextSettingName.setText(item.getNameId());
mTextSettingDescription
.setText(sharedPreferences.getString(mItem.getKey() + mItem.getGameId(), ""));
+
+ setStyle(mTextSettingName, mItem);
}
@Override
public void onClick(View clicked)
{
+ if (!mItem.isEditable())
+ {
+ showNotRuntimeEditableError();
+ return;
+ }
+
getAdapter().onInputBindingClick(mItem, getAdapterPosition());
+
+ setStyle(mTextSettingName, mItem);
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SettingViewHolder.java
index 5fc91a6136..c23a3a270b 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SettingViewHolder.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SettingViewHolder.java
@@ -1,9 +1,16 @@
package org.dolphinemu.dolphinemu.features.settings.ui.viewholder;
+
+import android.graphics.Paint;
+import android.graphics.Typeface;
import android.view.View;
+import android.widget.TextView;
+import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;
+import org.dolphinemu.dolphinemu.DolphinApplication;
+import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
@@ -28,6 +35,21 @@ public abstract class SettingViewHolder extends RecyclerView.ViewHolder
return mAdapter;
}
+ protected void setStyle(TextView textView, SettingsItem settingsItem)
+ {
+ boolean overridden = settingsItem.isOverridden(mAdapter.getSettings());
+ textView.setTypeface(null, overridden ? Typeface.BOLD : Typeface.NORMAL);
+
+ if (!settingsItem.isEditable())
+ textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
+ }
+
+ protected static void showNotRuntimeEditableError()
+ {
+ Toast.makeText(DolphinApplication.getAppContext(), R.string.setting_not_runtime_editable,
+ Toast.LENGTH_SHORT).show();
+ }
+
/**
* Gets handles to all this ViewHolder's child views using their XML-defined identifiers.
*
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java
index f0f85a0755..a8f869cba9 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java
@@ -80,11 +80,19 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
}
}
}
+
+ setStyle(mTextSettingName, mItem);
}
@Override
public void onClick(View clicked)
{
+ if (!mItem.isEditable())
+ {
+ showNotRuntimeEditableError();
+ return;
+ }
+
int position = getAdapterPosition();
if (mItem instanceof SingleChoiceSetting)
{
@@ -99,5 +107,7 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
getAdapter().onSingleChoiceDynamicDescriptionsClick(
(SingleChoiceSettingDynamicDescriptions) mItem, position);
}
+
+ setStyle(mTextSettingName, mItem);
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SliderViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SliderViewHolder.java
index ef359edb72..6a7d9a0fa3 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SliderViewHolder.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SliderViewHolder.java
@@ -49,12 +49,22 @@ public final class SliderViewHolder extends SettingViewHolder
.getString(R.string.slider_setting_value,
mItem.getSelectedValue(getAdapter().getSettings()), mItem.getUnits()));
}
+
+ setStyle(mTextSettingName, mItem);
}
@Override
public void onClick(View clicked)
{
+ if (!mItem.isEditable())
+ {
+ showNotRuntimeEditableError();
+ return;
+ }
+
getAdapter().onSliderClick(mItem, getAdapterPosition());
+
+ setStyle(mTextSettingName, mItem);
}
}
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<String, String> 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..f468240c4d 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.BooleanSetting;
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
{
@@ -50,6 +50,9 @@ public final class MenuFragment extends Fragment implements View.OnClickListener
.append(R.id.menu_screen_orientation, EmulationActivity.MENU_ACTION_SCREEN_ORIENTATION);
buttonsActionsMap.append(R.id.menu_change_disc, EmulationActivity.MENU_ACTION_CHANGE_DISC);
buttonsActionsMap.append(R.id.menu_exit, EmulationActivity.MENU_ACTION_EXIT);
+ buttonsActionsMap.append(R.id.menu_settings_core, EmulationActivity.MENU_ACTION_SETTINGS_CORE);
+ buttonsActionsMap.append(R.id.menu_settings_graphics,
+ EmulationActivity.MENU_ACTION_SETTINGS_GRAPHICS);
}
public static MenuFragment newInstance(String title)
@@ -83,18 +86,6 @@ 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)
- {
- options.findViewById(R.id.menu_quicksave).setVisibility(View.VISIBLE);
- options.findViewById(R.id.menu_quickload).setVisibility(View.VISIBLE);
- options.findViewById(R.id.menu_emulation_save_root).setVisibility(View.VISIBLE);
- options.findViewById(R.id.menu_emulation_load_root).setVisibility(View.VISIBLE);
- }
-
PackageManager packageManager = requireActivity().getPackageManager();
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN))
@@ -149,6 +140,22 @@ public final class MenuFragment extends Fragment implements View.OnClickListener
return rootView;
}
+ @Override
+ public void onResume()
+ {
+ super.onResume();
+
+ LinearLayout options = requireView().findViewById(R.id.layout_options);
+
+ Settings settings = ((EmulationActivity) requireActivity()).getSettings();
+ boolean savestatesEnabled = BooleanSetting.MAIN_ENABLE_SAVESTATES.getBoolean(settings);
+ int savestateVisibility = savestatesEnabled ? View.VISIBLE : View.GONE;
+ options.findViewById(R.id.menu_quicksave).setVisibility(savestateVisibility);
+ options.findViewById(R.id.menu_quickload).setVisibility(savestateVisibility);
+ options.findViewById(R.id.menu_emulation_save_root).setVisibility(savestateVisibility);
+ options.findViewById(R.id.menu_emulation_load_root).setVisibility(savestateVisibility);
+ }
+
private void updatePauseUnpauseVisibility()
{
boolean paused = EmulationActivity.getHasUserPausedEmulation();
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..5672553711 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.BooleanSetting;
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,12 @@ 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);
+ boolean recursiveScan;
+ try (Settings settings = new Settings())
+ {
+ settings.loadSettings(null);
+ recursiveScan = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(settings);
+ }
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 f4878168ca..3db1a0c8f4 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
@@ -716,8 +716,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 eeef714b16..a36a5dfe34 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.IntSetting;
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.
@@ -155,7 +152,7 @@ public final class MainActivity extends AppCompatActivity implements MainView
@Override
public void launchSettingsActivity(MenuTag menuTag)
{
- SettingsActivity.launch(this, menuTag, "");
+ SettingsActivity.launch(this, menuTag);
}
@Override
@@ -282,18 +279,23 @@ 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);
+ try (Settings settings = new Settings())
+ {
+ settings.loadSettings(null);
+
+ IntSetting.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));
+ try (Settings settings = new Settings())
+ {
+ settings.loadSettings(null);
+ mViewPager.setCurrentItem(IntSetting.MAIN_LAST_PLATFORM_TAB.getInt(settings));
+ }
showGames();
GameFileCacheService.startLoad(this);
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
index 69087ace1c..4f3146ef05 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
@@ -153,7 +153,7 @@ public final class TvMainActivity extends FragmentActivity implements MainView
@Override
public void launchSettingsActivity(MenuTag menuTag)
{
- SettingsActivity.launch(this, menuTag, "");
+ SettingsActivity.launch(this, menuTag);
}
@Override
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..062f694219 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.BooleanSetting;
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,48 @@ 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 (!BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.getBoolean(settings))
+ {
+ showMessage(context, settings);
+ }
+ else
+ {
+ settings.close();
+ }
+ });
}
- 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)
+ {
+ BooleanSetting.MAIN_ANALYTICS_ENABLED.setBoolean(settings, enabled);
+ BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true);
+
+ // Context is set to null to avoid toasts
+ settings.saveSettings(null, null);
+
+ settings.close();
+ }
+
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())