Merge pull request #11641 from JosJuice/android-remove-old-config

Android: Remove support for the old config system
This commit is contained in:
Mai 2023-03-14 15:48:04 -04:00 committed by GitHub
commit 4281606838
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
69 changed files with 388 additions and 580 deletions

View File

@ -400,7 +400,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
WindowManager.LayoutParams attributes = getWindow().getAttributes(); WindowManager.LayoutParams attributes = getWindow().getAttributes();
attributes.layoutInDisplayCutoutMode = attributes.layoutInDisplayCutoutMode =
BooleanSetting.MAIN_EXPAND_TO_CUTOUT_AREA.getBoolean(mSettings) ? BooleanSetting.MAIN_EXPAND_TO_CUTOUT_AREA.getBoolean() ?
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES : WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES :
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
@ -423,7 +423,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
protected void onStop() protected void onStop()
{ {
super.onStop(); super.onStop();
mSettings.saveSettings(null, null); mSettings.saveSettings(null);
} }
public void onTitleChanged() public void onTitleChanged()
@ -437,7 +437,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
setTitle(NativeLibrary.GetCurrentTitleDescription()); setTitle(NativeLibrary.GetCurrentTitleDescription());
mEmulationFragment.refreshInputOverlay(mSettings); mEmulationFragment.refreshInputOverlay();
} }
@Override @Override
@ -521,7 +521,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
private void updateOrientation() private void updateOrientation()
{ {
setRequestedOrientation(IntSetting.MAIN_EMULATION_ORIENTATION.getInt(mSettings)); setRequestedOrientation(IntSetting.MAIN_EMULATION_ORIENTATION.getInt());
} }
private boolean closeSubmenu() private boolean closeSubmenu()
@ -589,11 +589,11 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
// Populate the switch value for joystick center on touch // Populate the switch value for joystick center on touch
menu.findItem(R.id.menu_emulation_joystick_rel_center) menu.findItem(R.id.menu_emulation_joystick_rel_center)
.setChecked(BooleanSetting.MAIN_JOYSTICK_REL_CENTER.getBoolean(mSettings)); .setChecked(BooleanSetting.MAIN_JOYSTICK_REL_CENTER.getBoolean());
if (wii) if (wii)
{ {
menu.findItem(R.id.menu_emulation_ir_recenter) menu.findItem(R.id.menu_emulation_ir_recenter)
.setChecked(BooleanSetting.MAIN_IR_ALWAYS_RECENTER.getBoolean(mSettings)); .setChecked(BooleanSetting.MAIN_IR_ALWAYS_RECENTER.getBoolean());
} }
popup.setOnMenuItemClickListener(this::onOptionsItemSelected); popup.setOnMenuItemClickListener(this::onOptionsItemSelected);
@ -794,7 +794,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
private void toggleRecenter(boolean state) private void toggleRecenter(boolean state)
{ {
BooleanSetting.MAIN_IR_ALWAYS_RECENTER.setBoolean(mSettings, state); BooleanSetting.MAIN_IR_ALWAYS_RECENTER.setBoolean(mSettings, state);
mEmulationFragment.refreshOverlayPointer(mSettings); mEmulationFragment.refreshOverlayPointer();
} }
private void editControlsPlacement() private void editControlsPlacement()
@ -831,7 +831,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this) MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this)
.setTitle(R.string.emulation_toggle_controls); .setTitle(R.string.emulation_toggle_controls);
int currentController = InputOverlay.getConfiguredControllerType(mSettings); int currentController = InputOverlay.getConfiguredControllerType();
if (currentController == InputOverlay.OVERLAY_GAMECUBE) if (currentController == InputOverlay.OVERLAY_GAMECUBE)
{ {
@ -840,7 +840,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
for (int i = 0; i < gcEnabledButtons.length; i++) for (int i = 0; i < gcEnabledButtons.length; i++)
{ {
gcEnabledButtons[i] = BooleanSetting.valueOf(gcSettingBase + i).getBoolean(mSettings); gcEnabledButtons[i] = BooleanSetting.valueOf(gcSettingBase + i).getBoolean();
} }
builder.setMultiChoiceItems(R.array.gcpadButtons, gcEnabledButtons, builder.setMultiChoiceItems(R.array.gcpadButtons, gcEnabledButtons,
(dialog, indexSelected, isChecked) -> BooleanSetting (dialog, indexSelected, isChecked) -> BooleanSetting
@ -854,7 +854,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
for (int i = 0; i < wiiClassicEnabledButtons.length; i++) for (int i = 0; i < wiiClassicEnabledButtons.length; i++)
{ {
wiiClassicEnabledButtons[i] = wiiClassicEnabledButtons[i] =
BooleanSetting.valueOf(classicSettingBase + i).getBoolean(mSettings); BooleanSetting.valueOf(classicSettingBase + i).getBoolean();
} }
builder.setMultiChoiceItems(R.array.classicButtons, wiiClassicEnabledButtons, builder.setMultiChoiceItems(R.array.classicButtons, wiiClassicEnabledButtons,
(dialog, indexSelected, isChecked) -> BooleanSetting (dialog, indexSelected, isChecked) -> BooleanSetting
@ -868,7 +868,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
for (int i = 0; i < wiiEnabledButtons.length; i++) for (int i = 0; i < wiiEnabledButtons.length; i++)
{ {
wiiEnabledButtons[i] = BooleanSetting.valueOf(wiiSettingBase + i).getBoolean(mSettings); wiiEnabledButtons[i] = BooleanSetting.valueOf(wiiSettingBase + i).getBoolean();
} }
if (currentController == InputOverlay.OVERLAY_WIIMOTE_NUNCHUK) if (currentController == InputOverlay.OVERLAY_WIIMOTE_NUNCHUK)
{ {
@ -887,15 +887,15 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
builder.setNeutralButton(R.string.emulation_toggle_all, builder.setNeutralButton(R.string.emulation_toggle_all,
(dialogInterface, i) -> mEmulationFragment.toggleInputOverlayVisibility(mSettings)) (dialogInterface, i) -> mEmulationFragment.toggleInputOverlayVisibility(mSettings))
.setPositiveButton(R.string.ok, (dialogInterface, i) -> .setPositiveButton(R.string.ok, (dialogInterface, i) ->
mEmulationFragment.refreshInputOverlay(mSettings)) mEmulationFragment.refreshInputOverlay())
.show(); .show();
} }
public void chooseDoubleTapButton() public void chooseDoubleTapButton()
{ {
int currentValue = IntSetting.MAIN_DOUBLE_TAP_BUTTON.getInt(mSettings); int currentValue = IntSetting.MAIN_DOUBLE_TAP_BUTTON.getInt();
int buttonList = InputOverlay.getConfiguredControllerType(mSettings) == int buttonList = InputOverlay.getConfiguredControllerType() ==
InputOverlay.OVERLAY_WIIMOTE_CLASSIC ? R.array.doubleTapWithClassic : R.array.doubleTap; InputOverlay.OVERLAY_WIIMOTE_CLASSIC ? R.array.doubleTapWithClassic : R.array.doubleTap;
int checkedItem = -1; int checkedItem = -1;
@ -914,7 +914,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
(DialogInterface dialog, int which) -> IntSetting.MAIN_DOUBLE_TAP_BUTTON.setInt( (DialogInterface dialog, int which) -> IntSetting.MAIN_DOUBLE_TAP_BUTTON.setInt(
mSettings, InputOverlayPointer.DOUBLE_TAP_OPTIONS.get(which))) mSettings, InputOverlayPointer.DOUBLE_TAP_OPTIONS.get(which)))
.setPositiveButton(R.string.ok, .setPositiveButton(R.string.ok,
(dialogInterface, i) -> mEmulationFragment.initInputPointer(mSettings)) (dialogInterface, i) -> mEmulationFragment.initInputPointer())
.show(); .show();
} }
@ -925,7 +925,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
final Slider scaleSlider = dialogBinding.inputScaleSlider; final Slider scaleSlider = dialogBinding.inputScaleSlider;
final TextView scaleValue = dialogBinding.inputScaleValue; final TextView scaleValue = dialogBinding.inputScaleValue;
scaleSlider.setValueTo(150); scaleSlider.setValueTo(150);
scaleSlider.setValue(IntSetting.MAIN_CONTROL_SCALE.getInt(mSettings)); scaleSlider.setValue(IntSetting.MAIN_CONTROL_SCALE.getInt());
scaleSlider.setStepSize(1); scaleSlider.setStepSize(1);
scaleSlider.addOnChangeListener( scaleSlider.addOnChangeListener(
(slider, progress, fromUser) -> scaleValue.setText(((int) progress + 50) + "%")); (slider, progress, fromUser) -> scaleValue.setText(((int) progress + 50) + "%"));
@ -935,7 +935,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
final Slider sliderOpacity = dialogBinding.inputOpacitySlider; final Slider sliderOpacity = dialogBinding.inputOpacitySlider;
final TextView valueOpacity = dialogBinding.inputOpacityValue; final TextView valueOpacity = dialogBinding.inputOpacityValue;
sliderOpacity.setValueTo(100); sliderOpacity.setValueTo(100);
sliderOpacity.setValue(IntSetting.MAIN_CONTROL_OPACITY.getInt(mSettings)); sliderOpacity.setValue(IntSetting.MAIN_CONTROL_OPACITY.getInt());
sliderOpacity.setStepSize(1); sliderOpacity.setStepSize(1);
sliderOpacity.addOnChangeListener( sliderOpacity.addOnChangeListener(
(slider, progress, fromUser) -> valueOpacity.setText(((int) progress) + "%")); (slider, progress, fromUser) -> valueOpacity.setText(((int) progress) + "%"));
@ -948,13 +948,13 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
{ {
IntSetting.MAIN_CONTROL_SCALE.setInt(mSettings, (int) scaleSlider.getValue()); IntSetting.MAIN_CONTROL_SCALE.setInt(mSettings, (int) scaleSlider.getValue());
IntSetting.MAIN_CONTROL_OPACITY.setInt(mSettings, (int) sliderOpacity.getValue()); IntSetting.MAIN_CONTROL_OPACITY.setInt(mSettings, (int) sliderOpacity.getValue());
mEmulationFragment.refreshInputOverlay(mSettings); mEmulationFragment.refreshInputOverlay();
}) })
.setNeutralButton(R.string.default_values, (dialog, which) -> .setNeutralButton(R.string.default_values, (dialog, which) ->
{ {
IntSetting.MAIN_CONTROL_SCALE.delete(mSettings); IntSetting.MAIN_CONTROL_SCALE.delete(mSettings);
IntSetting.MAIN_CONTROL_OPACITY.delete(mSettings); IntSetting.MAIN_CONTROL_OPACITY.delete(mSettings);
mEmulationFragment.refreshInputOverlay(mSettings); mEmulationFragment.refreshInputOverlay();
}) })
.show(); .show();
} }
@ -962,7 +962,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
private void addControllerIfNotNone(List<CharSequence> entries, List<Integer> values, private void addControllerIfNotNone(List<CharSequence> entries, List<Integer> values,
IntSetting controller, int entry, int value) IntSetting controller, int entry, int value)
{ {
if (controller.getInt(mSettings) != 0) if (controller.getInt() != 0)
{ {
entries.add(getString(entry)); entries.add(getString(entry));
values.add(value); values.add(value);
@ -992,7 +992,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
IntSetting controllerSetting = NativeLibrary.IsEmulatingWii() ? IntSetting controllerSetting = NativeLibrary.IsEmulatingWii() ?
IntSetting.MAIN_OVERLAY_WII_CONTROLLER : IntSetting.MAIN_OVERLAY_GC_CONTROLLER; IntSetting.MAIN_OVERLAY_WII_CONTROLLER : IntSetting.MAIN_OVERLAY_GC_CONTROLLER;
int currentValue = controllerSetting.getInt(mSettings); int currentValue = controllerSetting.getInt();
int checkedItem = -1; int checkedItem = -1;
for (int i = 0; i < values.size(); i++) for (int i = 0; i < values.size(); i++)
@ -1013,7 +1013,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
.setPositiveButton(R.string.ok, (dialogInterface, i) -> .setPositiveButton(R.string.ok, (dialogInterface, i) ->
{ {
editor.apply(); editor.apply();
mEmulationFragment.refreshInputOverlay(mSettings); mEmulationFragment.refreshInputOverlay();
}) })
.setNeutralButton(R.string.emulation_more_controller_settings, .setNeutralButton(R.string.emulation_more_controller_settings,
(dialogInterface, i) -> SettingsActivity.launch(this, MenuTag.SETTINGS)) (dialogInterface, i) -> SettingsActivity.launch(this, MenuTag.SETTINGS))
@ -1025,11 +1025,11 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
new MaterialAlertDialogBuilder(this) new MaterialAlertDialogBuilder(this)
.setTitle(R.string.emulation_ir_mode) .setTitle(R.string.emulation_ir_mode)
.setSingleChoiceItems(R.array.irModeEntries, .setSingleChoiceItems(R.array.irModeEntries,
IntSetting.MAIN_IR_MODE.getInt(mSettings), IntSetting.MAIN_IR_MODE.getInt(),
(dialog, indexSelected) -> (dialog, indexSelected) ->
IntSetting.MAIN_IR_MODE.setInt(mSettings, indexSelected)) IntSetting.MAIN_IR_MODE.setInt(mSettings, indexSelected))
.setPositiveButton(R.string.ok, (dialogInterface, i) -> .setPositiveButton(R.string.ok, (dialogInterface, i) ->
mEmulationFragment.refreshOverlayPointer(mSettings)) mEmulationFragment.refreshOverlayPointer())
.show(); .show();
} }
@ -1065,7 +1065,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
new MaterialAlertDialogBuilder(this) new MaterialAlertDialogBuilder(this)
.setTitle(getString(R.string.emulation_touch_overlay_reset)) .setTitle(getString(R.string.emulation_touch_overlay_reset))
.setPositiveButton(R.string.yes, .setPositiveButton(R.string.yes,
(dialogInterface, i) -> mEmulationFragment.resetInputOverlay(mSettings)) (dialogInterface, i) -> mEmulationFragment.resetInputOverlay())
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.show(); .show();
} }
@ -1160,7 +1160,7 @@ public final class EmulationActivity extends AppCompatActivity implements ThemeP
public void initInputPointer() public void initInputPointer()
{ {
mEmulationFragment.initInputPointer(mSettings); mEmulationFragment.initInputPointer();
} }
@Override @Override

View File

@ -59,7 +59,7 @@ class GameAdapter(private val mActivity: FragmentActivity) : RecyclerView.Adapte
val gameFile = mGameFiles[position] val gameFile = mGameFiles[position]
holder.apply { holder.apply {
if (BooleanSetting.MAIN_SHOW_GAME_TITLES.booleanGlobal) { if (BooleanSetting.MAIN_SHOW_GAME_TITLES.boolean) {
binding.textGameTitle.text = gameFile.title binding.textGameTitle.text = gameFile.title
binding.textGameTitle.visibility = View.VISIBLE binding.textGameTitle.visibility = View.VISIBLE
binding.textGameTitleInner.visibility = View.GONE binding.textGameTitleInner.visibility = View.GONE

View File

@ -92,7 +92,7 @@ public class GamePropertiesDialog extends DialogFragment
{ {
settings.loadSettings(); settings.loadSettings();
StringSetting.MAIN_DEFAULT_ISO.setString(settings, path); StringSetting.MAIN_DEFAULT_ISO.setString(settings, path);
settings.saveSettings(null, getContext()); settings.saveSettings(getContext());
} }
}); });
} }

