Skip to content
Permalink
Browse files
Merge pull request #8965 from JosJuice/android-backend-extension-hack
Android: Remove hacks for Wii Remote extension and video backend settings
  • Loading branch information
lioncash committed Jul 20, 2020
2 parents ae23480 + e9cc89a commit 92d24ae
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 201 deletions.
@@ -1,22 +1,49 @@
package org.dolphinemu.dolphinemu.features.settings.model.view;

import org.dolphinemu.dolphinemu.DolphinApplication;
import org.dolphinemu.dolphinemu.features.settings.model.Setting;
import org.dolphinemu.dolphinemu.features.settings.model.StringSetting;
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;

public class StringSingleChoiceSetting extends SettingsItem
{
private String mDefaultValue;

private String[] mChoicesId;
private String[] mValuesId;
private MenuTag mMenuTag;

public StringSingleChoiceSetting(String key, String section, int titleId, int descriptionId,
String[] choicesId, String[] valuesId, String defaultValue, Setting setting)
String[] choicesId, String[] valuesId, String defaultValue, Setting setting,
MenuTag menuTag)
{
super(key, section, setting, titleId, descriptionId);
mValuesId = valuesId;
mChoicesId = choicesId;
mValuesId = valuesId;
mDefaultValue = defaultValue;
mMenuTag = menuTag;
}

public StringSingleChoiceSetting(String key, String section, int titleId, int descriptionId,
String[] choicesId, String[] valuesId, String defaultValue, Setting setting)
{
this(key, section, titleId, descriptionId, choicesId, valuesId, defaultValue, setting, null);
}

public StringSingleChoiceSetting(String key, String section, int titleId, int descriptionId,
int choicesId, int valuesId, String defaultValue, Setting setting, MenuTag menuTag)
{
super(key, section, setting, titleId, descriptionId);
mChoicesId = DolphinApplication.getAppContext().getResources().getStringArray(choicesId);
mValuesId = DolphinApplication.getAppContext().getResources().getStringArray(valuesId);
mDefaultValue = defaultValue;
mMenuTag = menuTag;
}

public StringSingleChoiceSetting(String key, String section, int titleId, int descriptionId,
int choicesId, int valuesId, String defaultValue, Setting setting)
{
this(key, section, titleId, descriptionId, choicesId, valuesId, defaultValue, setting, null);
}

public String[] getChoicesId()
@@ -69,6 +96,11 @@ public int getSelectValueIndex()
return -1;
}

public MenuTag getMenuTag()
{
return mMenuTag;
}

/**
* Write a value to the backing int. If that int was previously null,
* initializes a new one and returns it, so it can be added to the Hashmap.
@@ -369,6 +369,27 @@ public static void resetPaths()
sView.onSettingChanged(null);
}

private void handleMenuTag(MenuTag menuTag, int value)
{
if (menuTag != null)
{
if (menuTag.isGCPadMenu())
{
mView.onGcPadSettingChanged(menuTag, value);
}

if (menuTag.isWiimoteMenu())
{
mView.onWiimoteSettingChanged(menuTag, value);
}

if (menuTag.isWiimoteExtensionMenu())
{
mView.onExtensionSettingChanged(menuTag, value);
}
}
}

@Override
public void onClick(DialogInterface dialog, int which)
{
@@ -380,50 +401,14 @@ public void onClick(DialogInterface dialog, int which)
if (scSetting.getSelectedValue() != value)
mView.onSettingChanged(mClickedItem.getKey());

MenuTag menuTag = scSetting.getMenuTag();
if (menuTag != null)
{
if (menuTag.isGCPadMenu())
{
mView.onGcPadSettingChanged(menuTag, value);
}

if (menuTag.isWiimoteMenu())
{
mView.onWiimoteSettingChanged(menuTag, value);
}

if (menuTag.isWiimoteExtensionMenu())
{
mView.onExtensionSettingChanged(menuTag, value);
}
}
handleMenuTag(scSetting.getMenuTag(), value);

// Get the backing Setting, which may be null (if for example it was missing from the file)
IntSetting setting = scSetting.setSelectedValue(value);
if (setting != null)
{
mView.putSetting(setting);
}
else
{
if (scSetting.getKey().equals(SettingsFile.KEY_VIDEO_BACKEND_INDEX))
{
putVideoBackendSetting(which);
}
else if (scSetting.getKey().equals(SettingsFile.KEY_WIIMOTE_EXTENSION))
{
putExtensionSetting(which, Character.getNumericValue(
scSetting.getSection().charAt(scSetting.getSection().length() - 1)), false);
}
else if (scSetting.getKey().contains(SettingsFile.KEY_WIIMOTE_EXTENSION) &&
scSetting.getSection().equals(Settings.SECTION_CONTROLS))
{
putExtensionSetting(which, Character
.getNumericValue(scSetting.getKey().charAt(scSetting.getKey().length() - 1)),
true);
}
}

closeDialog();
}
@@ -452,6 +437,8 @@ else if (mClickedItem instanceof StringSingleChoiceSetting)
if (!scSetting.getSelectedValue().equals(value))
mView.onSettingChanged(mClickedItem.getKey());

handleMenuTag(scSetting.getMenuTag(), which);

StringSetting setting = scSetting.setSelectedValue(value);
if (setting != null)
{
@@ -613,52 +600,4 @@ private int getSelectionForSingleChoiceDynamicDescriptionsValue(

return -1;
}

private void putVideoBackendSetting(int which)
{
StringSetting gfxBackend = null;
switch (which)
{
case 0:
gfxBackend =
new StringSetting(SettingsFile.KEY_VIDEO_BACKEND, Settings.SECTION_INI_CORE, "OGL");
break;

case 1:
gfxBackend = new StringSetting(SettingsFile.KEY_VIDEO_BACKEND, Settings.SECTION_INI_CORE,
"Vulkan");
break;

case 2:
gfxBackend = new StringSetting(SettingsFile.KEY_VIDEO_BACKEND, Settings.SECTION_INI_CORE,
"Software Renderer");
break;

case 3:
gfxBackend = new StringSetting(SettingsFile.KEY_VIDEO_BACKEND, Settings.SECTION_INI_CORE,
"Null");
break;
}

mView.putSetting(gfxBackend);
}

private void putExtensionSetting(int which, int wiimoteNumber, boolean isGame)
{
if (!isGame)
{
StringSetting extension = new StringSetting(SettingsFile.KEY_WIIMOTE_EXTENSION,
Settings.SECTION_WIIMOTE + wiimoteNumber,
mContext.getResources().getStringArray(R.array.wiimoteExtensionsEntries)[which]);
mView.putSetting(extension);
}
else
{
StringSetting extension =
new StringSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + wiimoteNumber,
Settings.SECTION_CONTROLS, mContext.getResources()
.getStringArray(R.array.wiimoteExtensionsEntries)[which]);
mView.putSetting(extension);
}
}
}
@@ -500,24 +500,25 @@ private void addWiimoteSettings(ArrayList<SettingsItem> sl)

private void addGraphicsSettings(ArrayList<SettingsItem> sl)
{
IntSetting videoBackend =
new IntSetting(SettingsFile.KEY_VIDEO_BACKEND_INDEX, Settings.SECTION_INI_CORE,
getVideoBackendValue());
Setting videoBackend = null;
Setting showFps = null;
Setting shaderCompilationMode = null;
Setting waitForShaders = null;
Setting aspectRatio = null;

SettingSection coreSection = mSettings.getSection(Settings.SECTION_INI_CORE);
videoBackend = coreSection.getSetting(SettingsFile.KEY_VIDEO_BACKEND);

SettingSection gfxSection = mSettings.getSection(Settings.SECTION_GFX_SETTINGS);
showFps = gfxSection.getSetting(SettingsFile.KEY_SHOW_FPS);
shaderCompilationMode = gfxSection.getSetting(SettingsFile.KEY_SHADER_COMPILATION_MODE);
waitForShaders = gfxSection.getSetting(SettingsFile.KEY_WAIT_FOR_SHADERS);
aspectRatio = gfxSection.getSetting(SettingsFile.KEY_ASPECT_RATIO);

sl.add(new HeaderSetting(null, null, R.string.graphics_general, 0));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_VIDEO_BACKEND_INDEX, Settings.SECTION_INI_CORE,
sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_VIDEO_BACKEND, Settings.SECTION_INI_CORE,
R.string.video_backend, 0, R.array.videoBackendEntries,
R.array.videoBackendValues, 0, videoBackend));
R.array.videoBackendValues, "OGL", videoBackend));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SHOW_FPS, Settings.SECTION_GFX_SETTINGS,
R.string.show_fps, R.string.show_fps_description, false, showFps));
sl.add(new SingleChoiceSettingDynamicDescriptions(SettingsFile.KEY_SHADER_COMPILATION_MODE,
@@ -985,28 +986,26 @@ private void addWiimoteSubSettings(ArrayList<SettingsItem> sl, int wiimoteNumber
// But game game specific extension settings are saved in their own profile. These profiles
// do not have any way to specify the controller that is loaded outside of knowing the filename
// of the profile that was loaded.
IntSetting extension;
Setting extension;
if (mGameID.equals(""))
{
extension = new IntSetting(SettingsFile.KEY_WIIMOTE_EXTENSION,
Settings.SECTION_WIIMOTE + wiimoteNumber, getExtensionValue(wiimoteNumber - 3),
MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION,
extension = mSettings.getSection(Settings.SECTION_WIIMOTE + (wiimoteNumber - 3)).
getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION);
sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION,
Settings.SECTION_WIIMOTE + (wiimoteNumber - 3), R.string.wiimote_extensions,
0, R.array.wiimoteExtensionsEntries,
R.array.wiimoteExtensionsValues, 0, extension,
R.array.wiimoteExtensionsValues, getExtensionValue(wiimoteNumber - 3), extension,
MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber)));
}
else
{
mSettings.loadWiimoteProfile(mGameID, String.valueOf(wiimoteNumber - 4));
extension = new IntSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4),
Settings.SECTION_CONTROLS, getExtensionValue(wiimoteNumber - 4),
MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4),
extension = mSettings.getSection(Settings.SECTION_CONTROLS).
getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4));
sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4),
Settings.SECTION_CONTROLS, R.string.wiimote_extensions,
0, R.array.wiimoteExtensionsEntries,
R.array.wiimoteExtensionsValues, 0, extension,
R.array.wiimoteExtensionsValues, getExtensionValue(wiimoteNumber - 4), extension,
MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber)));
}

@@ -1555,99 +1554,25 @@ private boolean getInvertedBooleanValue(String section, String key, boolean defa
}
}

private int getVideoBackendValue()
private String getExtensionValue(int wiimoteNumber)
{
SettingSection coreSection = mSettings.getSection(Settings.SECTION_INI_CORE);

int videoBackendValue;

try
{
String videoBackend =
((StringSetting) coreSection.getSetting(SettingsFile.KEY_VIDEO_BACKEND)).getValue();
if (videoBackend.equals("OGL"))
{
videoBackendValue = 0;
}
else if (videoBackend.equals("Vulkan"))
{
videoBackendValue = 1;
}
else if (videoBackend.equals("Software Renderer"))
{
videoBackendValue = 2;
}
else if (videoBackend.equals("Null"))
{
videoBackendValue = 3;
}
else
{
videoBackendValue = 0;
}
}
catch (NullPointerException ex)
{
videoBackendValue = 0;
}

return videoBackendValue;
}

private int getExtensionValue(int wiimoteNumber)
{
int extensionValue;

try
{
String extension;
if (mGameID.equals("")) // Main settings
{
extension =
((StringSetting) mSettings.getSection(Settings.SECTION_WIIMOTE + wiimoteNumber)
.getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION)).getValue();
return ((StringSetting) mSettings.getSection(Settings.SECTION_WIIMOTE + wiimoteNumber)
.getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION)).getValue();
}
else // Game settings
{
extension = ((StringSetting) mSettings.getSection(Settings.SECTION_PROFILE)
return ((StringSetting) mSettings.getSection(Settings.SECTION_PROFILE)
.getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION)).getValue();
}

if (extension.equals("None"))
{
extensionValue = 0;
}
else if (extension.equals("Nunchuk"))
{
extensionValue = 1;
}
else if (extension.equals("Classic"))
{
extensionValue = 2;
}
else if (extension.equals("Guitar"))
{
extensionValue = 3;
}
else if (extension.equals("Drums"))
{
extensionValue = 4;
}
else if (extension.equals("Turntable"))
{
extensionValue = 5;
}
else
{
extensionValue = 0;
}
}
catch (NullPointerException ex)
{
extensionValue = 0;
return "None";
}

return extensionValue;
}

public static String getDefaultNANDRootPath()
@@ -286,9 +286,6 @@
public static final String KEY_WIIMOTE_SCAN = "WiimoteContinuousScanning";
public static final String KEY_WIIMOTE_SPEAKER = "WiimoteEnableSpeaker";

// Internal only, not actually found in settings file.
public static final String KEY_VIDEO_BACKEND_INDEX = "VideoBackendIndex";

private static BiMap<String, String> sectionsMap = new BiMap<>();

static

0 comments on commit 92d24ae

Please sign in to comment.