View File

@ -160,7 +160,7 @@ class CheatsActivity : AppCompatActivity(), PanelSlideListener {
fun loadGameSpecificSettings(): Settings { fun loadGameSpecificSettings(): Settings {
val settings = Settings() val settings = Settings()
settings.loadSettings(null, gameId, revision, isWii) settings.loadSettings(gameId, revision, isWii)
return settings return settings
} }

View File

@ -42,8 +42,8 @@ abstract class SettingDisabledWarningFragment(
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
val activity = requireActivity() as CheatsActivity val activity = requireActivity() as CheatsActivity
activity.loadGameSpecificSettings().use { settings -> activity.loadGameSpecificSettings().use {
val cheatsEnabled = setting.getBoolean(settings) val cheatsEnabled = setting.getBoolean()
requireView().visibility = if (cheatsEnabled) View.GONE else View.VISIBLE requireView().visibility = if (cheatsEnabled) View.GONE else View.VISIBLE
} }
} }

View File

@ -2,6 +2,8 @@
package org.dolphinemu.dolphinemu.features.input.model; package org.dolphinemu.dolphinemu.features.input.model;
import androidx.annotation.NonNull;
import org.dolphinemu.dolphinemu.features.input.model.controlleremu.ControlGroup; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.ControlGroup;
import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.model.Settings;
@ -16,19 +18,19 @@ public class ControlGroupEnabledSetting implements AbstractBooleanSetting
} }
@Override @Override
public boolean getBoolean(Settings settings) public boolean getBoolean()
{ {
return mControlGroup.getEnabled(); return mControlGroup.getEnabled();
} }
@Override @Override
public void setBoolean(Settings settings, boolean newValue) public void setBoolean(@NonNull Settings settings, boolean newValue)
{ {
mControlGroup.setEnabled(newValue); mControlGroup.setEnabled(newValue);
} }
@Override @Override
public boolean isOverridden(Settings settings) public boolean isOverridden()
{ {
return false; return false;
} }
@ -40,7 +42,7 @@ public class ControlGroupEnabledSetting implements AbstractBooleanSetting
} }
@Override @Override
public boolean delete(Settings settings) public boolean delete(@NonNull Settings settings)
{ {
boolean newValue = mControlGroup.getDefaultEnabledValue() != ControlGroup.DEFAULT_ENABLED_NO; boolean newValue = mControlGroup.getDefaultEnabledValue() != ControlGroup.DEFAULT_ENABLED_NO;
mControlGroup.setEnabled(newValue); mControlGroup.setEnabled(newValue);

View File

@ -2,6 +2,8 @@
package org.dolphinemu.dolphinemu.features.input.model; package org.dolphinemu.dolphinemu.features.input.model;
import androidx.annotation.NonNull;
import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting;
import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.model.Settings;
@ -16,19 +18,19 @@ public class InputMappingBooleanSetting implements AbstractBooleanSetting
} }
@Override @Override
public boolean getBoolean(Settings settings) public boolean getBoolean()
{ {
return mNumericSetting.getBooleanValue(); return mNumericSetting.getBooleanValue();
} }
@Override @Override
public void setBoolean(Settings settings, boolean newValue) public void setBoolean(@NonNull Settings settings, boolean newValue)
{ {
mNumericSetting.setBooleanValue(newValue); mNumericSetting.setBooleanValue(newValue);
} }
@Override @Override
public boolean isOverridden(Settings settings) public boolean isOverridden()
{ {
return false; return false;
} }
@ -40,7 +42,7 @@ public class InputMappingBooleanSetting implements AbstractBooleanSetting
} }
@Override @Override
public boolean delete(Settings settings) public boolean delete(@NonNull Settings settings)
{ {
mNumericSetting.setBooleanValue(mNumericSetting.getBooleanDefaultValue()); mNumericSetting.setBooleanValue(mNumericSetting.getBooleanDefaultValue());
return true; return true;

View File

@ -2,6 +2,8 @@
package org.dolphinemu.dolphinemu.features.input.model; package org.dolphinemu.dolphinemu.features.input.model;
import androidx.annotation.NonNull;
import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting;
import org.dolphinemu.dolphinemu.features.settings.model.AbstractFloatSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractFloatSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.model.Settings;
@ -17,19 +19,19 @@ public class InputMappingDoubleSetting implements AbstractFloatSetting
} }
@Override @Override
public float getFloat(Settings settings) public float getFloat()
{ {
return (float) mNumericSetting.getDoubleValue(); return (float) mNumericSetting.getDoubleValue();
} }
@Override @Override
public void setFloat(Settings settings, float newValue) public void setFloat(@NonNull Settings settings, float newValue)
{ {
mNumericSetting.setDoubleValue(newValue); mNumericSetting.setDoubleValue(newValue);
} }
@Override @Override
public boolean isOverridden(Settings settings) public boolean isOverridden()
{ {
return false; return false;
} }
@ -41,7 +43,7 @@ public class InputMappingDoubleSetting implements AbstractFloatSetting
} }
@Override @Override
public boolean delete(Settings settings) public boolean delete(@NonNull Settings settings)
{ {
mNumericSetting.setDoubleValue(mNumericSetting.getDoubleDefaultValue()); mNumericSetting.setDoubleValue(mNumericSetting.getDoubleDefaultValue());
return true; return true;

View File

@ -2,6 +2,8 @@
package org.dolphinemu.dolphinemu.features.input.model; package org.dolphinemu.dolphinemu.features.input.model;
import androidx.annotation.NonNull;
import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting;
import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.model.Settings;
@ -16,19 +18,19 @@ public class InputMappingIntSetting implements AbstractIntSetting
} }
@Override @Override
public int getInt(Settings settings) public int getInt()
{ {
return mNumericSetting.getIntValue(); return mNumericSetting.getIntValue();
} }
@Override @Override
public void setInt(Settings settings, int newValue) public void setInt(@NonNull Settings settings, int newValue)
{ {
mNumericSetting.setIntValue(newValue); mNumericSetting.setIntValue(newValue);
} }
@Override @Override
public boolean isOverridden(Settings settings) public boolean isOverridden()
{ {
return false; return false;
} }
@ -40,7 +42,7 @@ public class InputMappingIntSetting implements AbstractIntSetting
} }
@Override @Override
public boolean delete(Settings settings) public boolean delete(@NonNull Settings settings)
{ {
mNumericSetting.setIntValue(mNumericSetting.getIntDefaultValue()); mNumericSetting.setIntValue(mNumericSetting.getIntDefaultValue());
return true; return true;

View File

@ -24,13 +24,13 @@ public class InputDeviceSetting extends StringSingleChoiceSetting
} }
@Override @Override
public String getSelectedChoice(Settings settings) public String getSelectedChoice()
{ {
return mController.getDefaultDevice(); return mController.getDefaultDevice();
} }
@Override @Override
public String getSelectedValue(Settings settings) public String getSelectedValue()
{ {
return mController.getDefaultDevice(); return mController.getDefaultDevice();
} }

View File

@ -44,7 +44,7 @@ class RiivolutionBootActivity : AppCompatActivity() {
val revision = intent.getIntExtra(ARG_REVISION, -1) val revision = intent.getIntExtra(ARG_REVISION, -1)
val discNumber = intent.getIntExtra(ARG_DISC_NUMBER, -1) val discNumber = intent.getIntExtra(ARG_DISC_NUMBER, -1)
var loadPath = StringSetting.MAIN_LOAD_PATH.stringGlobal var loadPath = StringSetting.MAIN_LOAD_PATH.string
if (loadPath.isEmpty()) loadPath = DirectoryInitialization.getUserDirectory() + "/Load" if (loadPath.isEmpty()) loadPath = DirectoryInitialization.getUserDirectory() + "/Load"
binding.textSdRoot.text = getString(R.string.riivolution_sd_root, "$loadPath/Riivolution") binding.textSdRoot.text = getString(R.string.riivolution_sd_root, "$loadPath/Riivolution")

View File

@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
public interface AbstractBooleanSetting extends AbstractSetting public interface AbstractBooleanSetting extends AbstractSetting
{ {
boolean getBoolean(@NonNull Settings settings); boolean getBoolean();
void setBoolean(@NonNull Settings settings, boolean newValue); void setBoolean(@NonNull Settings settings, boolean newValue);
} }

View File

@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
public interface AbstractFloatSetting extends AbstractSetting public interface AbstractFloatSetting extends AbstractSetting
{ {
float getFloat(@NonNull Settings settings); float getFloat();
void setFloat(@NonNull Settings settings, float newValue); void setFloat(@NonNull Settings settings, float newValue);
} }

View File

@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
public interface AbstractIntSetting extends AbstractSetting public interface AbstractIntSetting extends AbstractSetting
{ {
int getInt(@NonNull Settings settings); int getInt();
void setInt(@NonNull Settings settings, int newValue); void setInt(@NonNull Settings settings, int newValue);
} }

View File

@ -1,37 +0,0 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.features.settings.model;
import androidx.annotation.NonNull;
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(@NonNull Settings settings)
{
return settings.isGameSpecific() && settings.getSection(mFile, mSection).exists(mKey);
}
@Override
public boolean isRuntimeEditable()
{
return false;
}
@Override
public boolean delete(@NonNull Settings settings)
{
return settings.getSection(mFile, mSection).delete(mKey);
}
}

View File

@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
public interface AbstractSetting public interface AbstractSetting
{ {
boolean isOverridden(@NonNull Settings settings); boolean isOverridden();
boolean isRuntimeEditable(); boolean isRuntimeEditable();

View File

@ -7,7 +7,7 @@ import androidx.annotation.NonNull;
public interface AbstractStringSetting extends AbstractSetting public interface AbstractStringSetting extends AbstractSetting
{ {
@NonNull @NonNull
String getString(@NonNull Settings settings); String getString();
void setString(@NonNull Settings settings, @NonNull String newValue); void setString(@NonNull Settings settings, @NonNull String newValue);
} }

View File

@ -25,7 +25,7 @@ public class AdHocBooleanSetting implements AbstractBooleanSetting
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
return NativeConfig.isOverridden(mFile, mSection, mKey); return NativeConfig.isOverridden(mFile, mSection, mKey);
} }
@ -43,7 +43,7 @@ public class AdHocBooleanSetting implements AbstractBooleanSetting
} }
@Override @Override
public boolean getBoolean(@NonNull Settings settings) public boolean getBoolean()
{ {
return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
} }

View File

@ -25,7 +25,7 @@ public class AdHocStringSetting implements AbstractStringSetting
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
return NativeConfig.isOverridden(mFile, mSection, mKey); return NativeConfig.isOverridden(mFile, mSection, mKey);
} }
@ -43,7 +43,7 @@ public class AdHocStringSetting implements AbstractStringSetting
} }
@NonNull @Override @NonNull @Override
public String getString(@NonNull Settings settings) public String getString()
{ {
return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
} }

View File

@ -296,12 +296,9 @@ public enum BooleanSetting implements AbstractBooleanSetting
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.isOverridden(mFile, mSection, mKey);
return settings.getSection(mFile, mSection).exists(mKey);
else
return NativeConfig.isOverridden(mFile, mSection, mKey);
} }
@Override @Override
@ -322,62 +319,41 @@ public enum BooleanSetting implements AbstractBooleanSetting
@Override @Override
public boolean delete(@NonNull Settings settings) public boolean delete(@NonNull Settings settings)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey); throw new UnsupportedOperationException(
} "Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
else
{
return settings.getSection(mFile, mSection).delete(mKey);
} }
return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey);
} }
@Override @Override
public boolean getBoolean(@NonNull Settings settings) public boolean getBoolean()
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
{
return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey,
mDefaultValue);
}
else
{
return settings.getSection(mFile, mSection).getBoolean(mKey, mDefaultValue);
}
} }
@Override @Override
public void setBoolean(@NonNull Settings settings, boolean newValue) public void setBoolean(@NonNull Settings settings, boolean newValue)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
NativeConfig.setBoolean(settings.getWriteLayer(), mFile, mSection, mKey, newValue); throw new UnsupportedOperationException(
} "Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
else
{
settings.getSection(mFile, mSection).setBoolean(mKey, newValue);
} }
NativeConfig.setBoolean(settings.getWriteLayer(), mFile, mSection, mKey, newValue);
} }
public void setBoolean(int layerType, boolean newValue) public void setBoolean(int layer, boolean newValue)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
NativeConfig.setBoolean(layerType, mFile, mSection, mKey, newValue); throw new UnsupportedOperationException(
"Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
} }
else
{
throw new UnsupportedOperationException("The old config system doesn't support layers");
}
}
public boolean getBooleanGlobal()
{
return NativeConfig.getBoolean(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
}
public void setBooleanGlobal(int layer, boolean newValue)
{
NativeConfig.setBoolean(layer, mFile, mSection, mKey, newValue); NativeConfig.setBoolean(layer, mFile, mSection, mKey, newValue);
} }

View File

@ -25,12 +25,9 @@ public enum FloatSetting implements AbstractFloatSetting
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.isOverridden(mFile, mSection, mKey);
return settings.getSection(mFile, mSection).exists(mKey);
else
return NativeConfig.isOverridden(mFile, mSection, mKey);
} }
@Override @Override
@ -42,48 +39,34 @@ public enum FloatSetting implements AbstractFloatSetting
@Override @Override
public boolean delete(@NonNull Settings settings) public boolean delete(@NonNull Settings settings)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey); throw new UnsupportedOperationException(
} "Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
else
{
return settings.getSection(mFile, mSection).delete(mKey);
} }
return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey);
} }
@Override @Override
public float getFloat(@NonNull Settings settings) public float getFloat()
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.getFloat(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
{
return NativeConfig.getFloat(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
}
else
{
return settings.getSection(mFile, mSection).getFloat(mKey, mDefaultValue);
}
} }
@Override @Override
public void setFloat(@NonNull Settings settings, float newValue) public void setFloat(@NonNull Settings settings, float newValue)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
NativeConfig.setFloat(settings.getWriteLayer(), mFile, mSection, mKey, newValue); throw new UnsupportedOperationException(
} "Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
else
{
settings.getSection(mFile, mSection).setFloat(mKey, newValue);
} }
NativeConfig.setFloat(settings.getWriteLayer(), mFile, mSection, mKey, newValue);
} }
public float getFloatGlobal() public void setFloat(int layer, float newValue)
{
return NativeConfig.getFloat(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
}
public void setFloatGlobal(int layer, float newValue)
{ {
NativeConfig.setFloat(layer, mFile, mSection, mKey, newValue); NativeConfig.setFloat(layer, mFile, mSection, mKey, newValue);
} }

View File

@ -121,12 +121,9 @@ public enum IntSetting implements AbstractIntSetting
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.isOverridden(mFile, mSection, mKey);
return settings.getSection(mFile, mSection).exists(mKey);
else
return NativeConfig.isOverridden(mFile, mSection, mKey);
} }
@Override @Override
@ -147,49 +144,41 @@ public enum IntSetting implements AbstractIntSetting
@Override @Override
public boolean delete(@NonNull Settings settings) public boolean delete(@NonNull Settings settings)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey); throw new UnsupportedOperationException(
} "Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
else
{
return settings.getSection(mFile, mSection).delete(mKey);
} }
return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey);
} }
@Override @Override
public int getInt(@NonNull Settings settings) public int getInt()
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.getInt(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
{
return NativeConfig.getInt(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
}
else
{
return settings.getSection(mFile, mSection).getInt(mKey, mDefaultValue);
}
} }
@Override @Override
public void setInt(@NonNull Settings settings, int newValue) public void setInt(@NonNull Settings settings, int newValue)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
NativeConfig.setInt(settings.getWriteLayer(), mFile, mSection, mKey, newValue); throw new UnsupportedOperationException(
} "Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
else
{
settings.getSection(mFile, mSection).setInt(mKey, newValue);
} }
NativeConfig.setInt(settings.getWriteLayer(), mFile, mSection, mKey, newValue);
} }
public int getIntGlobal() public void setInt(int layer, int newValue)
{ {
return NativeConfig.getInt(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue); if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
} {
throw new UnsupportedOperationException(
"Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
}
public void setIntGlobal(int layer, int newValue)
{
NativeConfig.setInt(layer, mFile, mSection, mKey, newValue); NativeConfig.setInt(layer, mFile, mSection, mKey, newValue);
} }

View File

@ -1,28 +0,0 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.features.settings.model;
import androidx.annotation.NonNull;
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;
}
@NonNull @Override
public String getString(@NonNull Settings settings)
{
return settings.getSection(mFile, mSection).getString(mKey, mDefaultValue);
}
@Override
public void setString(@NonNull Settings settings, @NonNull String newValue)
{
settings.getSection(mFile, mSection).setString(mKey, newValue);
}
}

View File

@ -18,10 +18,14 @@ public class NativeConfig
public static native void save(int layer); public static native void save(int layer);
public static native void deleteAllKeys(int layer);
public static native boolean isOverridden(String file, String section, String key); 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 boolean deleteKey(int layer, String file, String section, String key);
public static native boolean exists(int layer, String file, String section, String key);
public static native String getString(int layer, String file, String section, String key, public static native String getString(int layer, String file, String section, String key,
String defaultValue); String defaultValue);

View File

@ -6,8 +6,8 @@ class ScaledIntSetting(
private val scale: Int, private val scale: Int,
private val setting: AbstractIntSetting private val setting: AbstractIntSetting
) : AbstractIntSetting { ) : AbstractIntSetting {
override fun isOverridden(settings: Settings): Boolean { override fun isOverridden(): Boolean {
return setting.isOverridden(settings) return setting.isOverridden()
} }
override fun isRuntimeEditable(): Boolean { override fun isRuntimeEditable(): Boolean {
@ -18,8 +18,8 @@ class ScaledIntSetting(
return setting.delete(settings) return setting.delete(settings)
} }
override fun getInt(settings: Settings): Int { override fun getInt(): Int {
return setting.getInt(settings) / scale return setting.getInt() / scale
} }
override fun setInt(settings: Settings, newValue: Int) { override fun setInt(settings: Settings, newValue: Int) {

View File

@ -9,15 +9,9 @@ import android.widget.Toast;
import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.input.model.MappingCommon; import org.dolphinemu.dolphinemu.features.input.model.MappingCommon;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivityView;
import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile;
import org.dolphinemu.dolphinemu.services.GameFileCacheManager; import org.dolphinemu.dolphinemu.services.GameFileCacheManager;
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization;
import org.dolphinemu.dolphinemu.utils.IniFile;
import java.io.Closeable; import java.io.Closeable;
import java.util.HashMap;
import java.util.Map;
public class Settings implements Closeable public class Settings implements Closeable
{ {
@ -26,6 +20,7 @@ public class Settings implements Closeable
public static final String FILE_GFX = "GFX"; public static final String FILE_GFX = "GFX";
public static final String FILE_LOGGER = "Logger"; public static final String FILE_LOGGER = "Logger";
public static final String FILE_WIIMOTE = "WiimoteNew"; public static final String FILE_WIIMOTE = "WiimoteNew";
public static final String FILE_GAME_SETTINGS_ONLY = "GameSettingsOnly";
public static final String SECTION_INI_ANDROID = "Android"; public static final String SECTION_INI_ANDROID = "Android";
public static final String SECTION_INI_ANDROID_OVERLAY_BUTTONS = "AndroidOverlayButtons"; public static final String SECTION_INI_ANDROID_OVERLAY_BUTTONS = "AndroidOverlayButtons";
@ -51,40 +46,14 @@ public class Settings implements Closeable
public static final String SECTION_ANALYTICS = "Analytics"; public static final String SECTION_ANALYTICS = "Analytics";
public static final String GAME_SETTINGS_PLACEHOLDER_FILE_NAME = "";
private String mGameId; private String mGameId;
private int mRevision; private int mRevision;
private boolean mIsWii; private boolean mIsWii;
private static final String[] configFiles = new String[]{FILE_DOLPHIN, FILE_GFX, FILE_LOGGER, private boolean mSettingsLoaded = false;
FILE_WIIMOTE};
private Map<String, IniFile> mIniFiles = new HashMap<>();
private boolean mLoadedRecursiveIsoPathsValue = false; private boolean mLoadedRecursiveIsoPathsValue = false;
private IniFile getGameSpecificFile()
{
if (!isGameSpecific() || mIniFiles.size() != 1)
throw new IllegalStateException();
return mIniFiles.get(GAME_SETTINGS_PLACEHOLDER_FILE_NAME);
}
public IniFile.Section getSection(String fileName, String sectionName)
{
if (!isGameSpecific())
{
return mIniFiles.get(fileName).getOrCreateSection(sectionName);
}
else
{
return getGameSpecificFile()
.getOrCreateSection(SettingsFile.mapSectionNameFromIni(sectionName));
}
}
public boolean isGameSpecific() public boolean isGameSpecific()
{ {
return !TextUtils.isEmpty(mGameId); return !TextUtils.isEmpty(mGameId);
@ -100,91 +69,56 @@ public class Settings implements Closeable
return isGameSpecific() ? NativeConfig.LAYER_LOCAL_GAME : NativeConfig.LAYER_BASE_OR_CURRENT; return isGameSpecific() ? NativeConfig.LAYER_LOCAL_GAME : NativeConfig.LAYER_BASE_OR_CURRENT;
} }
public boolean isEmpty() public boolean areSettingsLoaded()
{ {
return mIniFiles.isEmpty(); return mSettingsLoaded;
} }
public void loadSettings() public void loadSettings()
{ {
// The value of isWii doesn't matter if we don't have any SettingsActivity // The value of isWii doesn't matter if we don't have any SettingsActivity
loadSettings(null, true); loadSettings(true);
} }
public void loadSettings(SettingsActivityView view, boolean isWii) public void loadSettings(boolean isWii)
{ {
mIsWii = isWii; mIsWii = isWii;
mSettingsLoaded = true;
mIniFiles = new HashMap<>(); if (isGameSpecific())
if (!isGameSpecific())
{
loadDolphinSettings(view);
}
else
{ {
// Loading game INIs while the core is running will mess with the game INIs loaded by the core // Loading game INIs while the core is running will mess with the game INIs loaded by the core
if (NativeLibrary.IsRunning()) if (NativeLibrary.IsRunning())
throw new IllegalStateException("Attempted to load game INI while emulating"); throw new IllegalStateException("Attempted to load game INI while emulating");
NativeConfig.loadGameInis(mGameId, mRevision); NativeConfig.loadGameInis(mGameId, mRevision);
loadCustomGameSettings(mGameId, view);
} }
mLoadedRecursiveIsoPathsValue = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(this); mLoadedRecursiveIsoPathsValue = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean();
} }
private void loadDolphinSettings(SettingsActivityView view) public void loadSettings(String gameId, int revision, boolean isWii)
{
for (String fileName : configFiles)
{
IniFile ini = new IniFile();
SettingsFile.readFile(fileName, ini, view);
mIniFiles.put(fileName, ini);
}
}
private void loadCustomGameSettings(String gameId, SettingsActivityView view)
{
IniFile ini = new IniFile();
SettingsFile.readCustomGameSettings(gameId, ini, view);
mIniFiles.put(GAME_SETTINGS_PLACEHOLDER_FILE_NAME, ini);
}
public void loadSettings(SettingsActivityView view, String gameId, int revision, boolean isWii)
{ {
mGameId = gameId; mGameId = gameId;
mRevision = revision; mRevision = revision;
loadSettings(view, isWii); loadSettings(isWii);
} }
public void saveSettings(SettingsActivityView view, Context context) public void saveSettings(Context context)
{ {
if (!isGameSpecific()) if (!isGameSpecific())
{ {
if (context != null) if (context != null)
Toast.makeText(context, R.string.settings_saved, Toast.LENGTH_SHORT).show(); Toast.makeText(context, R.string.settings_saved, Toast.LENGTH_SHORT).show();
for (Map.Entry<String, IniFile> entry : mIniFiles.entrySet())
{
SettingsFile.saveFile(entry.getKey(), entry.getValue(), view);
}
MappingCommon.save(); MappingCommon.save();
NativeConfig.save(NativeConfig.LAYER_BASE); NativeConfig.save(NativeConfig.LAYER_BASE);
if (!NativeLibrary.IsRunning())
{
// Notify the native code of the changes to legacy settings
NativeLibrary.ReloadConfig();
}
// LogManager does use the new config system, but doesn't pick up on changes automatically
NativeLibrary.ReloadLoggerConfig(); NativeLibrary.ReloadLoggerConfig();
NativeLibrary.UpdateGCAdapterScanThread(); NativeLibrary.UpdateGCAdapterScanThread();
if (mLoadedRecursiveIsoPathsValue != BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean(this)) if (mLoadedRecursiveIsoPathsValue != BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean())
{ {
// Refresh game library // Refresh game library
GameFileCacheManager.startRescan(); GameFileCacheManager.startRescan();
@ -200,18 +134,13 @@ public class Settings implements Closeable
Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show();
} }
SettingsFile.saveCustomGameSettings(mGameId, getGameSpecificFile());
NativeConfig.save(NativeConfig.LAYER_LOCAL_GAME); NativeConfig.save(NativeConfig.LAYER_LOCAL_GAME);
} }
} }
public void clearSettings() public void clearGameSettings()
{ {
for (String fileName : mIniFiles.keySet()) NativeConfig.deleteAllKeys(NativeConfig.LAYER_LOCAL_GAME);
{
mIniFiles.put(fileName, new IniFile());
}
} }
public boolean gameIniContainsJunk() public boolean gameIniContainsJunk()
@ -237,7 +166,8 @@ public class Settings implements Closeable
if (!isGameSpecific()) if (!isGameSpecific())
return false; return false;
return getSection(Settings.FILE_DOLPHIN, SECTION_INI_INTERFACE).exists("ThemeName"); return NativeConfig.exists(NativeConfig.LAYER_LOCAL_GAME, FILE_DOLPHIN, SECTION_INI_INTERFACE,
"ThemeName");
} }
@Override @Override

View File

@ -65,12 +65,9 @@ public enum StringSetting implements AbstractStringSetting
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
if (settings.isGameSpecific() && !NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.isOverridden(mFile, mSection, mKey);
return settings.getSection(mFile, mSection).exists(mKey);
else
return NativeConfig.isOverridden(mFile, mSection, mKey);
} }
@Override @Override
@ -88,49 +85,28 @@ public enum StringSetting implements AbstractStringSetting
@Override @Override
public boolean delete(@NonNull Settings settings) public boolean delete(@NonNull Settings settings)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey);
{
return NativeConfig.deleteKey(settings.getWriteLayer(), mFile, mSection, mKey);
}
else
{
return settings.getSection(mFile, mSection).delete(mKey);
}
} }
@NonNull @Override @NonNull @Override
public String getString(@NonNull Settings settings) public String getString()
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) if (!NativeConfig.isSettingSaveable(mFile, mSection, mKey))
{ {
return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, throw new UnsupportedOperationException(
mDefaultValue); "Unsupported setting: " + mFile + ", " + mSection + ", " + mKey);
}
else
{
return settings.getSection(mFile, mSection).getString(mKey, mDefaultValue);
} }
return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
} }
@Override @Override
public void setString(@NonNull Settings settings, @NonNull String newValue) public void setString(@NonNull Settings settings, @NonNull String newValue)
{ {
if (NativeConfig.isSettingSaveable(mFile, mSection, mKey)) NativeConfig.setString(settings.getWriteLayer(), mFile, mSection, mKey, newValue);
{
NativeConfig.setString(settings.getWriteLayer(), mFile, mSection, mKey, newValue);
}
else
{
settings.getSection(mFile, mSection).setString(mKey, newValue);
}
} }
public String getStringGlobal() public void setString(int layer, String newValue)
{
return NativeConfig.getString(NativeConfig.LAYER_ACTIVE, mFile, mSection, mKey, mDefaultValue);
}
public void setStringGlobal(int layer, String newValue)
{ {
NativeConfig.setString(layer, mFile, mSection, mKey, newValue); NativeConfig.setString(layer, mFile, mSection, mKey, newValue);
} }

View File

@ -25,7 +25,7 @@ class DateTimeChoiceSetting(
setting.setString(settings, selection) setting.setString(settings, selection)
} }
fun getSelectedValue(settings: Settings): String { fun getSelectedValue(): String {
return setting.getString(settings) return setting.getString()
} }
} }

View File

@ -25,9 +25,9 @@ public final class FilePicker extends SettingsItem
mDefaultPathRelativeToUserDirectory = defaultPathRelativeToUserDirectory; mDefaultPathRelativeToUserDirectory = defaultPathRelativeToUserDirectory;
} }
public String getSelectedValue(Settings settings) public String getSelectedValue()
{ {
return mSetting.getString(settings); return mSetting.getString();
} }
public void setSelectedValue(Settings settings, String selection) public void setSelectedValue(Settings settings, String selection)

View File

@ -26,9 +26,9 @@ public class FloatSliderSetting extends SliderSetting
mSetting = setting; mSetting = setting;
} }
public int getSelectedValue(Settings settings) public int getSelectedValue()
{ {
return Math.round(mSetting.getFloat(settings)); return Math.round(mSetting.getFloat());
} }
public void setSelectedValue(Settings settings, float selection) public void setSelectedValue(Settings settings, float selection)

View File

@ -43,9 +43,9 @@ public class InputStringSetting extends SettingsItem
this(context, setting, titleId, descriptionId, choicesId, valuesId, null); this(context, setting, titleId, descriptionId, choicesId, valuesId, null);
} }
public String getSelectedValue(Settings settings) public String getSelectedValue()
{ {
return mSetting.getString(settings); return mSetting.getString();
} }
public MenuTag getMenuTag() public MenuTag getMenuTag()

View File

@ -19,9 +19,9 @@ public final class IntSliderSetting extends SliderSetting
mSetting = setting; mSetting = setting;
} }
public int getSelectedValue(Settings settings) public int getSelectedValue()
{ {
return mSetting.getInt(settings); return mSetting.getInt();
} }
public void setSelectedValue(Settings settings, int selection) public void setSelectedValue(Settings settings, int selection)

View File

@ -17,9 +17,9 @@ public final class InvertedSwitchSetting extends SwitchSetting
} }
@Override @Override
public boolean isChecked(Settings settings) public boolean isChecked()
{ {
return !mSetting.getBoolean(settings); return !mSetting.getBoolean();
} }
@Override @Override

View File

@ -17,9 +17,9 @@ public final class PercentSliderSetting extends FloatSliderSetting
} }
@Override @Override
public int getSelectedValue(Settings settings) public int getSelectedValue()
{ {
return Math.round(mSetting.getFloat(settings) * 100); return Math.round(mSetting.getFloat() * 100);
} }
@Override @Override

View File

@ -75,10 +75,10 @@ public abstract class SettingsItem
protected abstract AbstractSetting getSetting(); protected abstract AbstractSetting getSetting();
public boolean isOverridden(Settings settings) public boolean isOverridden()
{ {
AbstractSetting setting = getSetting(); AbstractSetting setting = getSetting();
return setting != null && setting.isOverridden(settings); return setting != null && setting.isOverridden();
} }
public boolean isEditable() public boolean isEditable()

View File

@ -43,9 +43,9 @@ public final class SingleChoiceSetting extends SettingsItem
return mValuesId; return mValuesId;
} }
public int getSelectedValue(Settings settings) public int getSelectedValue()
{ {
return mSetting.getInt(settings); return mSetting.getInt();
} }
public MenuTag getMenuTag() public MenuTag getMenuTag()

View File

@ -60,9 +60,9 @@ public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem
return mDescriptionValuesId; return mDescriptionValuesId;
} }
public int getSelectedValue(Settings settings) public int getSelectedValue()
{ {
return mSetting.getInt(settings); return mSetting.getInt();
} }
public MenuTag getMenuTag() public MenuTag getMenuTag()

View File

@ -31,7 +31,7 @@ public abstract class SliderSetting extends SettingsItem
mUnits = units; mUnits = units;
} }
public abstract int getSelectedValue(Settings settings); public abstract int getSelectedValue();
public int getMin() public int getMin()
{ {

View File

@ -94,19 +94,19 @@ public class StringSingleChoiceSetting extends SettingsItem
return ""; return "";
} }
public String getSelectedChoice(Settings settings) public String getSelectedChoice()
{ {
return getChoiceAt(getSelectedValueIndex(settings)); return getChoiceAt(getSelectedValueIndex());
} }
public String getSelectedValue(Settings settings) public String getSelectedValue()
{ {
return mSetting.getString(settings); return mSetting.getString();
} }
public int getSelectedValueIndex(Settings settings) public int getSelectedValueIndex()
{ {
String selectedValue = getSelectedValue(settings); String selectedValue = getSelectedValue();
for (int i = 0; i < mValues.length; i++) for (int i = 0; i < mValues.length; i++)
{ {
if (mValues[i].equals(selectedValue)) if (mValues[i].equals(selectedValue))

View File

@ -26,9 +26,9 @@ public class SwitchSetting extends SettingsItem
mSetting = setting; mSetting = setting;
} }
public boolean isChecked(Settings settings) public boolean isChecked()
{ {
return mSetting.getBoolean(settings); return mSetting.getBoolean();
} }
public void setChecked(Settings settings, boolean checked) public void setChecked(Settings settings, boolean checked)

View File

@ -276,7 +276,7 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
new MaterialAlertDialogBuilder(this) new MaterialAlertDialogBuilder(this)
.setTitle(getString(R.string.game_ini_junk_title)) .setTitle(getString(R.string.game_ini_junk_title))
.setMessage(getString(R.string.game_ini_junk_question)) .setMessage(getString(R.string.game_ini_junk_question))
.setPositiveButton(R.string.yes, (dialogInterface, i) -> mPresenter.clearSettings()) .setPositiveButton(R.string.yes, (dialogInterface, i) -> mPresenter.clearGameSettings())
.setNegativeButton(R.string.no, null) .setNegativeButton(R.string.no, null)
.show(); .show();
} }

View File

@ -66,11 +66,11 @@ public final class SettingsActivityPresenter
{ {
mView.hideLoading(); mView.hideLoading();
if (mSettings.isEmpty()) if (!mSettings.areSettingsLoaded())
{ {
if (!TextUtils.isEmpty(mGameId)) if (!TextUtils.isEmpty(mGameId))
{ {
mSettings.loadSettings(mView, mGameId, mRevision, mIsWii); mSettings.loadSettings(mGameId, mRevision, mIsWii);
if (mSettings.gameIniContainsJunk()) if (mSettings.gameIniContainsJunk())
{ {
@ -79,7 +79,7 @@ public final class SettingsActivityPresenter
} }
else else
{ {
mSettings.loadSettings(mView, mIsWii); mSettings.loadSettings(mIsWii);
} }
} }
@ -99,9 +99,9 @@ public final class SettingsActivityPresenter
return mSettings; return mSettings;
} }
public void clearSettings() public void clearGameSettings()
{ {
mSettings.clearSettings(); mSettings.clearGameSettings();
onSettingChanged(); onSettingChanged();
} }
@ -110,7 +110,7 @@ public final class SettingsActivityPresenter
if (mSettings != null && finishing && mShouldSave) if (mSettings != null && finishing && mShouldSave)
{ {
Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI..."); Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI...");
mSettings.saveSettings(mView, mActivity); mSettings.saveSettings(mActivity);
} }
} }

View File

@ -217,7 +217,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
DialogInputStringBinding binding = DialogInputStringBinding.inflate(inflater); DialogInputStringBinding binding = DialogInputStringBinding.inflate(inflater);
TextInputEditText input = binding.input; TextInputEditText input = binding.input;
input.setText(item.getSelectedValue(getSettings())); input.setText(item.getSelectedValue());
mDialog = new MaterialAlertDialogBuilder(mView.getActivity()) mDialog = new MaterialAlertDialogBuilder(mView.getActivity())
.setView(binding.getRoot()) .setView(binding.getRoot())
@ -226,7 +226,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{ {
String editTextInput = input.getText().toString(); String editTextInput = input.getText().toString();
if (!item.getSelectedValue(mView.getSettings()).equals(editTextInput)) if (!item.getSelectedValue().equals(editTextInput))
{ {
notifyItemChanged(position); notifyItemChanged(position);
mView.onSettingChanged(); mView.onSettingChanged();
@ -272,7 +272,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{ {
mDialog = new MaterialAlertDialogBuilder(mView.getActivity()) mDialog = new MaterialAlertDialogBuilder(mView.getActivity())
.setTitle(item.getName()) .setTitle(item.getName())
.setSingleChoiceItems(item.getChoices(), item.getSelectedValueIndex(getSettings()), .setSingleChoiceItems(item.getChoices(), item.getSelectedValueIndex(),
this) this)
.show(); .show();
} }
@ -296,7 +296,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{ {
mClickedItem = item; mClickedItem = item;
mClickedPosition = position; mClickedPosition = position;
mSeekbarProgress = item.getSelectedValue(getSettings()); mSeekbarProgress = item.getSelectedValue();
LayoutInflater inflater = LayoutInflater.from(mView.getActivity()); LayoutInflater inflater = LayoutInflater.from(mView.getActivity());
DialogSliderBinding binding = DialogSliderBinding.inflate(inflater); DialogSliderBinding binding = DialogSliderBinding.inflate(inflater);
@ -430,8 +430,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{ {
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, filePicker.getSelectedValue());
filePicker.getSelectedValue(mView.getSettings()));
} }
mView.getActivity().startActivityForResult(intent, filePicker.getRequestType()); mView.getActivity().startActivityForResult(intent, filePicker.getRequestType());
@ -441,7 +440,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{ {
mClickedItem = item; mClickedItem = item;
mClickedPosition = position; mClickedPosition = position;
long storedTime = Long.decode(item.getSelectedValue(mView.getSettings())) * 1000; long storedTime = Long.decode(item.getSelectedValue()) * 1000;
// Helper to extract hour and minute from epoch time // Helper to extract hour and minute from epoch time
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
@ -481,7 +480,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
epochTime += (long) timePicker.getHour() * 60 * 60; epochTime += (long) timePicker.getHour() * 60 * 60;
epochTime += (long) timePicker.getMinute() * 60; epochTime += (long) timePicker.getMinute() * 60;
String rtcString = "0x" + Long.toHexString(epochTime); String rtcString = "0x" + Long.toHexString(epochTime);
if (!item.getSelectedValue(mView.getSettings()).equals(rtcString)) if (!item.getSelectedValue().equals(rtcString))
{ {
notifyItemChanged(mClickedPosition); notifyItemChanged(mClickedPosition);
mView.onSettingChanged(); mView.onSettingChanged();
@ -498,7 +497,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{ {
FilePicker filePicker = (FilePicker) mClickedItem; FilePicker filePicker = (FilePicker) mClickedItem;
if (!filePicker.getSelectedValue(mView.getSettings()).equals(selectedFile)) if (!filePicker.getSelectedValue().equals(selectedFile))
{ {
notifyItemChanged(mClickedPosition); notifyItemChanged(mClickedPosition);
mView.onSettingChanged(); mView.onSettingChanged();
@ -543,7 +542,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem; SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem;
int value = getValueForSingleChoiceSelection(scSetting, which); int value = getValueForSingleChoiceSelection(scSetting, which);
if (scSetting.getSelectedValue(getSettings()) != value) if (scSetting.getSelectedValue() != value)
mView.onSettingChanged(); mView.onSettingChanged();
scSetting.setSelectedValue(getSettings(), value); scSetting.setSelectedValue(getSettings(), value);
@ -556,7 +555,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
(SingleChoiceSettingDynamicDescriptions) mClickedItem; (SingleChoiceSettingDynamicDescriptions) mClickedItem;
int value = getValueForSingleChoiceDynamicDescriptionsSelection(scSetting, which); int value = getValueForSingleChoiceDynamicDescriptionsSelection(scSetting, which);
if (scSetting.getSelectedValue(getSettings()) != value) if (scSetting.getSelectedValue() != value)
mView.onSettingChanged(); mView.onSettingChanged();
scSetting.setSelectedValue(getSettings(), value); scSetting.setSelectedValue(getSettings(), value);
@ -567,7 +566,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{ {
StringSingleChoiceSetting scSetting = (StringSingleChoiceSetting) mClickedItem; StringSingleChoiceSetting scSetting = (StringSingleChoiceSetting) mClickedItem;
String value = scSetting.getValueAt(which); String value = scSetting.getValueAt(which);
if (!scSetting.getSelectedValue(getSettings()).equals(value)) if (!scSetting.getSelectedValue().equals(value))
mView.onSettingChanged(); mView.onSettingChanged();
scSetting.setSelectedValue(getSettings(), value); scSetting.setSelectedValue(getSettings(), value);
@ -577,7 +576,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
else if (mClickedItem instanceof IntSliderSetting) else if (mClickedItem instanceof IntSliderSetting)
{ {
IntSliderSetting sliderSetting = (IntSliderSetting) mClickedItem; IntSliderSetting sliderSetting = (IntSliderSetting) mClickedItem;
if (sliderSetting.getSelectedValue(getSettings()) != mSeekbarProgress) if (sliderSetting.getSelectedValue() != mSeekbarProgress)
mView.onSettingChanged(); mView.onSettingChanged();
sliderSetting.setSelectedValue(getSettings(), mSeekbarProgress); sliderSetting.setSelectedValue(getSettings(), mSeekbarProgress);
@ -587,7 +586,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
else if (mClickedItem instanceof FloatSliderSetting) else if (mClickedItem instanceof FloatSliderSetting)
{ {
FloatSliderSetting sliderSetting = (FloatSliderSetting) mClickedItem; FloatSliderSetting sliderSetting = (FloatSliderSetting) mClickedItem;
if (sliderSetting.getSelectedValue(getSettings()) != mSeekbarProgress) if (sliderSetting.getSelectedValue() != mSeekbarProgress)
mView.onSettingChanged(); mView.onSettingChanged();
sliderSetting.setSelectedValue(getSettings(), mSeekbarProgress); sliderSetting.setSelectedValue(getSettings(), mSeekbarProgress);
@ -637,7 +636,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
private int getSelectionForSingleChoiceValue(SingleChoiceSetting item) private int getSelectionForSingleChoiceValue(SingleChoiceSetting item)
{ {
int value = item.getSelectedValue(getSettings()); int value = item.getSelectedValue();
int valuesId = item.getValuesId(); int valuesId = item.getValuesId();
if (valuesId > 0) if (valuesId > 0)
@ -679,7 +678,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
private int getSelectionForSingleChoiceDynamicDescriptionsValue( private int getSelectionForSingleChoiceDynamicDescriptionsValue(
SingleChoiceSettingDynamicDescriptions item) SingleChoiceSettingDynamicDescriptions item)
{ {
int value = item.getSelectedValue(getSettings()); int value = item.getSelectedValue();
int valuesId = item.getValuesId(); int valuesId = item.getValuesId();
if (valuesId > 0) if (valuesId > 0)

View File

@ -29,10 +29,10 @@ import org.dolphinemu.dolphinemu.features.input.ui.ProfileDialogPresenter;
import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting;
import org.dolphinemu.dolphinemu.features.settings.model.AdHocBooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.AdHocBooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.AdHocStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.FloatSetting; import org.dolphinemu.dolphinemu.features.settings.model.FloatSetting;
import org.dolphinemu.dolphinemu.features.settings.model.IntSetting; import org.dolphinemu.dolphinemu.features.settings.model.IntSetting;
import org.dolphinemu.dolphinemu.features.settings.model.LegacyStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.PostProcessing; import org.dolphinemu.dolphinemu.features.settings.model.PostProcessing;
import org.dolphinemu.dolphinemu.features.settings.model.ScaledIntSetting; import org.dolphinemu.dolphinemu.features.settings.model.ScaledIntSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings; import org.dolphinemu.dolphinemu.features.settings.model.Settings;
@ -368,9 +368,9 @@ public final class SettingsFragmentPresenter
AbstractIntSetting appTheme = new AbstractIntSetting() AbstractIntSetting appTheme = new AbstractIntSetting()
{ {
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
return IntSetting.MAIN_INTERFACE_THEME.isOverridden(settings); return IntSetting.MAIN_INTERFACE_THEME.isOverridden();
} }
@Override @Override
@ -388,9 +388,9 @@ public final class SettingsFragmentPresenter
} }
@Override @Override
public int getInt(@NonNull Settings settings) public int getInt()
{ {
return IntSetting.MAIN_INTERFACE_THEME.getInt(settings); return IntSetting.MAIN_INTERFACE_THEME.getInt();
} }
@Override @Override
@ -416,9 +416,9 @@ public final class SettingsFragmentPresenter
AbstractIntSetting themeMode = new AbstractIntSetting() AbstractIntSetting themeMode = new AbstractIntSetting()
{ {
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
return IntSetting.MAIN_INTERFACE_THEME_MODE.isOverridden(settings); return IntSetting.MAIN_INTERFACE_THEME_MODE.isOverridden();
} }
@Override @Override
@ -436,9 +436,9 @@ public final class SettingsFragmentPresenter
} }
@Override @Override
public int getInt(@NonNull Settings settings) public int getInt()
{ {
return IntSetting.MAIN_INTERFACE_THEME_MODE.getInt(settings); return IntSetting.MAIN_INTERFACE_THEME_MODE.getInt();
} }
@Override @Override
@ -455,9 +455,9 @@ public final class SettingsFragmentPresenter
AbstractBooleanSetting blackBackgrounds = new AbstractBooleanSetting() AbstractBooleanSetting blackBackgrounds = new AbstractBooleanSetting()
{ {
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
return BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.isOverridden(settings); return BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.isOverridden();
} }
@Override @Override
@ -474,9 +474,9 @@ public final class SettingsFragmentPresenter
} }
@Override @Override
public boolean getBoolean(@NonNull Settings settings) public boolean getBoolean()
{ {
return BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.getBoolean(settings); return BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.getBoolean();
} }
@Override @Override
@ -500,15 +500,15 @@ public final class SettingsFragmentPresenter
AbstractIntSetting dspEmulationEngine = new AbstractIntSetting() AbstractIntSetting dspEmulationEngine = new AbstractIntSetting()
{ {
@Override @Override
public int getInt(@NonNull Settings settings) public int getInt()
{ {
if (BooleanSetting.MAIN_DSP_HLE.getBoolean(settings)) if (BooleanSetting.MAIN_DSP_HLE.getBoolean())
{ {
return DSP_HLE; return DSP_HLE;
} }
else else
{ {
boolean jit = BooleanSetting.MAIN_DSP_JIT.getBoolean(settings); boolean jit = BooleanSetting.MAIN_DSP_JIT.getBoolean();
return jit ? DSP_LLE_RECOMPILER : DSP_LLE_INTERPRETER; return jit ? DSP_LLE_RECOMPILER : DSP_LLE_INTERPRETER;
} }
} }
@ -536,10 +536,10 @@ public final class SettingsFragmentPresenter
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
return BooleanSetting.MAIN_DSP_HLE.isOverridden(settings) || return BooleanSetting.MAIN_DSP_HLE.isOverridden() ||
BooleanSetting.MAIN_DSP_JIT.isOverridden(settings); BooleanSetting.MAIN_DSP_JIT.isOverridden();
} }
@Override @Override
@ -681,15 +681,15 @@ public final class SettingsFragmentPresenter
AbstractIntSetting synchronizeGpuThread = new AbstractIntSetting() AbstractIntSetting synchronizeGpuThread = new AbstractIntSetting()
{ {
@Override @Override
public int getInt(@NonNull Settings settings) public int getInt()
{ {
if (BooleanSetting.MAIN_SYNC_GPU.getBoolean(settings)) if (BooleanSetting.MAIN_SYNC_GPU.getBoolean())
{ {
return SYNC_GPU_ALWAYS; return SYNC_GPU_ALWAYS;
} }
else else
{ {
boolean syncOnSkipIdle = BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.getBoolean(settings); boolean syncOnSkipIdle = BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.getBoolean();
return syncOnSkipIdle ? SYNC_GPU_ON_IDLE_SKIP : SYNC_GPU_NEVER; return syncOnSkipIdle ? SYNC_GPU_ON_IDLE_SKIP : SYNC_GPU_NEVER;
} }
} }
@ -717,10 +717,10 @@ public final class SettingsFragmentPresenter
} }
@Override @Override
public boolean isOverridden(@NonNull Settings settings) public boolean isOverridden()
{ {
return BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.isOverridden(settings) || return BooleanSetting.MAIN_SYNC_ON_SKIP_IDLE.isOverridden() ||
BooleanSetting.MAIN_SYNC_GPU.isOverridden(settings); BooleanSetting.MAIN_SYNC_GPU.isOverridden();
} }
@Override @Override
@ -879,7 +879,7 @@ public final class SettingsFragmentPresenter
R.string.texture_filtering, R.string.texture_filtering_description, R.string.texture_filtering, R.string.texture_filtering_description,
R.array.textureFilteringEntries, R.array.textureFilteringValues)); R.array.textureFilteringEntries, R.array.textureFilteringValues));
int stereoModeValue = IntSetting.GFX_STEREO_MODE.getInt(mSettings); int stereoModeValue = IntSetting.GFX_STEREO_MODE.getInt();
final int anaglyphMode = 3; final int anaglyphMode = 3;
String[] shaderList = stereoModeValue == anaglyphMode ? String[] shaderList = stereoModeValue == anaglyphMode ?
PostProcessing.getAnaglyphShaderList() : PostProcessing.getShaderList(); PostProcessing.getAnaglyphShaderList() : PostProcessing.getShaderList();
@ -1198,7 +1198,7 @@ public final class SettingsFragmentPresenter
String[] profiles = new ProfileDialogPresenter(mMenuTag).getProfileNames(false); String[] profiles = new ProfileDialogPresenter(mMenuTag).getProfileNames(false);
String profileKey = profileString + "Profile" + (controllerNumber + 1); String profileKey = profileString + "Profile" + (controllerNumber + 1);
sl.add(new StringSingleChoiceSetting(mContext, sl.add(new StringSingleChoiceSetting(mContext,
new LegacyStringSetting("", "Controls", profileKey, ""), new AdHocStringSetting(Settings.FILE_GAME_SETTINGS_ONLY, "Controls", profileKey, ""),
R.string.input_profile, 0, profiles, profiles, R.string.input_profiles_empty)); R.string.input_profile, 0, profiles, profiles, R.string.input_profiles_empty));
} }
@ -1216,7 +1216,7 @@ public final class SettingsFragmentPresenter
sl.add(new SwitchSetting(mContext, new AbstractBooleanSetting() sl.add(new SwitchSetting(mContext, new AbstractBooleanSetting()
{ {
@Override @Override
public boolean isOverridden(Settings settings) public boolean isOverridden()
{ {
return false; return false;
} }
@ -1228,20 +1228,20 @@ public final class SettingsFragmentPresenter
} }
@Override @Override
public boolean delete(Settings settings) public boolean delete(@NonNull Settings settings)
{ {
mView.setMappingAllDevices(false); mView.setMappingAllDevices(false);
return true; return true;
} }
@Override @Override
public boolean getBoolean(Settings settings) public boolean getBoolean()
{ {
return mView.isMappingAllDevices(); return mView.isMappingAllDevices();
} }
@Override @Override
public void setBoolean(Settings settings, boolean newValue) public void setBoolean(@NonNull Settings settings, boolean newValue)
{ {
mView.setMappingAllDevices(newValue); mView.setMappingAllDevices(newValue);
} }

View File

@ -22,7 +22,7 @@ class DateTimeSettingViewHolder(
override fun bind(item: SettingsItem) { override fun bind(item: SettingsItem) {
mItem = item as DateTimeChoiceSetting mItem = item as DateTimeChoiceSetting
val inputTime = mItem!!.getSelectedValue(adapter.settings) val inputTime = mItem!!.getSelectedValue()
binding.textSettingName.text = item.getName() binding.textSettingName.text = item.getName()
if (!TextUtils.isEmpty(inputTime)) { if (!TextUtils.isEmpty(inputTime)) {

View File

@ -35,7 +35,7 @@ public final class FilePickerViewHolder extends SettingViewHolder
mFilePicker = (FilePicker) item; mFilePicker = (FilePicker) item;
mItem = item; mItem = item;
String path = mFilePicker.getSelectedValue(getAdapter().getSettings()); String path = mFilePicker.getSelectedValue();
if (FileBrowserHelper.isPathEmptyOrValid(path)) if (FileBrowserHelper.isPathEmptyOrValid(path))
{ {

View File

@ -31,7 +31,7 @@ public final class InputStringSettingViewHolder extends SettingViewHolder
{ {
mInputString = (InputStringSetting) item; mInputString = (InputStringSetting) item;
String inputString = mInputString.getSelectedValue(getAdapter().getSettings()); String inputString = mInputString.getSelectedValue();
mBinding.textSettingName.setText(item.getName()); mBinding.textSettingName.setText(item.getName());

View File

@ -41,7 +41,7 @@ public abstract class SettingViewHolder extends RecyclerView.ViewHolder
protected void setStyle(TextView textView, SettingsItem settingsItem) protected void setStyle(TextView textView, SettingsItem settingsItem)
{ {
boolean overridden = settingsItem.isOverridden(mAdapter.getSettings()); boolean overridden = settingsItem.isOverridden();
textView.setTypeface(null, overridden ? Typeface.BOLD : Typeface.NORMAL); textView.setTypeface(null, overridden ? Typeface.BOLD : Typeface.NORMAL);
if (!settingsItem.isEditable()) if (!settingsItem.isEditable())

View File

@ -18,7 +18,7 @@ import org.dolphinemu.dolphinemu.features.settings.model.view.StringSingleChoice
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
import java.util.function.Function; import java.util.function.Supplier;
public final class SingleChoiceViewHolder extends SettingViewHolder public final class SingleChoiceViewHolder extends SettingViewHolder
{ {
@ -39,9 +39,6 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
mBinding.textSettingName.setText(item.getName()); mBinding.textSettingName.setText(item.getName());
SettingsAdapter adapter = getAdapter();
Settings settings = adapter.getSettings();
if (!TextUtils.isEmpty(item.getDescription())) if (!TextUtils.isEmpty(item.getDescription()))
{ {
mBinding.textSettingDescription.setText(item.getDescription()); mBinding.textSettingDescription.setText(item.getDescription());
@ -49,7 +46,7 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
else if (item instanceof SingleChoiceSetting) else if (item instanceof SingleChoiceSetting)
{ {
SingleChoiceSetting setting = (SingleChoiceSetting) item; SingleChoiceSetting setting = (SingleChoiceSetting) item;
int selected = setting.getSelectedValue(settings); int selected = setting.getSelectedValue();
Resources resMgr = mBinding.textSettingDescription.getContext().getResources(); Resources resMgr = mBinding.textSettingDescription.getContext().getResources();
String[] choices = resMgr.getStringArray(setting.getChoicesId()); String[] choices = resMgr.getStringArray(setting.getChoicesId());
int[] values = resMgr.getIntArray(setting.getValuesId()); int[] values = resMgr.getIntArray(setting.getValuesId());
@ -64,14 +61,14 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
else if (item instanceof StringSingleChoiceSetting) else if (item instanceof StringSingleChoiceSetting)
{ {
StringSingleChoiceSetting setting = (StringSingleChoiceSetting) item; StringSingleChoiceSetting setting = (StringSingleChoiceSetting) item;
String choice = setting.getSelectedChoice(settings); String choice = setting.getSelectedChoice();
mBinding.textSettingDescription.setText(choice); mBinding.textSettingDescription.setText(choice);
} }
else if (item instanceof SingleChoiceSettingDynamicDescriptions) else if (item instanceof SingleChoiceSettingDynamicDescriptions)
{ {
SingleChoiceSettingDynamicDescriptions setting = SingleChoiceSettingDynamicDescriptions setting =
(SingleChoiceSettingDynamicDescriptions) item; (SingleChoiceSettingDynamicDescriptions) item;
int selected = setting.getSelectedValue(settings); int selected = setting.getSelectedValue();
Resources resMgr = mBinding.textSettingDescription.getContext().getResources(); Resources resMgr = mBinding.textSettingDescription.getContext().getResources();
String[] choices = resMgr.getStringArray(setting.getDescriptionChoicesId()); String[] choices = resMgr.getStringArray(setting.getDescriptionChoicesId());
int[] values = resMgr.getIntArray(setting.getDescriptionValuesId()); int[] values = resMgr.getIntArray(setting.getDescriptionValuesId());
@ -85,7 +82,7 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
} }
MenuTag menuTag = null; MenuTag menuTag = null;
Function<Settings, Integer> getSelectedValue = null; Supplier<Integer> getSelectedValue = null;
if (item instanceof SingleChoiceSetting) if (item instanceof SingleChoiceSetting)
{ {
SingleChoiceSetting setting = (SingleChoiceSetting) item; SingleChoiceSetting setting = (SingleChoiceSetting) item;
@ -99,15 +96,14 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
getSelectedValue = setting::getSelectedValueIndex; getSelectedValue = setting::getSelectedValueIndex;
} }
if (menuTag != null && if (menuTag != null && getAdapter().hasMenuTagActionForValue(menuTag, getSelectedValue.get()))
adapter.hasMenuTagActionForValue(menuTag, getSelectedValue.apply(settings)))
{ {
mBinding.buttonMoreSettings.setVisibility(View.VISIBLE); mBinding.buttonMoreSettings.setVisibility(View.VISIBLE);
final MenuTag finalMenuTag = menuTag; final MenuTag finalMenuTag = menuTag;
final Function<Settings, Integer> finalGetSelectedValue = getSelectedValue; final Supplier<Integer> finalGetSelectedValue = getSelectedValue;
mBinding.buttonMoreSettings.setOnClickListener((view) -> mBinding.buttonMoreSettings.setOnClickListener((view) ->
adapter.onMenuTagAction(finalMenuTag, finalGetSelectedValue.apply(settings))); getAdapter().onMenuTagAction(finalMenuTag, finalGetSelectedValue.get()));
} }
else else
{ {

View File

@ -44,9 +44,8 @@ public final class SliderViewHolder extends SettingViewHolder
} }
else else
{ {
mBinding.textSettingDescription.setText(mContext mBinding.textSettingDescription.setText(mContext.getString(R.string.slider_setting_value,
.getString(R.string.slider_setting_value, mItem.getSelectedValue(), mItem.getUnits()));
mItem.getSelectedValue(getAdapter().getSettings()), mItem.getUnits()));
} }
setStyle(mBinding.textSettingName, mItem); setStyle(mBinding.textSettingName, mItem);

View File

@ -38,7 +38,7 @@ public final class SwitchSettingViewHolder extends SettingViewHolder
mBinding.textSettingName.setText(item.getName()); mBinding.textSettingName.setText(item.getName());
mBinding.textSettingDescription.setText(item.getDescription()); mBinding.textSettingDescription.setText(item.getDescription());
mBinding.settingSwitch.setChecked(mItem.isChecked(getAdapter().getSettings())); mBinding.settingSwitch.setChecked(mItem.isChecked());
mBinding.settingSwitch.setEnabled(mItem.isEditable()); mBinding.settingSwitch.setEnabled(mItem.isEditable());
// Check for IPL to make sure user can skip. // Check for IPL to make sure user can skip.
@ -56,14 +56,7 @@ public final class SwitchSettingViewHolder extends SettingViewHolder
} }
} }
if (mItem.isChecked(getAdapter().getSettings())) mBinding.settingSwitch.setEnabled(iplExists || !mItem.isChecked());
{
mBinding.settingSwitch.setEnabled(iplExists);
}
else
{
mBinding.settingSwitch.setEnabled(true);
}
} }
mBinding.settingSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> mBinding.settingSwitch.setOnCheckedChangeListener((buttonView, isChecked) ->
@ -95,7 +88,7 @@ public final class SwitchSettingViewHolder extends SettingViewHolder
if (mItem.getSetting() == BooleanSetting.MAIN_SKIP_IPL && !iplExists) if (mItem.getSetting() == BooleanSetting.MAIN_SKIP_IPL && !iplExists)
{ {
if (mItem.isChecked(getAdapter().getSettings())) if (mItem.isChecked())
{ {
showIplNotAvailableError(); showIplNotAvailableError();
return; return;

View File

@ -115,7 +115,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
{ {
int overlayX = mInputOverlay.getLeft(); int overlayX = mInputOverlay.getLeft();
int overlayY = mInputOverlay.getTop(); int overlayY = mInputOverlay.getTop();
mInputOverlay.setSurfacePosition(activity.getSettings(), new Rect( mInputOverlay.setSurfacePosition(new Rect(
surfaceView.getLeft() - overlayX, surfaceView.getTop() - overlayY, surfaceView.getLeft() - overlayX, surfaceView.getTop() - overlayY,
surfaceView.getRight() - overlayX, surfaceView.getBottom() - overlayY)); surfaceView.getRight() - overlayX, surfaceView.getBottom() - overlayY));
}); });
@ -135,7 +135,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
super.onResume(); super.onResume();
if (mInputOverlay != null && NativeLibrary.IsGameMetadataValid()) if (mInputOverlay != null && NativeLibrary.IsGameMetadataValid())
mInputOverlay.refreshControls(activity.getSettings()); mInputOverlay.refreshControls();
run(activity.isActivityRecreated()); run(activity.isActivityRecreated());
} }
@ -171,34 +171,34 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
public void toggleInputOverlayVisibility(Settings settings) public void toggleInputOverlayVisibility(Settings settings)
{ {
BooleanSetting.MAIN_SHOW_INPUT_OVERLAY BooleanSetting.MAIN_SHOW_INPUT_OVERLAY
.setBoolean(settings, !BooleanSetting.MAIN_SHOW_INPUT_OVERLAY.getBoolean(settings)); .setBoolean(settings, !BooleanSetting.MAIN_SHOW_INPUT_OVERLAY.getBoolean());
if (mInputOverlay != null) if (mInputOverlay != null)
mInputOverlay.refreshControls(settings); mInputOverlay.refreshControls();
} }
public void initInputPointer(Settings settings) public void initInputPointer()
{ {
if (mInputOverlay != null) if (mInputOverlay != null)
mInputOverlay.initTouchPointer(settings); mInputOverlay.initTouchPointer();
} }
public void refreshInputOverlay(Settings settings) public void refreshInputOverlay()
{ {
if (mInputOverlay != null) if (mInputOverlay != null)
mInputOverlay.refreshControls(settings); mInputOverlay.refreshControls();
} }
public void refreshOverlayPointer(Settings settings) public void refreshOverlayPointer()
{ {
if (mInputOverlay != null) if (mInputOverlay != null)
mInputOverlay.refreshOverlayPointer(settings); mInputOverlay.refreshOverlayPointer();
} }
public void resetInputOverlay(Settings settings) public void resetInputOverlay()
{ {
if (mInputOverlay != null) if (mInputOverlay != null)
mInputOverlay.resetButtonPlacement(settings); mInputOverlay.resetButtonPlacement();
} }
@Override @Override

View File

@ -65,13 +65,12 @@ class GridOptionDialogFragment : BottomSheetDialogFragment() {
} }
private fun setUpCoverButtons() { private fun setUpCoverButtons() {
mBindingMobile.switchDownloadCovers.isChecked = mBindingMobile.switchDownloadCovers.isChecked = BooleanSetting.MAIN_USE_GAME_COVERS.boolean
BooleanSetting.MAIN_USE_GAME_COVERS.booleanGlobal
mBindingMobile.rootDownloadCovers.setOnClickListener { mBindingMobile.rootDownloadCovers.setOnClickListener {
mBindingMobile.switchDownloadCovers.isChecked = !mBindingMobile.switchDownloadCovers.isChecked mBindingMobile.switchDownloadCovers.isChecked = !mBindingMobile.switchDownloadCovers.isChecked
} }
mBindingMobile.switchDownloadCovers.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> mBindingMobile.switchDownloadCovers.setOnCheckedChangeListener { _: CompoundButton, _: Boolean ->
BooleanSetting.MAIN_USE_GAME_COVERS.setBooleanGlobal( BooleanSetting.MAIN_USE_GAME_COVERS.setBoolean(
NativeConfig.LAYER_BASE, NativeConfig.LAYER_BASE,
mBindingMobile.switchDownloadCovers.isChecked mBindingMobile.switchDownloadCovers.isChecked
) )
@ -80,12 +79,12 @@ class GridOptionDialogFragment : BottomSheetDialogFragment() {
} }
private fun setUpTitleButtons() { private fun setUpTitleButtons() {
mBindingMobile.switchShowTitles.isChecked = BooleanSetting.MAIN_SHOW_GAME_TITLES.booleanGlobal mBindingMobile.switchShowTitles.isChecked = BooleanSetting.MAIN_SHOW_GAME_TITLES.boolean
mBindingMobile.rootShowTitles.setOnClickListener { mBindingMobile.rootShowTitles.setOnClickListener {
mBindingMobile.switchShowTitles.isChecked = !mBindingMobile.switchShowTitles.isChecked mBindingMobile.switchShowTitles.isChecked = !mBindingMobile.switchShowTitles.isChecked
} }
mBindingMobile.switchShowTitles.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> mBindingMobile.switchShowTitles.setOnCheckedChangeListener { _: CompoundButton, _: Boolean ->
BooleanSetting.MAIN_SHOW_GAME_TITLES.setBooleanGlobal( BooleanSetting.MAIN_SHOW_GAME_TITLES.setBoolean(
NativeConfig.LAYER_BASE, NativeConfig.LAYER_BASE,
mBindingMobile.switchShowTitles.isChecked mBindingMobile.switchShowTitles.isChecked
) )
@ -96,12 +95,12 @@ class GridOptionDialogFragment : BottomSheetDialogFragment() {
// TODO: Remove this when leanback is removed // TODO: Remove this when leanback is removed
private fun setUpCoverButtonsTv() { private fun setUpCoverButtonsTv() {
mBindingTv.switchDownloadCovers.isChecked = mBindingTv.switchDownloadCovers.isChecked =
BooleanSetting.MAIN_USE_GAME_COVERS.booleanGlobal BooleanSetting.MAIN_USE_GAME_COVERS.boolean
mBindingTv.rootDownloadCovers.setOnClickListener { mBindingTv.rootDownloadCovers.setOnClickListener {
mBindingTv.switchDownloadCovers.isChecked = !mBindingTv.switchDownloadCovers.isChecked mBindingTv.switchDownloadCovers.isChecked = !mBindingTv.switchDownloadCovers.isChecked
} }
mBindingTv.switchDownloadCovers.setOnCheckedChangeListener { _: CompoundButton, _: Boolean -> mBindingTv.switchDownloadCovers.setOnCheckedChangeListener { _: CompoundButton, _: Boolean ->
BooleanSetting.MAIN_USE_GAME_COVERS.setBooleanGlobal( BooleanSetting.MAIN_USE_GAME_COVERS.setBoolean(
NativeConfig.LAYER_BASE, NativeConfig.LAYER_BASE,
mBindingTv.switchDownloadCovers.isChecked mBindingTv.switchDownloadCovers.isChecked
) )

View File

@ -92,7 +92,7 @@ public final class MenuFragment extends Fragment implements View.OnClickListener
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{ {
if (IntSetting.MAIN_INTERFACE_THEME.getIntGlobal() != ThemeHelper.DEFAULT) if (IntSetting.MAIN_INTERFACE_THEME.getInt() != ThemeHelper.DEFAULT)
{ {
@ColorInt int color = new ElevationOverlayProvider(view.getContext()).compositeOverlay( @ColorInt int color = new ElevationOverlayProvider(view.getContext()).compositeOverlay(
MaterialColors.getColor(view, R.attr.colorSurface), MaterialColors.getColor(view, R.attr.colorSurface),
@ -114,7 +114,7 @@ public final class MenuFragment extends Fragment implements View.OnClickListener
mBinding.menuSkylanders.setVisibility(View.GONE); mBinding.menuSkylanders.setVisibility(View.GONE);
} }
if (!BooleanSetting.MAIN_EMULATE_SKYLANDER_PORTAL.getBooleanGlobal()) if (!BooleanSetting.MAIN_EMULATE_SKYLANDER_PORTAL.getBoolean())
{ {
mBinding.menuSkylanders.setVisibility(View.GONE); mBinding.menuSkylanders.setVisibility(View.GONE);
} }
@ -176,7 +176,7 @@ public final class MenuFragment extends Fragment implements View.OnClickListener
{ {
super.onResume(); super.onResume();
boolean savestatesEnabled = BooleanSetting.MAIN_ENABLE_SAVESTATES.getBooleanGlobal(); boolean savestatesEnabled = BooleanSetting.MAIN_ENABLE_SAVESTATES.getBoolean();
int savestateVisibility = savestatesEnabled ? View.VISIBLE : View.GONE; int savestateVisibility = savestatesEnabled ? View.VISIBLE : View.GONE;
mBinding.menuQuicksave.setVisibility(savestateVisibility); mBinding.menuQuicksave.setVisibility(savestateVisibility);
mBinding.menuQuickload.setVisibility(savestateVisibility); mBinding.menuQuickload.setVisibility(savestateVisibility);

View File

@ -98,7 +98,7 @@ public class GameFileCache
public static String[] getAllGamePaths() public static String[] getAllGamePaths()
{ {
boolean recursiveScan = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBooleanGlobal(); boolean recursiveScan = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean();
LinkedHashSet<String> folderPathsSet = getPathSet(true); LinkedHashSet<String> folderPathsSet = getPathSet(true);

View File

@ -36,7 +36,6 @@ import org.dolphinemu.dolphinemu.features.input.model.controlleremu.EmulatedCont
import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting;
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting;
import org.dolphinemu.dolphinemu.features.settings.model.IntSetting; import org.dolphinemu.dolphinemu.features.settings.model.IntSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -145,13 +144,13 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
requestFocus(); requestFocus();
} }
public void setSurfacePosition(Settings settings, Rect rect) public void setSurfacePosition(Rect rect)
{ {
mSurfacePosition = rect; mSurfacePosition = rect;
initTouchPointer(settings); initTouchPointer();
} }
public void initTouchPointer(Settings settings) public void initTouchPointer()
{ {
// Check if we have all the data we need yet // Check if we have all the data we need yet
boolean aspectRatioAvailable = NativeLibrary.IsRunningAndStarted(); boolean aspectRatioAvailable = NativeLibrary.IsRunningAndStarted();
@ -162,9 +161,9 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
if (!NativeLibrary.IsEmulatingWii()) if (!NativeLibrary.IsEmulatingWii())
return; return;
int doubleTapButton = IntSetting.MAIN_DOUBLE_TAP_BUTTON.getIntGlobal(); int doubleTapButton = IntSetting.MAIN_DOUBLE_TAP_BUTTON.getInt();
if (getConfiguredControllerType(settings) != InputOverlay.OVERLAY_WIIMOTE_CLASSIC && if (getConfiguredControllerType() != InputOverlay.OVERLAY_WIIMOTE_CLASSIC &&
doubleTapButton == ButtonType.CLASSIC_BUTTON_A) doubleTapButton == ButtonType.CLASSIC_BUTTON_A)
{ {
doubleTapButton = ButtonType.WIIMOTE_BUTTON_A; doubleTapButton = ButtonType.WIIMOTE_BUTTON_A;
@ -185,8 +184,8 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
} }
overlayPointer = new InputOverlayPointer(mSurfacePosition, doubleTapControl, overlayPointer = new InputOverlayPointer(mSurfacePosition, doubleTapControl,
IntSetting.MAIN_IR_MODE.getIntGlobal(), IntSetting.MAIN_IR_MODE.getInt(), BooleanSetting.MAIN_IR_ALWAYS_RECENTER.getBoolean(),
BooleanSetting.MAIN_IR_ALWAYS_RECENTER.getBooleanGlobal(), mControllerIndex); mControllerIndex);
} }
@Override @Override
@ -553,55 +552,55 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
private void addGameCubeOverlayControls(String orientation) private void addGameCubeOverlayControls(String orientation)
{ {
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_0.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_0.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_a, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_a,
R.drawable.gcpad_a_pressed, ButtonType.BUTTON_A, ControlId.GCPAD_A_BUTTON, R.drawable.gcpad_a_pressed, ButtonType.BUTTON_A, ControlId.GCPAD_A_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_1.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_1.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_b, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_b,
R.drawable.gcpad_b_pressed, ButtonType.BUTTON_B, ControlId.GCPAD_B_BUTTON, R.drawable.gcpad_b_pressed, ButtonType.BUTTON_B, ControlId.GCPAD_B_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_2.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_2.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_x, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_x,
R.drawable.gcpad_x_pressed, ButtonType.BUTTON_X, ControlId.GCPAD_X_BUTTON, R.drawable.gcpad_x_pressed, ButtonType.BUTTON_X, ControlId.GCPAD_X_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_3.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_3.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_y, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_y,
R.drawable.gcpad_y_pressed, ButtonType.BUTTON_Y, ControlId.GCPAD_Y_BUTTON, R.drawable.gcpad_y_pressed, ButtonType.BUTTON_Y, ControlId.GCPAD_Y_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_4.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_4.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_z, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_z,
R.drawable.gcpad_z_pressed, ButtonType.BUTTON_Z, ControlId.GCPAD_Z_BUTTON, R.drawable.gcpad_z_pressed, ButtonType.BUTTON_Z, ControlId.GCPAD_Z_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_5.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_5.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_start, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_start,
R.drawable.gcpad_start_pressed, ButtonType.BUTTON_START, ControlId.GCPAD_START_BUTTON, R.drawable.gcpad_start_pressed, ButtonType.BUTTON_START, ControlId.GCPAD_START_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_6.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_6.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_l, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_l,
R.drawable.gcpad_l_pressed, ButtonType.TRIGGER_L, ControlId.GCPAD_L_DIGITAL, R.drawable.gcpad_l_pressed, ButtonType.TRIGGER_L, ControlId.GCPAD_L_DIGITAL,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_7.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_7.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_r, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.gcpad_r,
R.drawable.gcpad_r_pressed, ButtonType.TRIGGER_R, ControlId.GCPAD_R_DIGITAL, R.drawable.gcpad_r_pressed, ButtonType.TRIGGER_R, ControlId.GCPAD_R_DIGITAL,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_8.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_8.getBoolean())
{ {
overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad, overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad,
R.drawable.gcwii_dpad_pressed_one_direction, R.drawable.gcwii_dpad_pressed_one_direction,
@ -609,13 +608,13 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
ButtonType.BUTTON_UP, ControlId.GCPAD_DPAD_UP, ControlId.GCPAD_DPAD_DOWN, ButtonType.BUTTON_UP, ControlId.GCPAD_DPAD_UP, ControlId.GCPAD_DPAD_DOWN,
ControlId.GCPAD_DPAD_LEFT, ControlId.GCPAD_DPAD_RIGHT, orientation)); ControlId.GCPAD_DPAD_LEFT, ControlId.GCPAD_DPAD_RIGHT, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_9.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_9.getBoolean())
{ {
overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range,
R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, ButtonType.STICK_MAIN, R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, ButtonType.STICK_MAIN,
ControlId.GCPAD_MAIN_STICK_X, ControlId.GCPAD_MAIN_STICK_Y, orientation)); ControlId.GCPAD_MAIN_STICK_X, ControlId.GCPAD_MAIN_STICK_Y, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_10.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_GC_10.getBoolean())
{ {
overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range,
R.drawable.gcpad_c, R.drawable.gcpad_c_pressed, ButtonType.STICK_C, R.drawable.gcpad_c, R.drawable.gcpad_c_pressed, ButtonType.STICK_C,
@ -625,49 +624,49 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
private void addWiimoteOverlayControls(String orientation) private void addWiimoteOverlayControls(String orientation)
{ {
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_0.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_0.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_a, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_a,
R.drawable.wiimote_a_pressed, ButtonType.WIIMOTE_BUTTON_A, ControlId.WIIMOTE_A_BUTTON, R.drawable.wiimote_a_pressed, ButtonType.WIIMOTE_BUTTON_A, ControlId.WIIMOTE_A_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_1.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_1.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_b, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_b,
R.drawable.wiimote_b_pressed, ButtonType.WIIMOTE_BUTTON_B, ControlId.WIIMOTE_B_BUTTON, R.drawable.wiimote_b_pressed, ButtonType.WIIMOTE_BUTTON_B, ControlId.WIIMOTE_B_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_2.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_2.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_one, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_one,
R.drawable.wiimote_one_pressed, ButtonType.WIIMOTE_BUTTON_1, R.drawable.wiimote_one_pressed, ButtonType.WIIMOTE_BUTTON_1,
ControlId.WIIMOTE_ONE_BUTTON, orientation)); ControlId.WIIMOTE_ONE_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_3.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_3.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_two, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_two,
R.drawable.wiimote_two_pressed, ButtonType.WIIMOTE_BUTTON_2, R.drawable.wiimote_two_pressed, ButtonType.WIIMOTE_BUTTON_2,
ControlId.WIIMOTE_TWO_BUTTON, orientation)); ControlId.WIIMOTE_TWO_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_4.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_4.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_plus, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_plus,
R.drawable.wiimote_plus_pressed, ButtonType.WIIMOTE_BUTTON_PLUS, R.drawable.wiimote_plus_pressed, ButtonType.WIIMOTE_BUTTON_PLUS,
ControlId.WIIMOTE_PLUS_BUTTON, orientation)); ControlId.WIIMOTE_PLUS_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_5.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_5.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_minus, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_minus,
R.drawable.wiimote_minus_pressed, ButtonType.WIIMOTE_BUTTON_MINUS, R.drawable.wiimote_minus_pressed, ButtonType.WIIMOTE_BUTTON_MINUS,
ControlId.WIIMOTE_MINUS_BUTTON, orientation)); ControlId.WIIMOTE_MINUS_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_6.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_6.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_home, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_home,
R.drawable.wiimote_home_pressed, ButtonType.WIIMOTE_BUTTON_HOME, R.drawable.wiimote_home_pressed, ButtonType.WIIMOTE_BUTTON_HOME,
ControlId.WIIMOTE_HOME_BUTTON, orientation)); ControlId.WIIMOTE_HOME_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_7.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_7.getBoolean())
{ {
overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad, overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad,
R.drawable.gcwii_dpad_pressed_one_direction, R.drawable.gcwii_dpad_pressed_one_direction,
@ -679,19 +678,19 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
private void addNunchukOverlayControls(String orientation) private void addNunchukOverlayControls(String orientation)
{ {
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_8.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_8.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.nunchuk_c, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.nunchuk_c,
R.drawable.nunchuk_c_pressed, ButtonType.NUNCHUK_BUTTON_C, ControlId.NUNCHUK_C_BUTTON, R.drawable.nunchuk_c_pressed, ButtonType.NUNCHUK_BUTTON_C, ControlId.NUNCHUK_C_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_9.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_9.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.nunchuk_z, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.nunchuk_z,
R.drawable.nunchuk_z_pressed, ButtonType.NUNCHUK_BUTTON_Z, ControlId.NUNCHUK_Z_BUTTON, R.drawable.nunchuk_z_pressed, ButtonType.NUNCHUK_BUTTON_Z, ControlId.NUNCHUK_Z_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_10.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_WII_10.getBoolean())
{ {
overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range,
R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed,
@ -702,73 +701,73 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
private void addClassicOverlayControls(String orientation) private void addClassicOverlayControls(String orientation)
{ {
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_0.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_0.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_a, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_a,
R.drawable.classic_a_pressed, ButtonType.CLASSIC_BUTTON_A, ControlId.CLASSIC_A_BUTTON, R.drawable.classic_a_pressed, ButtonType.CLASSIC_BUTTON_A, ControlId.CLASSIC_A_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_1.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_1.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_b, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_b,
R.drawable.classic_b_pressed, ButtonType.CLASSIC_BUTTON_B, ControlId.CLASSIC_B_BUTTON, R.drawable.classic_b_pressed, ButtonType.CLASSIC_BUTTON_B, ControlId.CLASSIC_B_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_2.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_2.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_x, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_x,
R.drawable.classic_x_pressed, ButtonType.CLASSIC_BUTTON_X, ControlId.CLASSIC_X_BUTTON, R.drawable.classic_x_pressed, ButtonType.CLASSIC_BUTTON_X, ControlId.CLASSIC_X_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_3.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_3.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_y, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_y,
R.drawable.classic_y_pressed, ButtonType.CLASSIC_BUTTON_Y, ControlId.CLASSIC_Y_BUTTON, R.drawable.classic_y_pressed, ButtonType.CLASSIC_BUTTON_Y, ControlId.CLASSIC_Y_BUTTON,
orientation)); orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_4.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_4.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_plus, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_plus,
R.drawable.wiimote_plus_pressed, ButtonType.CLASSIC_BUTTON_PLUS, R.drawable.wiimote_plus_pressed, ButtonType.CLASSIC_BUTTON_PLUS,
ControlId.CLASSIC_PLUS_BUTTON, orientation)); ControlId.CLASSIC_PLUS_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_5.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_5.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_minus, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_minus,
R.drawable.wiimote_minus_pressed, ButtonType.CLASSIC_BUTTON_MINUS, R.drawable.wiimote_minus_pressed, ButtonType.CLASSIC_BUTTON_MINUS,
ControlId.CLASSIC_MINUS_BUTTON, orientation)); ControlId.CLASSIC_MINUS_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_6.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_6.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_home, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.wiimote_home,
R.drawable.wiimote_home_pressed, ButtonType.CLASSIC_BUTTON_HOME, R.drawable.wiimote_home_pressed, ButtonType.CLASSIC_BUTTON_HOME,
ControlId.CLASSIC_HOME_BUTTON, orientation)); ControlId.CLASSIC_HOME_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_7.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_7.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_l, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_l,
R.drawable.classic_l_pressed, ButtonType.CLASSIC_TRIGGER_L, R.drawable.classic_l_pressed, ButtonType.CLASSIC_TRIGGER_L,
ControlId.CLASSIC_L_DIGITAL, orientation)); ControlId.CLASSIC_L_DIGITAL, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_8.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_8.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_r, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_r,
R.drawable.classic_r_pressed, ButtonType.CLASSIC_TRIGGER_R, R.drawable.classic_r_pressed, ButtonType.CLASSIC_TRIGGER_R,
ControlId.CLASSIC_R_DIGITAL, orientation)); ControlId.CLASSIC_R_DIGITAL, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_9.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_9.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_zl, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_zl,
R.drawable.classic_zl_pressed, ButtonType.CLASSIC_BUTTON_ZL, R.drawable.classic_zl_pressed, ButtonType.CLASSIC_BUTTON_ZL,
ControlId.CLASSIC_ZL_BUTTON, orientation)); ControlId.CLASSIC_ZL_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_10.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_10.getBoolean())
{ {
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_zr, overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.classic_zr,
R.drawable.classic_zr_pressed, ButtonType.CLASSIC_BUTTON_ZR, R.drawable.classic_zr_pressed, ButtonType.CLASSIC_BUTTON_ZR,
ControlId.CLASSIC_ZR_BUTTON, orientation)); ControlId.CLASSIC_ZR_BUTTON, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_11.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_11.getBoolean())
{ {
overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad, overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad,
R.drawable.gcwii_dpad_pressed_one_direction, R.drawable.gcwii_dpad_pressed_one_direction,
@ -776,14 +775,14 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
ButtonType.CLASSIC_DPAD_UP, ControlId.CLASSIC_DPAD_UP, ControlId.CLASSIC_DPAD_DOWN, ButtonType.CLASSIC_DPAD_UP, ControlId.CLASSIC_DPAD_UP, ControlId.CLASSIC_DPAD_DOWN,
ControlId.CLASSIC_DPAD_LEFT, ControlId.CLASSIC_DPAD_RIGHT, orientation)); ControlId.CLASSIC_DPAD_LEFT, ControlId.CLASSIC_DPAD_RIGHT, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_12.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_12.getBoolean())
{ {
overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range,
R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed,
ButtonType.CLASSIC_STICK_LEFT, ControlId.CLASSIC_LEFT_STICK_X, ButtonType.CLASSIC_STICK_LEFT, ControlId.CLASSIC_LEFT_STICK_X,
ControlId.CLASSIC_LEFT_STICK_Y, orientation)); ControlId.CLASSIC_LEFT_STICK_Y, orientation));
} }
if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_13.getBooleanGlobal()) if (BooleanSetting.MAIN_BUTTON_TOGGLE_CLASSIC_13.getBoolean())
{ {
overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range, overlayJoysticks.add(initializeOverlayJoystick(getContext(), R.drawable.gcwii_joystick_range,
R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed, R.drawable.gcwii_joystick, R.drawable.gcwii_joystick_pressed,
@ -792,7 +791,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
} }
} }
public void refreshControls(Settings settings) public void refreshControls()
{ {
unregisterControllers(); unregisterControllers();
@ -805,19 +804,19 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ? getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ?
"-Portrait" : ""; "-Portrait" : "";
mControllerType = getConfiguredControllerType(settings); mControllerType = getConfiguredControllerType();
IntSetting controllerSetting = NativeLibrary.IsEmulatingWii() ? IntSetting controllerSetting = NativeLibrary.IsEmulatingWii() ?
IntSetting.MAIN_OVERLAY_WII_CONTROLLER : IntSetting.MAIN_OVERLAY_GC_CONTROLLER; IntSetting.MAIN_OVERLAY_WII_CONTROLLER : IntSetting.MAIN_OVERLAY_GC_CONTROLLER;
int controllerIndex = controllerSetting.getInt(settings); int controllerIndex = controllerSetting.getInt();
if (BooleanSetting.MAIN_SHOW_INPUT_OVERLAY.getBooleanGlobal()) if (BooleanSetting.MAIN_SHOW_INPUT_OVERLAY.getBoolean())
{ {
// Add all the enabled overlay items back to the HashSet. // Add all the enabled overlay items back to the HashSet.
switch (mControllerType) switch (mControllerType)
{ {
case OVERLAY_GAMECUBE: case OVERLAY_GAMECUBE:
if (IntSetting.getSettingForSIDevice(controllerIndex).getInt(settings) == if (IntSetting.getSettingForSIDevice(controllerIndex).getInt() ==
DISABLED_GAMECUBE_CONTROLLER && mIsFirstRun) DISABLED_GAMECUBE_CONTROLLER && mIsFirstRun)
{ {
Toast.makeText(getContext(), R.string.disabled_gc_overlay_notice, Toast.LENGTH_SHORT) Toast.makeText(getContext(), R.string.disabled_gc_overlay_notice, Toast.LENGTH_SHORT)
@ -866,21 +865,21 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
invalidate(); invalidate();
} }
public void refreshOverlayPointer(Settings settings) public void refreshOverlayPointer()
{ {
if (overlayPointer != null) if (overlayPointer != null)
{ {
overlayPointer.setMode(IntSetting.MAIN_IR_MODE.getInt(settings)); overlayPointer.setMode(IntSetting.MAIN_IR_MODE.getInt());
overlayPointer.setRecenter(BooleanSetting.MAIN_IR_ALWAYS_RECENTER.getBoolean(settings)); overlayPointer.setRecenter(BooleanSetting.MAIN_IR_ALWAYS_RECENTER.getBoolean());
} }
} }
public void resetButtonPlacement(Settings settings) public void resetButtonPlacement()
{ {
boolean isLandscape = boolean isLandscape =
getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
final int controller = getConfiguredControllerType(settings); final int controller = getConfiguredControllerType();
if (controller == OVERLAY_GAMECUBE) if (controller == OVERLAY_GAMECUBE)
{ {
if (isLandscape) if (isLandscape)
@ -908,26 +907,26 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
wiiOnlyPortraitDefaultOverlay(); wiiOnlyPortraitDefaultOverlay();
} }
} }
refreshControls(settings); refreshControls();
} }
public static int getConfiguredControllerType(Settings settings) public static int getConfiguredControllerType()
{ {
IntSetting controllerSetting = NativeLibrary.IsEmulatingWii() ? IntSetting controllerSetting = NativeLibrary.IsEmulatingWii() ?
IntSetting.MAIN_OVERLAY_WII_CONTROLLER : IntSetting.MAIN_OVERLAY_GC_CONTROLLER; IntSetting.MAIN_OVERLAY_WII_CONTROLLER : IntSetting.MAIN_OVERLAY_GC_CONTROLLER;
int controllerIndex = controllerSetting.getInt(settings); int controllerIndex = controllerSetting.getInt();
if (controllerIndex >= 0 && controllerIndex < 4) if (controllerIndex >= 0 && controllerIndex < 4)
{ {
// GameCube controller // GameCube controller
if (IntSetting.getSettingForSIDevice(controllerIndex).getInt(settings) == 6) if (IntSetting.getSettingForSIDevice(controllerIndex).getInt() == 6)
return OVERLAY_GAMECUBE; return OVERLAY_GAMECUBE;
} }
else if (controllerIndex >= 4 && controllerIndex < 8) else if (controllerIndex >= 4 && controllerIndex < 8)
{ {
// Wii Remote // Wii Remote
int wiimoteIndex = controllerIndex - 4; int wiimoteIndex = controllerIndex - 4;
if (IntSetting.getSettingForWiimoteSource(wiimoteIndex).getInt(settings) == 1) if (IntSetting.getSettingForWiimoteSource(wiimoteIndex).getInt() == 1)
{ {
int attachmentIndex = EmulatedController.getSelectedWiimoteAttachment(wiimoteIndex); int attachmentIndex = EmulatedController.getSelectedWiimoteAttachment(wiimoteIndex);
switch (attachmentIndex) switch (attachmentIndex)
@ -939,7 +938,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
} }
NumericSetting sidewaysSetting = EmulatedController.getSidewaysWiimoteSetting(wiimoteIndex); NumericSetting sidewaysSetting = EmulatedController.getSidewaysWiimoteSetting(wiimoteIndex);
boolean sideways = new InputMappingBooleanSetting(sidewaysSetting).getBoolean(settings); boolean sideways = new InputMappingBooleanSetting(sidewaysSetting).getBoolean();
return sideways ? OVERLAY_WIIMOTE_SIDEWAYS : OVERLAY_WIIMOTE; return sideways ? OVERLAY_WIIMOTE_SIDEWAYS : OVERLAY_WIIMOTE;
} }
@ -1071,7 +1070,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
break; break;
} }
scale *= (IntSetting.MAIN_CONTROL_SCALE.getIntGlobal() + 50); scale *= (IntSetting.MAIN_CONTROL_SCALE.getInt() + 50);
scale /= 100; scale /= 100;
// Initialize the InputOverlayDrawableButton. // Initialize the InputOverlayDrawableButton.
@ -1097,7 +1096,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
// Need to set the image's position // Need to set the image's position
overlayDrawable.setPosition(drawableX, drawableY); overlayDrawable.setPosition(drawableX, drawableY);
overlayDrawable.setOpacity(IntSetting.MAIN_CONTROL_OPACITY.getIntGlobal() * 255 / 100); overlayDrawable.setOpacity(IntSetting.MAIN_CONTROL_OPACITY.getInt() * 255 / 100);
return overlayDrawable; return overlayDrawable;
} }
@ -1152,7 +1151,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
break; break;
} }
scale *= (IntSetting.MAIN_CONTROL_SCALE.getIntGlobal() + 50); scale *= (IntSetting.MAIN_CONTROL_SCALE.getInt() + 50);
scale /= 100; scale /= 100;
// Initialize the InputOverlayDrawableDpad. // Initialize the InputOverlayDrawableDpad.
@ -1183,7 +1182,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
// Need to set the image's position // Need to set the image's position
overlayDrawable.setPosition(drawableX, drawableY); overlayDrawable.setPosition(drawableX, drawableY);
overlayDrawable.setOpacity(IntSetting.MAIN_CONTROL_OPACITY.getIntGlobal() * 255 / 100); overlayDrawable.setOpacity(IntSetting.MAIN_CONTROL_OPACITY.getInt() * 255 / 100);
return overlayDrawable; return overlayDrawable;
} }
@ -1212,7 +1211,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
// Decide scale based on user preference // Decide scale based on user preference
float scale = 0.275f; float scale = 0.275f;
scale *= (IntSetting.MAIN_CONTROL_SCALE.getIntGlobal() + 50); scale *= (IntSetting.MAIN_CONTROL_SCALE.getInt() + 50);
scale /= 100; scale /= 100;
// Initialize the InputOverlayDrawableJoystick. // Initialize the InputOverlayDrawableJoystick.
@ -1252,7 +1251,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
// Need to set the image's position // Need to set the image's position
overlayDrawable.setPosition(drawableX, drawableY); overlayDrawable.setPosition(drawableX, drawableY);
overlayDrawable.setOpacity(IntSetting.MAIN_CONTROL_OPACITY.getIntGlobal() * 255 / 100); overlayDrawable.setOpacity(IntSetting.MAIN_CONTROL_OPACITY.getInt() * 255 / 100);
return overlayDrawable; return overlayDrawable;
} }

View File

@ -102,7 +102,7 @@ public final class InputOverlayDrawableJoystick
public boolean TrackEvent(MotionEvent event) public boolean TrackEvent(MotionEvent event)
{ {
boolean reCenter = BooleanSetting.MAIN_JOYSTICK_REL_CENTER.getBooleanGlobal(); boolean reCenter = BooleanSetting.MAIN_JOYSTICK_REL_CENTER.getBoolean();
int action = event.getActionMasked(); int action = event.getActionMasked();
boolean firstPointer = action != MotionEvent.ACTION_POINTER_DOWN && boolean firstPointer = action != MotionEvent.ACTION_POINTER_DOWN &&
action != MotionEvent.ACTION_POINTER_UP; action != MotionEvent.ACTION_POINTER_UP;

View File

@ -378,7 +378,7 @@ public final class MainActivity extends AppCompatActivity
public void onTabSelected(@NonNull TabLayout.Tab tab) public void onTabSelected(@NonNull TabLayout.Tab tab)
{ {
super.onTabSelected(tab); super.onTabSelected(tab);
IntSetting.MAIN_LAST_PLATFORM_TAB.setIntGlobal(NativeConfig.LAYER_BASE, IntSetting.MAIN_LAST_PLATFORM_TAB.setInt(NativeConfig.LAYER_BASE,
tab.getPosition()); tab.getPosition());
} }
}); });
@ -388,7 +388,7 @@ public final class MainActivity extends AppCompatActivity
mBinding.tabsPlatforms.getTabAt(i).setIcon(PlatformPagerAdapter.TAB_ICONS[i]); mBinding.tabsPlatforms.getTabAt(i).setIcon(PlatformPagerAdapter.TAB_ICONS[i]);
} }
mBinding.pagerPlatforms.setCurrentItem(IntSetting.MAIN_LAST_PLATFORM_TAB.getIntGlobal()); mBinding.pagerPlatforms.setCurrentItem(IntSetting.MAIN_LAST_PLATFORM_TAB.getInt());
showGames(); showGames();
GameFileCacheManager.startLoad(); GameFileCacheManager.startLoad();

View File

@ -175,7 +175,7 @@ public final class MainPresenter
{ {
Uri uri = result.getData(); Uri uri = result.getData();
boolean recursive = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBooleanGlobal(); boolean recursive = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBoolean();
String[] childNames = ContentHandler.getChildNames(uri, recursive); String[] childNames = ContentHandler.getChildNames(uri, recursive);
if (Arrays.stream(childNames).noneMatch((name) -> FileBrowserHelper.GAME_EXTENSIONS.contains( if (Arrays.stream(childNames).noneMatch((name) -> FileBrowserHelper.GAME_EXTENSIONS.contains(
FileBrowserHelper.getExtension(name, false)))) FileBrowserHelper.getExtension(name, false))))

View File

@ -21,7 +21,7 @@ object Analytics {
@JvmStatic @JvmStatic
fun checkAnalyticsInit(activity: FragmentActivity) { fun checkAnalyticsInit(activity: FragmentActivity) {
AfterDirectoryInitializationRunner().runWithoutLifecycle { AfterDirectoryInitializationRunner().runWithoutLifecycle {
if (!BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.booleanGlobal) { if (!BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.boolean) {
AnalyticsDialog().show(activity.supportFragmentManager, AnalyticsDialog.TAG) AnalyticsDialog().show(activity.supportFragmentManager, AnalyticsDialog.TAG)
} }
} }
@ -34,7 +34,7 @@ object Analytics {
BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true) BooleanSetting.MAIN_ANALYTICS_PERMISSION_ASKED.setBoolean(settings, true)
// Context is set to null to avoid toasts // Context is set to null to avoid toasts
settings.saveSettings(null, null) settings.saveSettings(null)
} }
} }

View File

@ -37,7 +37,7 @@ object CoilUtils {
} }
) )
} }
} else if (BooleanSetting.MAIN_USE_GAME_COVERS.booleanGlobal) { } else if (BooleanSetting.MAIN_USE_GAME_COVERS.boolean) {
imageView.load(CoverHelper.buildGameTDBUrl(gameFile, CoverHelper.getRegion(gameFile))) { imageView.load(CoverHelper.buildGameTDBUrl(gameFile, CoverHelper.getRegion(gameFile))) {
error(R.drawable.no_banner) error(R.drawable.no_banner)
target( target(
@ -58,13 +58,13 @@ object CoilUtils {
} }
private fun enableInnerTitle(gameViewHolder: GameViewHolder?) { private fun enableInnerTitle(gameViewHolder: GameViewHolder?) {
if (gameViewHolder != null && !BooleanSetting.MAIN_SHOW_GAME_TITLES.booleanGlobal) { if (gameViewHolder != null && !BooleanSetting.MAIN_SHOW_GAME_TITLES.boolean) {
gameViewHolder.binding.textGameTitleInner.visibility = View.VISIBLE gameViewHolder.binding.textGameTitleInner.visibility = View.VISIBLE
} }
} }
private fun disableInnerTitle(gameViewHolder: GameViewHolder?) { private fun disableInnerTitle(gameViewHolder: GameViewHolder?) {
if (gameViewHolder != null && !BooleanSetting.MAIN_SHOW_GAME_TITLES.booleanGlobal) { if (gameViewHolder != null && !BooleanSetting.MAIN_SHOW_GAME_TITLES.boolean) {
gameViewHolder.binding.textGameTitleInner.visibility = View.GONE gameViewHolder.binding.textGameTitleInner.visibility = View.GONE
} }
} }

View File

@ -361,30 +361,29 @@ public final class DirectoryInitialization
private static void checkThemeSettings(Context context) private static void checkThemeSettings(Context context)
{ {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
if (IntSetting.MAIN_INTERFACE_THEME.getIntGlobal() != if (IntSetting.MAIN_INTERFACE_THEME.getInt() !=
preferences.getInt(ThemeHelper.CURRENT_THEME, ThemeHelper.DEFAULT)) preferences.getInt(ThemeHelper.CURRENT_THEME, ThemeHelper.DEFAULT))
{ {
preferences.edit() preferences.edit()
.putInt(ThemeHelper.CURRENT_THEME, IntSetting.MAIN_INTERFACE_THEME.getIntGlobal()) .putInt(ThemeHelper.CURRENT_THEME, IntSetting.MAIN_INTERFACE_THEME.getInt())
.apply(); .apply();
} }
if (IntSetting.MAIN_INTERFACE_THEME_MODE.getIntGlobal() != if (IntSetting.MAIN_INTERFACE_THEME_MODE.getInt() !=
preferences.getInt(ThemeHelper.CURRENT_THEME_MODE, preferences.getInt(ThemeHelper.CURRENT_THEME_MODE,
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)) AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM))
{ {
preferences.edit() preferences.edit()
.putInt(ThemeHelper.CURRENT_THEME_MODE, .putInt(ThemeHelper.CURRENT_THEME_MODE, IntSetting.MAIN_INTERFACE_THEME_MODE.getInt())
IntSetting.MAIN_INTERFACE_THEME_MODE.getIntGlobal())
.apply(); .apply();
} }
if (BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.getBooleanGlobal() != if (BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.getBoolean() !=
preferences.getBoolean(ThemeHelper.USE_BLACK_BACKGROUNDS, false)) preferences.getBoolean(ThemeHelper.USE_BLACK_BACKGROUNDS, false))
{ {
preferences.edit() preferences.edit()
.putBoolean(ThemeHelper.USE_BLACK_BACKGROUNDS, .putBoolean(ThemeHelper.USE_BLACK_BACKGROUNDS,
BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.getBooleanGlobal()) BooleanSetting.MAIN_USE_BLACK_BACKGROUNDS.getBoolean())
.apply(); .apply();
} }
} }

View File

@ -79,7 +79,7 @@ public final class FileBrowserHelper
public static boolean isPathEmptyOrValid(StringSetting path) public static boolean isPathEmptyOrValid(StringSetting path)
{ {
return isPathEmptyOrValid(path.getStringGlobal()); return isPathEmptyOrValid(path.getString());
} }
/** /**

View File

@ -43,6 +43,10 @@ static Config::Location GetLocation(JNIEnv* env, jstring file, jstring section,
{ {
system = Config::System::WiiPad; system = Config::System::WiiPad;
} }
else if (decoded_file == "GameSettingsOnly")
{
system = Config::System::GameSettingsOnly;
}
else else
{ {
ASSERT(false); ASSERT(false);
@ -134,12 +138,14 @@ Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_unloadGameIn
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_save( JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_save(
JNIEnv*, jclass, jint layer) JNIEnv*, jclass, jint layer)
{ {
const std::shared_ptr<Config::Layer> layer_ptr = GetLayer(layer, {}); return GetLayer(layer, {})->Save();
}
// Workaround for the Settings class carrying around a legacy map of settings it always saves JNIEXPORT void JNICALL
layer_ptr->MarkAsDirty(); Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_deleteAllKeys(JNIEnv*, jclass,
jint layer)
return layer_ptr->Save(); {
return GetLayer(layer, {})->DeleteAllKeys();
} }
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
@ -162,6 +168,16 @@ Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_deleteKey(
return static_cast<jboolean>(had_value); return static_cast<jboolean>(had_value);
} }
JNIEXPORT jboolean JNICALL
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_exists(JNIEnv* env, jclass,
jint layer, jstring file,
jstring section,
jstring key)
{
const Config::Location location = GetLocation(env, file, section, key);
return static_cast<jboolean>(GetLayer(layer, location)->Exists(location));
}
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_getString( Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_getString(
JNIEnv* env, jclass, jint layer, jstring file, jstring section, jstring key, JNIEnv* env, jclass, jint layer, jstring file, jstring section, jstring key,

View File

@ -159,7 +159,8 @@ static const std::map<System, std::string> system_to_name = {
{System::SYSCONF, "SYSCONF"}, {System::SYSCONF, "SYSCONF"},
{System::DualShockUDPClient, "DualShockUDPClient"}, {System::DualShockUDPClient, "DualShockUDPClient"},
{System::FreeLook, "FreeLook"}, {System::FreeLook, "FreeLook"},
{System::Session, "Session"}}; {System::Session, "Session"},
{System::GameSettingsOnly, "GameSettingsOnly"}};
const std::string& GetSystemName(System system) const std::string& GetSystemName(System system)
{ {

View File

@ -33,6 +33,7 @@ enum class System
DualShockUDPClient, DualShockUDPClient,
FreeLook, FreeLook,
Session, Session,
GameSettingsOnly,
}; };
constexpr std::array<LayerType, 7> SEARCH_ORDER{{ constexpr std::array<LayerType, 7> SEARCH_ORDER{{

View File

@ -159,6 +159,9 @@ public:
if (location.system == Config::System::Session) if (location.system == Config::System::Session)
continue; continue;
if (location.system == Config::System::GameSettingsOnly)
continue;
auto ini = inis.find(location.system); auto ini = inis.find(location.system);
if (ini == inis.end()) if (ini == inis.end())
{ {

View File

@ -104,6 +104,7 @@ static const INIToSectionMap& GetINIToSectionMap()
{"Video_Stereoscopy", {Config::System::GFX, "Stereoscopy"}}, {"Video_Stereoscopy", {Config::System::GFX, "Stereoscopy"}},
{"Video_Hacks", {Config::System::GFX, "Hacks"}}, {"Video_Hacks", {Config::System::GFX, "Hacks"}},
{"Video", {Config::System::GFX, "GameSpecific"}}, {"Video", {Config::System::GFX, "GameSpecific"}},
{"Controls", {Config::System::GameSettingsOnly, "Controls"}},
}; };
return ini_to_section; return ini_to_section;
} }

View File

@ -18,7 +18,8 @@ bool IsSettingSaveable(const Config::Location& config_location)
{ {
for (Config::System system : for (Config::System system :
{Config::System::SYSCONF, Config::System::GFX, Config::System::DualShockUDPClient, {Config::System::SYSCONF, Config::System::GFX, Config::System::DualShockUDPClient,
Config::System::Logger, Config::System::FreeLook, Config::System::Main}) Config::System::Logger, Config::System::FreeLook, Config::System::Main,
Config::System::GameSettingsOnly})
{ {
if (config_location.system == system) if (config_location.system == system)
return true; return true;