diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2016-01-23 12:40:05 -0500 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2016-01-23 12:40:05 -0500 |
| commit | df5bdbe2797111846f6b5f32fc960934a4e299d9 (patch) | |
| tree | e83453ba5f8f68a77f1a2266bfa4ecbe10080ded /Source/Android/app/src/main | |
| parent | 3f5f52342a284887442c399249805283245cef4a (diff) | |
| parent | 2190496ce8d3e522f1510af9712bcb0d0b8f40f1 (diff) | |
Merge pull request #3547 from sigmabeta/android-config-rewrite
[Android] Rewrite settings UI.
Diffstat (limited to 'Source/Android/app/src/main')
66 files changed, 2647 insertions, 5856 deletions
diff --git a/Source/Android/app/src/main/AndroidManifest.xml b/Source/Android/app/src/main/AndroidManifest.xml index a6a7ecc888..57a0e62abd 100644 --- a/Source/Android/app/src/main/AndroidManifest.xml +++ b/Source/Android/app/src/main/AndroidManifest.xml @@ -56,9 +56,9 @@ android:label="@string/add_directory_title"/> <activity - android:name=".activities.SettingsActivity" + android:name=".ui.settings.SettingsActivity" android:theme="@style/DolphinSettingsGamecube" - android:label="@string/grid_menu_settings"/> + android:label="@string/grid_menu_core_settings"/> <activity android:name=".activities.EmulationActivity" @@ -71,8 +71,6 @@ <service android:name=".services.AssetCopyService"/> - <service android:name=".services.SettingsSaveService"/> - <provider android:name=".model.GameProvider" android:authorities="${applicationId}.provider" diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/SettingsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/SettingsActivity.java deleted file mode 100644 index d97eccb8e7..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/SettingsActivity.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.dolphinemu.dolphinemu.activities; - - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; - -import org.dolphinemu.dolphinemu.fragments.SettingsFragment; -import org.dolphinemu.dolphinemu.services.SettingsSaveService; -import org.dolphinemu.dolphinemu.utils.Log; - -public final class SettingsActivity extends AppCompatActivity -{ - @Override - protected void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - // Display the fragment as the main content. - getFragmentManager().beginTransaction() - .replace(android.R.id.content, new SettingsFragment(), "settings_fragment") - .commit(); - } - - /** - * If this is called, the user has left the settings screen (potentially through the - * home button) and will expect their changes to be persisted. So we kick off an - * IntentService which will do so on a background thread. - */ - @Override - protected void onStop() - { - super.onStop(); - - Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI..."); - - // Copy assets into appropriate locations. - Intent settingsSaver = new Intent(this, SettingsSaveService.class); - startService(settingsSaver); - } - - public static void launch(Context context) - { - Intent settings = new Intent(context, SettingsActivity.class); - context.startActivity(settings); - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/SettingsFragment.java deleted file mode 100644 index 0f549d470d..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/SettingsFragment.java +++ /dev/null @@ -1,155 +0,0 @@ -package org.dolphinemu.dolphinemu.fragments; - -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.os.Environment; -import android.preference.ListPreference; -import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; - -import org.dolphinemu.dolphinemu.R; -import org.dolphinemu.dolphinemu.utils.EGLHelper; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import javax.microedition.khronos.opengles.GL10; - -public final class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener -{ - private SharedPreferences mPreferences; - private ListPreference mVideoBackendPreference; - - private final EGLHelper mEglHelper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT); - private final String mVendor = mEglHelper.getGL().glGetString(GL10.GL_VENDOR); - - private final String mVersion = mEglHelper.getGL().glGetString(GL10.GL_VERSION); - - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - - // Load the preferences from an XML resource - addPreferencesFromResource(R.xml.preferences); - - // TODO Below here is effectively ported from the old VideoSettingsFragment. There is - // TODO probably a simpler way to do this, but potentially could require UI discussion/feedback. - - // Setting valid video backends. - mVideoBackendPreference = (ListPreference) findPreference("gpuPref"); - final boolean deviceSupportsGL = mEglHelper.supportsOpenGL(); - final boolean deviceSupportsGLES3 = mEglHelper.supportsGLES3(); - - if (deviceSupportsGL) - { - mVideoBackendPreference.setEntries(R.array.videoBackendEntriesGL); - mVideoBackendPreference.setEntryValues(R.array.videoBackendValuesGL); - } - else if (deviceSupportsGLES3) - { - mVideoBackendPreference.setEntries(R.array.videoBackendEntriesGLES3); - mVideoBackendPreference.setEntryValues(R.array.videoBackendValuesGLES3); - } - else - { - mVideoBackendPreference.setEntries(R.array.videoBackendEntriesNoGLES3); - mVideoBackendPreference.setEntryValues(R.array.videoBackendValuesNoGLES3); - } - - // - // Set available post processing shaders - // - - List<CharSequence> shader_names = new ArrayList<CharSequence>(); - List<CharSequence> shader_values = new ArrayList<CharSequence>(); - - // Disabled option - shader_names.add("Disabled"); - shader_values.add(""); - - // TODO Since shaders are included with the APK, we know what they are at build-time. We should - // TODO be able to run this logic somehow at build-time and not rely on the device doing it. - - File shaders_folder = new File(Environment.getExternalStorageDirectory() + File.separator + "dolphin-emu" + File.separator + "Shaders"); - if (shaders_folder.exists()) - { - File[] shaders = shaders_folder.listFiles(); - for (File file : shaders) - { - if (file.isFile()) - { - String filename = file.getName(); - if (filename.endsWith(".glsl")) - { - // Strip the extension and put it in to the list - shader_names.add(filename.substring(0, filename.lastIndexOf('.'))); - shader_values.add(filename.substring(0, filename.lastIndexOf('.'))); - } - } - } - } - - final ListPreference shader_preference = (ListPreference) findPreference("postProcessingShader"); - shader_preference.setEntries(shader_names.toArray(new CharSequence[shader_names.size()])); - shader_preference.setEntryValues(shader_values.toArray(new CharSequence[shader_values.size()])); - - // - // Disable all options if Software Rendering is used. - // - // Note that the numeric value in 'getPreference()' - // denotes the placement on the UI. So if more elements are - // added to the video settings, these may need to change. - // - mPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); - - if (mVideoBackendPreference.getValue().equals("Software Renderer")) - { - findPreference("enhancements").setEnabled(false); - findPreference("hacks").setEnabled(false); - findPreference("showFPS").setEnabled(false); - } - else if (mVideoBackendPreference.getValue().equals("OGL")) - { - findPreference("enhancements").setEnabled(true); - findPreference("hacks").setEnabled(true); - findPreference("showFPS").setEnabled(true); - - // Check if we support stereo - // If we support desktop GL then we must support at least OpenGL 3.2 - // If we only support OpenGLES then we need both OpenGLES 3.1 and AEP - if ((mEglHelper.supportsOpenGL() && mEglHelper.GetVersion() >= 320) || - (mEglHelper.supportsGLES3() && mEglHelper.GetVersion() >= 310 && mEglHelper.SupportsExtension("GL_ANDROID_extension_pack_es31a"))) - findPreference("StereoscopyScreen").setEnabled(true); - else - findPreference("StereoscopyScreen").setEnabled(false); - } - - // Also set a listener, so that if someone changes the video backend, it will disable - // the video settings, upon the user choosing "Software Rendering". - mPreferences.registerOnSharedPreferenceChangeListener(this); - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences preferences, String key) - { - if (key.equals("gpuPref")) - { - if (preferences.getString(key, "Software Renderer").equals("Software Renderer")) - { - findPreference("enhancements").setEnabled(false); - findPreference("hacks").setEnabled(false); - findPreference("showFPS").setEnabled(false); - } - else if (preferences.getString(key, "Software Renderer").equals("OGL")) - { - findPreference("enhancements").setEnabled(true); - findPreference("hacks").setEnabled(true); - findPreference("showFPS").setEnabled(true); - } - } - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/BooleanSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/BooleanSetting.java new file mode 100644 index 0000000000..478321bb8e --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/BooleanSetting.java @@ -0,0 +1,28 @@ +package org.dolphinemu.dolphinemu.model.settings; + +public final class BooleanSetting extends Setting +{ + private boolean mValue; + + public BooleanSetting(String key, String section, boolean value) + { + super(key, section); + mValue = value; + } + + public boolean getValue() + { + return mValue; + } + + public void setValue(boolean value) + { + mValue = value; + } + + @Override + public String getValueAsString() + { + return mValue ? "True" : "False"; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/FloatSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/FloatSetting.java new file mode 100644 index 0000000000..af78fac15d --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/FloatSetting.java @@ -0,0 +1,28 @@ +package org.dolphinemu.dolphinemu.model.settings; + +public final class FloatSetting extends Setting +{ + private float mValue; + + public FloatSetting(String key, String section, float value) + { + super(key, section); + mValue = value; + } + + public float getValue() + { + return mValue; + } + + public void setValue(float value) + { + mValue = value; + } + + @Override + public String getValueAsString() + { + return Float.toString(mValue); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/IntSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/IntSetting.java new file mode 100644 index 0000000000..334abc86b2 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/IntSetting.java @@ -0,0 +1,28 @@ +package org.dolphinemu.dolphinemu.model.settings; + +public final class IntSetting extends Setting +{ + private int mValue; + + public IntSetting(String key, String section, int value) + { + super(key, section); + mValue = value; + } + + public int getValue() + { + return mValue; + } + + public void setValue(int value) + { + mValue = value; + } + + @Override + public String getValueAsString() + { + return Integer.toString(mValue); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/Setting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/Setting.java new file mode 100644 index 0000000000..8ede2bbe07 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/Setting.java @@ -0,0 +1,48 @@ +package org.dolphinemu.dolphinemu.model.settings; + +/** + * Abstraction for a setting item as read from / written to Dolphin's configuration ini files. + * These files generally consist of a key/value pair, though the type of value is ambiguous and + * must be inferred at read-time. The type of value determines which child of this class is used + * to represent the Setting. + */ +public abstract class Setting +{ + private String mKey; + private String mSection; + + /** + * Base constructor. + * + * @param key Everything to the left of the = in a line from the ini file. + * @param section The corresponding recent section header; e.g. [Core] or [Enhancements] without the brackets. + */ + public Setting(String key, String section) + { + mKey = key; + mSection = section; + } + + /** + * + * @return The identifier used to write this setting to the ini file. + */ + public String getKey() + { + return mKey; + } + + /** + * + * @return The name of the header under which this Setting should be written in the ini file. + */ + public String getSection() + { + return mSection; + } + + /** + * @return A representation of this Setting's backing value converted to a String (e.g. for serialization). + */ + public abstract String getValueAsString(); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/SettingSection.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/SettingSection.java new file mode 100644 index 0000000000..9f082f6e9d --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/SettingSection.java @@ -0,0 +1,56 @@ +package org.dolphinemu.dolphinemu.model.settings; + +import java.util.HashMap; + +/** + * A semantically-related group of Settings objects. These Settings are + * internally stored as a Hashmap. + */ +public final class SettingSection +{ + private String mName; + + private HashMap<String, Setting> mSettings = new HashMap<>(); + + /** + * Create a new SettingSection with no Settings in it. + * + * @param name The header of this section; e.g. [Core] or [Enhancements] without the brackets. + */ + public SettingSection(String name) + { + mName = name; + } + + public String getName() + { + return mName; + } + + /** + * Convenience method; inserts a value directly into the backing Hashmap. + * + * @param key The key where the Setting will be inserted. + * @param setting The Setting to be inserted. + */ + public void putSetting(String key, Setting setting) + { + mSettings.put(key, setting); + } + + /** + * Convenience method; gets a value directly from the backing Hashmap. + * + * @param key Used to retrieve the Setting. + * @return A Setting object (you should probably cast this before using) + */ + public Setting getSetting(String key) + { + return mSettings.get(key); + } + + public HashMap<String, Setting> getSettings() + { + return mSettings; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/StringSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/StringSetting.java new file mode 100644 index 0000000000..257cb8a36d --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/StringSetting.java @@ -0,0 +1,28 @@ +package org.dolphinemu.dolphinemu.model.settings; + +public final class StringSetting extends Setting +{ + private String mValue; + + public StringSetting(String key, String section, String value) + { + super(key, section); + mValue = value; + } + + public String getValue() + { + return mValue; + } + + public void setValue(String value) + { + mValue = value; + } + + @Override + public String getValueAsString() + { + return mValue; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/CheckBoxSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/CheckBoxSetting.java new file mode 100644 index 0000000000..adc19f8c30 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/CheckBoxSetting.java @@ -0,0 +1,56 @@ +package org.dolphinemu.dolphinemu.model.settings.view; + + +import org.dolphinemu.dolphinemu.model.settings.BooleanSetting; +import org.dolphinemu.dolphinemu.model.settings.Setting; + +public final class CheckBoxSetting extends SettingsItem +{ + private boolean mDefaultValue; + + public CheckBoxSetting(String key, String section, int titleId, int descriptionId, boolean defaultValue, Setting setting) + { + super(key, section, setting, titleId, descriptionId); + mDefaultValue = defaultValue; + } + + public boolean isChecked() + { + if (getSetting() == null) + { + return mDefaultValue; + } + + BooleanSetting setting = (BooleanSetting) getSetting(); + return setting.getValue(); + } + + /** + * Write a value to the backing boolean. If that boolean was previously null, + * initializes a new one and returns it, so it can be added to the Hashmap. + * + * @param checked Pretty self explanatory. + * @return null if overwritten successfully; otherwise, a newly created BooleanSetting. + */ + public BooleanSetting setChecked(boolean checked) + { + if (getSetting() == null) + { + BooleanSetting setting = new BooleanSetting(getKey(), getSection(), checked); + setSetting(setting); + return setting; + } + else + { + BooleanSetting setting = (BooleanSetting) getSetting(); + setting.setValue(checked); + return null; + } + } + + @Override + public int getType() + { + return TYPE_CHECKBOX; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/HeaderSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/HeaderSetting.java new file mode 100644 index 0000000000..2d5744c555 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/HeaderSetting.java @@ -0,0 +1,18 @@ +package org.dolphinemu.dolphinemu.model.settings.view; + + +import org.dolphinemu.dolphinemu.model.settings.Setting; + +public final class HeaderSetting extends SettingsItem +{ + public HeaderSetting(String key, Setting setting, int titleId, int descriptionId) + { + super(key, null, setting, titleId, descriptionId); + } + + @Override + public int getType() + { + return SettingsItem.TYPE_HEADER; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java new file mode 100644 index 0000000000..4ec62717b7 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java @@ -0,0 +1,106 @@ +package org.dolphinemu.dolphinemu.model.settings.view; + +import org.dolphinemu.dolphinemu.model.settings.Setting; + +/** + * ViewModel abstraction for an Item in the RecyclerView powering SettingsFragments. + * Each one corresponds to a {@link Setting} object, so this class's subclasses + * should vaguely correspond to those subclasses. There are a few with multiple analogues + * and a few with none (Headers, for example, do not correspond to anything in the ini + * file.) + */ +public abstract class SettingsItem +{ + public static final int TYPE_HEADER = 0; + public static final int TYPE_CHECKBOX = 1; + public static final int TYPE_SINGLE_CHOICE = 2; + public static final int TYPE_SLIDER = 3; + public static final int TYPE_SUBMENU = 4; + + private String mKey; + private String mSection; + + private Setting mSetting; + + private int mNameId; + private int mDescriptionId; + + /** + * Base constructor. Takes a key / section name in case the third parameter, the Setting, + * is null; in which case, one can be constructed and saved using the key / section. + * + * @param key Identifier for the Setting represented by this Item. + * @param section Section to which the Setting belongs. + * @param setting A possibly-null backing Setting, to be modified on UI events. + * @param nameId Resource ID for a text string to be displayed as this setting's name. + * @param descriptionId Resource ID for a text string to be displayed as this setting's description. + */ + public SettingsItem(String key, String section, Setting setting, int nameId, int descriptionId) + { + mKey = key; + mSection = section; + mSetting = setting; + mNameId = nameId; + mDescriptionId = descriptionId; + } + + /** + * + * @return The identifier for the backing Setting. + */ + public String getKey() + { + return mKey; + } + + /** + * + * @return The header under which the backing Setting belongs. + */ + public String getSection() + { + return mSection; + } + + /** + * + * @return The backing Setting, possibly null. + */ + public Setting getSetting() + { + return mSetting; + } + + /** + * Replace the backing setting with a new one. Generally used in cases where + * the backing setting is null. + * + * @param setting A non-null Setting. + */ + public void setSetting(Setting setting) + { + mSetting = setting; + } + + /** + * + * @return A resource ID for a text string representing this Setting's name. + */ + public int getNameId() + { + return mNameId; + } + + public int getDescriptionId() + { + return mDescriptionId; + } + + /** + * Used by {@link org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter}'s onCreateViewHolder() + * method to determine which type of ViewHolder should be created. + * + * @return An integer (ideally, one of the constants defined in this file) + */ + public abstract int getType(); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SingleChoiceSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SingleChoiceSetting.java new file mode 100644 index 0000000000..07880587c2 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SingleChoiceSetting.java @@ -0,0 +1,73 @@ +package org.dolphinemu.dolphinemu.model.settings.view; + + +import org.dolphinemu.dolphinemu.model.settings.IntSetting; +import org.dolphinemu.dolphinemu.model.settings.Setting; + +public final class SingleChoiceSetting extends SettingsItem +{ + private int mDefaultValue; + + private int mChoicesId; + private int mValuesId; + + public SingleChoiceSetting(String key, String section, int titleId, int descriptionId, int choicesId, int valuesId, int defaultValue, Setting setting) + { + super(key, section, setting, titleId, descriptionId); + mValuesId = valuesId; + mChoicesId = choicesId; + mDefaultValue = defaultValue; + } + + public int getChoicesId() + { + return mChoicesId; + } + + public int getValuesId() + { + return mValuesId; + } + + public int getSelectedValue() + { + if (getSetting() != null) + { + IntSetting setting = (IntSetting) getSetting(); + return setting.getValue(); + } + else + { + return mDefaultValue; + } + } + + /** + * 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. + * + * @param selection New value of the int. + * @return null if overwritten successfully otherwise; a newly created IntSetting. + */ + public IntSetting setSelectedValue(int selection) + { + if (getSetting() == null) + { + IntSetting setting = new IntSetting(getKey(), getSection(), selection); + setSetting(setting); + return setting; + } + else + { + IntSetting setting = (IntSetting) getSetting(); + setting.setValue(selection); + return null; + } + } + + @Override + public int getType() + { + return TYPE_SINGLE_CHOICE; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SliderSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SliderSetting.java new file mode 100644 index 0000000000..0dbb39b521 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SliderSetting.java @@ -0,0 +1,118 @@ +package org.dolphinemu.dolphinemu.model.settings.view; + +import org.dolphinemu.dolphinemu.model.settings.FloatSetting; +import org.dolphinemu.dolphinemu.model.settings.IntSetting; +import org.dolphinemu.dolphinemu.model.settings.Setting; +import org.dolphinemu.dolphinemu.utils.Log; +import org.dolphinemu.dolphinemu.utils.SettingsFile; + +public final class SliderSetting extends SettingsItem +{ + private int mMax; + private int mDefaultValue; + + private String mUnits; + + public SliderSetting(String key, String section, int titleId, int descriptionId, int max, String units, int defaultValue, Setting setting) + { + super(key, section, setting, titleId, descriptionId); + mMax = max; + mUnits = units; + mDefaultValue = defaultValue; + } + + public int getMax() + { + return mMax; + } + + public int getSelectedValue() + { + Setting setting = getSetting(); + + if (setting == null) + { + return mDefaultValue; + } + + if (setting instanceof IntSetting) + { + IntSetting intSetting = (IntSetting) setting; + return intSetting.getValue(); + } + else if (setting instanceof FloatSetting) + { + FloatSetting floatSetting = (FloatSetting) setting; + if (floatSetting.getKey().equals(SettingsFile.KEY_OVERCLOCK_PERCENT)) + { + return Math.round(floatSetting.getValue() * 100); + } + else + { + return Math.round(floatSetting.getValue()); + } + } + else + { + Log.error("[SliderSetting] Error casting setting type."); + return -1; + } + } + + /** + * 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. + * + * @param selection New value of the int. + * @return null if overwritten successfully otherwise; a newly created IntSetting. + */ + public IntSetting setSelectedValue(int selection) + { + if (getSetting() == null) + { + IntSetting setting = new IntSetting(getKey(), getSection(), selection); + setSetting(setting); + return setting; + } + else + { + IntSetting setting = (IntSetting) getSetting(); + setting.setValue(selection); + return null; + } + } + + /** + * Write a value to the backing float. If that float was previously null, + * initializes a new one and returns it, so it can be added to the Hashmap. + * + * @param selection New value of the float. + * @return null if overwritten successfully otherwise; a newly created FloatSetting. + */ + public FloatSetting setSelectedValue(float selection) + { + if (getSetting() == null) + { + FloatSetting setting = new FloatSetting(getKey(), getSection(), selection); + setSetting(setting); + return setting; + } + else + { + FloatSetting setting = (FloatSetting) getSetting(); + setting.setValue(selection); + return null; + } + } + + public String getUnits() + { + return mUnits; + } + + @Override + public int getType() + { + return TYPE_SLIDER; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SubmenuSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SubmenuSetting.java new file mode 100644 index 0000000000..32db709b37 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SubmenuSetting.java @@ -0,0 +1,25 @@ +package org.dolphinemu.dolphinemu.model.settings.view; + +import org.dolphinemu.dolphinemu.model.settings.Setting; + +public final class SubmenuSetting extends SettingsItem +{ + private String mMenuKey; + + public SubmenuSetting(String key, Setting setting, int titleId, int descriptionId, String menuKey) + { + super(key, null, setting, titleId, descriptionId); + mMenuKey = menuKey; + } + + public String getMenuKey() + { + return mMenuKey; + } + + @Override + public int getType() + { + return TYPE_SUBMENU; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/AssetCopyService.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/AssetCopyService.java index 6004c88c5e..a93e9c501b 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/AssetCopyService.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/AssetCopyService.java @@ -13,7 +13,6 @@ import android.preference.PreferenceManager; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.utils.Log; -import org.dolphinemu.dolphinemu.utils.UserPreferences; import java.io.File; import java.io.FileOutputStream; @@ -61,10 +60,6 @@ public final class AssetCopyService extends IntentService copyAsset("GCPadNew.ini", ConfigDir + File.separator + "GCPadNew.ini"); copyAsset("WiimoteNew.ini", ConfigDir + File.separator + "WiimoteNew.ini"); - // Load the configuration keys set in the Dolphin ini and gfx ini files - // into the application's shared preferences. - UserPreferences.LoadIniToPrefs(this); - // Record the fact that we've done this before, so we don't do it on every launch. SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SettingsSaveService.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SettingsSaveService.java deleted file mode 100644 index 5be3f4d27c..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/SettingsSaveService.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.dolphinemu.dolphinemu.services; - -import android.app.IntentService; -import android.content.Intent; - -import org.dolphinemu.dolphinemu.utils.Log; -import org.dolphinemu.dolphinemu.utils.UserPreferences; - -/** - * IntentServices, unlike regular services, inherently run on a background thread. - * This IntentService saves all the options the user set in the Java-based UI into - * INI files the native code can read. - */ -public final class SettingsSaveService extends IntentService -{ - public SettingsSaveService() - { - super("SettingsSaveService"); - } - - @Override - protected void onHandleIntent(Intent intent) - { - Log.verbose("[SettingsSaveService] Saving settings to INI files..."); - UserPreferences.SavePrefsToIni(this); - Log.verbose("[SettingsSaveService] Save successful."); - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/DividerItemDecoration.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/DividerItemDecoration.java new file mode 100644 index 0000000000..fcd0befdc2 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/DividerItemDecoration.java @@ -0,0 +1,157 @@ +package org.dolphinemu.dolphinemu.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.view.View; + +/** + * Implementation from: + * https://gist.github.com/lapastillaroja/858caf1a82791b6c1a36 + */ +public final class DividerItemDecoration extends RecyclerView.ItemDecoration +{ + + private Drawable mDivider; + private boolean mShowFirstDivider = false; + private boolean mShowLastDivider = false; + + + public DividerItemDecoration(Context context, AttributeSet attrs) + { + final TypedArray a = context + .obtainStyledAttributes(attrs, new int[]{android.R.attr.listDivider}); + mDivider = a.getDrawable(0); + a.recycle(); + } + + public DividerItemDecoration(Context context, AttributeSet attrs, boolean showFirstDivider, + boolean showLastDivider) + { + this(context, attrs); + mShowFirstDivider = showFirstDivider; + mShowLastDivider = showLastDivider; + } + + public DividerItemDecoration(Drawable divider) + { + mDivider = divider; + } + + public DividerItemDecoration(Drawable divider, boolean showFirstDivider, + boolean showLastDivider) + { + this(divider); + mShowFirstDivider = showFirstDivider; + mShowLastDivider = showLastDivider; + } + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, + RecyclerView.State state) + { + super.getItemOffsets(outRect, view, parent, state); + if (mDivider == null) + { + return; + } + if (parent.getChildPosition(view) < 1) + { + return; + } + + if (getOrientation(parent) == LinearLayoutManager.VERTICAL) + { + outRect.top = mDivider.getIntrinsicHeight(); + } + else + { + outRect.left = mDivider.getIntrinsicWidth(); + } + } + + @Override + public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) + { + if (mDivider == null) + { + super.onDrawOver(c, parent, state); + return; + } + + // Initialization needed to avoid compiler warning + int left = 0, right = 0, top = 0, bottom = 0, size; + int orientation = getOrientation(parent); + int childCount = parent.getChildCount(); + + if (orientation == LinearLayoutManager.VERTICAL) + { + size = mDivider.getIntrinsicHeight(); + left = parent.getPaddingLeft(); + right = parent.getWidth() - parent.getPaddingRight(); + } + else + { //horizontal + size = mDivider.getIntrinsicWidth(); + top = parent.getPaddingTop(); + bottom = parent.getHeight() - parent.getPaddingBottom(); + } + + for (int i = mShowFirstDivider ? 0 : 1; i < childCount; i++) + { + View child = parent.getChildAt(i); + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + + if (orientation == LinearLayoutManager.VERTICAL) + { + top = child.getTop() - params.topMargin; + bottom = top + size; + } + else + { //horizontal + left = child.getLeft() - params.leftMargin; + right = left + size; + } + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(c); + } + + // show last divider + if (mShowLastDivider && childCount > 0) + { + View child = parent.getChildAt(childCount - 1); + RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); + if (orientation == LinearLayoutManager.VERTICAL) + { + top = child.getBottom() + params.bottomMargin; + bottom = top + size; + } + else + { // horizontal + left = child.getRight() + params.rightMargin; + right = left + size; + } + mDivider.setBounds(left, top, right, bottom); + mDivider.draw(c); + } + } + + private int getOrientation(RecyclerView parent) + { + if (parent.getLayoutManager() instanceof LinearLayoutManager) + { + LinearLayoutManager layoutManager = (LinearLayoutManager) parent.getLayoutManager(); + return layoutManager.getOrientation(); + } + else + { + throw new IllegalStateException( + "DividerItemDecoration can only be used with a LinearLayoutManager."); + } + } +}
\ No newline at end of file diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java index e112899201..57923e0e0e 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java @@ -16,10 +16,10 @@ import android.view.View; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.AddDirectoryActivity; -import org.dolphinemu.dolphinemu.activities.SettingsActivity; import org.dolphinemu.dolphinemu.adapters.PlatformPagerAdapter; import org.dolphinemu.dolphinemu.model.GameProvider; import org.dolphinemu.dolphinemu.ui.platform.PlatformGamesView; +import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity; import org.dolphinemu.dolphinemu.utils.StartupHandler; /** @@ -115,9 +115,9 @@ public final class MainActivity extends AppCompatActivity implements MainView } @Override - public void launchSettingsActivity() + public void launchSettingsActivity(String menuTag) { - SettingsActivity.launch(this); + SettingsActivity.launch(this, menuTag); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java index 97b7a39f25..c1052fc42a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java @@ -7,6 +7,7 @@ import org.dolphinemu.dolphinemu.DolphinApplication; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.model.GameDatabase; +import org.dolphinemu.dolphinemu.utils.SettingsFile; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; @@ -41,8 +42,12 @@ public final class MainPresenter { switch (itemId) { - case R.id.menu_settings: - mView.launchSettingsActivity(); + case R.id.menu_settings_core: + mView.launchSettingsActivity(SettingsFile.FILE_NAME_DOLPHIN); + return true; + + case R.id.menu_settings_video: + mView.launchSettingsActivity(SettingsFile.FILE_NAME_GFX); return true; case R.id.menu_refresh: diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainView.java index 1d286bebf3..12c8ae832c 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainView.java @@ -32,7 +32,7 @@ public interface MainView void refreshFragmentScreenshot(int fragmentPosition); - void launchSettingsActivity(); + void launchSettingsActivity(String menuTag); void launchFileListActivity(); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java index 38ab2eb4b4..95e4d04746 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java @@ -20,11 +20,12 @@ import android.support.v17.leanback.widget.RowPresenter; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.AddDirectoryActivity; import org.dolphinemu.dolphinemu.activities.EmulationActivity; -import org.dolphinemu.dolphinemu.activities.SettingsActivity; import org.dolphinemu.dolphinemu.adapters.GameRowPresenter; import org.dolphinemu.dolphinemu.adapters.SettingsRowPresenter; import org.dolphinemu.dolphinemu.model.Game; import org.dolphinemu.dolphinemu.model.TvSettingsItem; +import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity; +import org.dolphinemu.dolphinemu.utils.SettingsFile; import org.dolphinemu.dolphinemu.utils.StartupHandler; import org.dolphinemu.dolphinemu.viewholders.TvGameViewHolder; @@ -112,9 +113,9 @@ public final class TvMainActivity extends Activity implements MainView } @Override - public void launchSettingsActivity() + public void launchSettingsActivity(String menuTag) { - SettingsActivity.launch(this); + SettingsActivity.launch(this, SettingsFile.FILE_NAME_DOLPHIN); } @Override @@ -229,9 +230,13 @@ public final class TvMainActivity extends Activity implements MainView R.drawable.ic_refresh_tv, R.string.grid_menu_refresh)); - rowItems.add(new TvSettingsItem(R.id.menu_settings, - R.drawable.ic_settings_tv, - R.string.grid_menu_settings)); + rowItems.add(new TvSettingsItem(R.id.menu_settings_core, + R.drawable.ic_settings_core_tv, + R.string.grid_menu_core_settings)); + + rowItems.add(new TvSettingsItem(R.id.menu_settings_video, + R.drawable.ic_settings_graphics_tv, + R.string.grid_menu_core_settings)); rowItems.add(new TvSettingsItem(R.id.button_add_directory, R.drawable.ic_add_tv, diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java new file mode 100644 index 0000000000..7cd744aff2 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java @@ -0,0 +1,106 @@ +package org.dolphinemu.dolphinemu.ui.settings; + + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.AppCompatActivity; +import android.widget.Toast; + +import org.dolphinemu.dolphinemu.BuildConfig; +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.SettingSection; + +import java.util.HashMap; + +public final class SettingsActivity extends AppCompatActivity implements SettingsActivityView +{ + private SettingsActivityPresenter mPresenter = new SettingsActivityPresenter(this); + + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_settings); + + Intent launcher = getIntent(); + String filename = launcher.getStringExtra(ARGUMENT_FILE_NAME); + + mPresenter.onCreate(savedInstanceState, filename); + } + + /** + * If this is called, the user has left the settings screen (potentially through the + * home button) and will expect their changes to be persisted. So we kick off an + * IntentService which will do so on a background thread. + */ + @Override + protected void onStop() + { + super.onStop(); + + mPresenter.onStop(isFinishing()); + } + + @Override + public void showSettingsFragment(String menuTag, boolean addToStack) + { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_content, SettingsFragment.newInstance(menuTag), SettingsFragment.FRAGMENT_TAG); + + if (addToStack) + { + transaction.addToBackStack(null); + } + + transaction.commit(); + } + + @Override + public HashMap<String, SettingSection> getSettings() + { + return mPresenter.getSettings(); + } + + @Override + public void setSettings(HashMap<String, SettingSection> settings) + { + mPresenter.setSettings(settings); + } + + @Override + public void onSettingsFileLoaded(HashMap<String, SettingSection> settings) + { + SettingsFragmentView fragment = getFragment(); + + if (fragment != null) + { + fragment.onSettingsFileLoaded(settings); + } + } + + @Override + public void showToastMessage(String message) + { + Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); + } + + private SettingsFragment getFragment() + { + return (SettingsFragment) getSupportFragmentManager().findFragmentByTag(SettingsFragment.FRAGMENT_TAG); + } + + public static final String ARGUMENT_FILE_NAME = BuildConfig.APPLICATION_ID + ".file_name"; + + public static void launch(Context context, String menuTag) + { + Intent settings = new Intent(context, SettingsActivity.class); + + settings.putExtra(ARGUMENT_FILE_NAME, menuTag); + + context.startActivity(settings); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java new file mode 100644 index 0000000000..aac7e8e2ed --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java @@ -0,0 +1,97 @@ +package org.dolphinemu.dolphinemu.ui.settings; + + +import android.os.Bundle; + +import org.dolphinemu.dolphinemu.model.settings.SettingSection; +import org.dolphinemu.dolphinemu.utils.Log; +import org.dolphinemu.dolphinemu.utils.SettingsFile; + +import java.util.HashMap; + +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; +import rx.schedulers.Schedulers; + +public final class SettingsActivityPresenter +{ + private SettingsActivityView mView; + + private String mFileName; + private HashMap<String, SettingSection> mSettingsBySection; + + public SettingsActivityPresenter(SettingsActivityView view) + { + mView = view; + } + + public void onCreate(Bundle savedInstanceState, final String filename) + { + mFileName = filename; + + if (savedInstanceState == null) + { + SettingsFile.readFile(mFileName) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Action1<HashMap<String, SettingSection>>() + { + @Override + public void call(HashMap<String, SettingSection> settingsBySection) + { + mSettingsBySection = settingsBySection; + mView.onSettingsFileLoaded(settingsBySection); + } + }, + new Action1<Throwable>() + { + @Override + public void call(Throwable throwable) + { + Log.error("[SettingsActivityPresenter] Error reading file " + filename + ".ini: "+ throwable.getMessage()); + mView.onSettingsFileLoaded(null); + } + }); + + mView.showSettingsFragment(mFileName, false); + } + } + + public void setSettings(HashMap<String, SettingSection> settings) + { + mSettingsBySection = settings; + } + + public HashMap<String, SettingSection> getSettings() + { + return mSettingsBySection; + } + + public void onStop(boolean finishing) + { + if (mSettingsBySection != null && finishing) + { + Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI..."); + SettingsFile.saveFile(mFileName, mSettingsBySection) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + new Action1<Boolean>() + { + @Override + public void call(Boolean aBoolean) + { + mView.showToastMessage("Saved successfully to " + mFileName + ".ini"); + } + }, + new Action1<Throwable>() + { + @Override + public void call(Throwable throwable) + { + mView.showToastMessage("Error saving " + mFileName + ".ini: " + throwable.getMessage()); + } + }); + } + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java new file mode 100644 index 0000000000..2409ed1221 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java @@ -0,0 +1,51 @@ +package org.dolphinemu.dolphinemu.ui.settings; + +import org.dolphinemu.dolphinemu.model.settings.SettingSection; + +import java.util.HashMap; + +/** + * Abstraction for the Activity that manages SettingsFragments. + */ +public interface SettingsActivityView +{ + /** + * Show a new SettingsFragment. + * + * @param menuTag Identifier for the settings group that should be displayed. + * @param addToStack Whether or not this fragment should replace a previous one. + */ + void showSettingsFragment(String menuTag, boolean addToStack); + + /** + * Called by a contained Fragment to get access to the Setting Hashmap + * loaded from disk, so that each Fragment doesn't need to perform its own + * read operation. + * + * @return A possibly null Hashmap of Settings. + */ + HashMap<String, SettingSection> getSettings(); + + /** + * Used to provide the Activity with a Settings Hashmap if a Fragment already + * has one; for example, if a rotation occurs, the Fragment will not be killed, + * but the Activity will, so the Activity needs to have its Hashmap resupplied. + * + * @param settings The Fragment's Settings hashmap. + */ + void setSettings(HashMap<String, SettingSection> settings); + + /** + * Called when an asynchronous load operation completes. + * + * @param settings The (possibly null) result of the load operation. + */ + void onSettingsFileLoaded(HashMap<String, SettingSection> settings); + + /** + * Display a popup text message on screen. + * + * @param message The contents of the onscreen message. + */ + void showToastMessage(String message); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java new file mode 100644 index 0000000000..c83c578f06 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java @@ -0,0 +1,334 @@ +package org.dolphinemu.dolphinemu.ui.settings; + +import android.content.Context; +import android.content.DialogInterface; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.SeekBar; +import android.widget.TextView; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.BooleanSetting; +import org.dolphinemu.dolphinemu.model.settings.FloatSetting; +import org.dolphinemu.dolphinemu.model.settings.IntSetting; +import org.dolphinemu.dolphinemu.model.settings.view.CheckBoxSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.model.settings.view.SingleChoiceSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SliderSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SubmenuSetting; +import org.dolphinemu.dolphinemu.ui.settings.viewholder.CheckBoxSettingViewHolder; +import org.dolphinemu.dolphinemu.ui.settings.viewholder.HeaderViewHolder; +import org.dolphinemu.dolphinemu.ui.settings.viewholder.SettingViewHolder; +import org.dolphinemu.dolphinemu.ui.settings.viewholder.SingleChoiceViewHolder; +import org.dolphinemu.dolphinemu.ui.settings.viewholder.SliderViewHolder; +import org.dolphinemu.dolphinemu.ui.settings.viewholder.SubmenuViewHolder; +import org.dolphinemu.dolphinemu.utils.Log; +import org.dolphinemu.dolphinemu.utils.SettingsFile; + +import java.util.ArrayList; + +public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder> + implements DialogInterface.OnClickListener, SeekBar.OnSeekBarChangeListener +{ + private SettingsFragmentView mView; + private Context mContext; + private ArrayList<SettingsItem> mSettings; + + private SettingsItem mClickedItem; + private int mSeekbarProgress; + + private AlertDialog mDialog; + private TextView mTextSliderValue; + + public SettingsAdapter(SettingsFragmentView view, Context context) + { + mView = view; + mContext = context; + } + + @Override + public SettingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) + { + View view; + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + + switch (viewType) + { + case SettingsItem.TYPE_HEADER: + view = inflater.inflate(R.layout.list_item_settings_header, parent, false); + return new HeaderViewHolder(view, this); + + case SettingsItem.TYPE_CHECKBOX: + view = inflater.inflate(R.layout.list_item_setting_checkbox, parent, false); + return new CheckBoxSettingViewHolder(view, this); + + case SettingsItem.TYPE_SINGLE_CHOICE: + view = inflater.inflate(R.layout.list_item_setting, parent, false); + return new SingleChoiceViewHolder(view, this); + + case SettingsItem.TYPE_SLIDER: + view = inflater.inflate(R.layout.list_item_setting, parent, false); + return new SliderViewHolder(view, this); + + case SettingsItem.TYPE_SUBMENU: + view = inflater.inflate(R.layout.list_item_setting, parent, false); + return new SubmenuViewHolder(view, this); + + default: + Log.error("[SettingsAdapter] Invalid view type: " + viewType); + return null; + } + } + + @Override + public void onBindViewHolder(SettingViewHolder holder, int position) + { + holder.bind(getItem(position)); + } + + private SettingsItem getItem(int position) + { + return mSettings.get(position); + } + + @Override + public int getItemCount() + { + if (mSettings != null) + { + return mSettings.size(); + } + else + { + return 0; + } + } + + @Override + public int getItemViewType(int position) + { + return getItem(position).getType(); + } + + public void setSettings(ArrayList<SettingsItem> settings) + { + mSettings = settings; + notifyDataSetChanged(); + } + + public void onBooleanClick(CheckBoxSetting item, int position, boolean checked) + { + BooleanSetting setting = item.setChecked(checked); + notifyItemChanged(position); + + if (setting != null) + { + mView.putSetting(setting); + } + } + + public void onSingleChoiceClick(SingleChoiceSetting item) + { + mClickedItem = item; + + int value = getSelectionForSingleChoiceValue(item); + + AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity()); + + builder.setTitle(item.getNameId()); + builder.setSingleChoiceItems(item.getChoicesId(), value, this); + + mDialog = builder.show(); + } + + public void onSliderClick(SliderSetting item) + { + mClickedItem = item; + mSeekbarProgress = item.getSelectedValue(); + AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity()); + + LayoutInflater inflater = LayoutInflater.from(mView.getActivity()); + View view = inflater.inflate(R.layout.dialog_seekbar, null); + + builder.setTitle(item.getNameId()); + builder.setView(view); + builder.setPositiveButton(R.string.dialog_seekbar_pos, this); + builder.setNegativeButton(R.string.dialog_seekbar_neg, this); + mDialog = builder.show(); + + mTextSliderValue = (TextView) view.findViewById(R.id.text_value); + mTextSliderValue.setText(String.valueOf(mSeekbarProgress)); + + TextView units = (TextView) view.findViewById(R.id.text_units); + units.setText(item.getUnits()); + + SeekBar seekbar = (SeekBar) view.findViewById(R.id.seekbar); + + seekbar.setMax(item.getMax()); + seekbar.setProgress(mSeekbarProgress); + + seekbar.setOnSeekBarChangeListener(this); + } + + public void onSubmenuClick(SubmenuSetting item) + { + mView.loadSubMenu(item.getMenuKey()); + } + + @Override + public void onClick(DialogInterface dialog, int which) + { + if (mClickedItem instanceof SingleChoiceSetting) + { + SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem; + + int value = getValueForSingleChoiceSelection(scSetting, which); + + // 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_XFB_METHOD)) + { + putXfbSetting(which); + } + } + + closeDialog(); + } + else if (mClickedItem instanceof SliderSetting) + { + SliderSetting sliderSetting = (SliderSetting) mClickedItem; + if (sliderSetting.getSetting() instanceof FloatSetting) + { + float value; + + if (sliderSetting.getKey().equals(SettingsFile.KEY_OVERCLOCK_PERCENT)) + { + value = mSeekbarProgress / 100.0f; + } + else + { + value = (float) mSeekbarProgress; + } + + FloatSetting setting = sliderSetting.setSelectedValue(value); + if (setting != null) + { + mView.putSetting(setting); + } + } + else + { + IntSetting setting = sliderSetting.setSelectedValue(mSeekbarProgress); + if (setting != null) + { + mView.putSetting(setting); + } + } + } + + mClickedItem = null; + mSeekbarProgress = -1; + } + + public void closeDialog() + { + if (mDialog != null) + { + mDialog.dismiss(); + mDialog = null; + } + } + + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) + { + mSeekbarProgress = progress; + mTextSliderValue.setText(String.valueOf(mSeekbarProgress)); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) + { + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) + { + } + + private int getValueForSingleChoiceSelection(SingleChoiceSetting item, int which) + { + int valuesId = item.getValuesId(); + + if (valuesId > 0) + { + int[] valuesArray = mContext.getResources().getIntArray(valuesId); + return valuesArray[which]; + } + else + { + return which; + } + } + + private int getSelectionForSingleChoiceValue(SingleChoiceSetting item) + { + int value = item.getSelectedValue(); + int valuesId = item.getValuesId(); + + if (valuesId > 0) + { + int[] valuesArray = mContext.getResources().getIntArray(valuesId); + for (int index = 0; index < valuesArray.length; index++) + { + int current = valuesArray[index]; + if (current == value) + { + return index; + } + } + } + else + { + return value; + } + + return -1; + } + + public void putXfbSetting(int which) + { + BooleanSetting xfbEnable = null; + BooleanSetting xfbReal = null; + + switch (which) + { + case 0: + xfbEnable = new BooleanSetting(SettingsFile.KEY_XFB, SettingsFile.SECTION_GFX_SETTINGS, false); + xfbReal = new BooleanSetting(SettingsFile.KEY_XFB_REAL, SettingsFile.SECTION_GFX_SETTINGS, false); + break; + + case 1: + xfbEnable = new BooleanSetting(SettingsFile.KEY_XFB, SettingsFile.SECTION_GFX_SETTINGS, true); + xfbReal = new BooleanSetting(SettingsFile.KEY_XFB_REAL, SettingsFile.SECTION_GFX_SETTINGS, false); + break; + + case 2: + xfbEnable = new BooleanSetting(SettingsFile.KEY_XFB, SettingsFile.SECTION_GFX_SETTINGS, true); + xfbReal = new BooleanSetting(SettingsFile.KEY_XFB_REAL, SettingsFile.SECTION_GFX_SETTINGS, true); + break; + } + + mView.putSetting(xfbEnable); + mView.putSetting(xfbReal); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java new file mode 100644 index 0000000000..89e5edb056 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java @@ -0,0 +1,141 @@ +package org.dolphinemu.dolphinemu.ui.settings; + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.dolphinemu.dolphinemu.BuildConfig; +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.Setting; +import org.dolphinemu.dolphinemu.model.settings.SettingSection; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.ui.DividerItemDecoration; + +import java.util.ArrayList; +import java.util.HashMap; + +public final class SettingsFragment extends Fragment implements SettingsFragmentView +{ + private SettingsFragmentPresenter mPresenter = new SettingsFragmentPresenter(this); + private SettingsActivityView mActivity; + + private SettingsAdapter mAdapter; + + @Override + public void onAttach(Context context) + { + super.onAttach(context); + + mActivity = (SettingsActivityView) context; + mPresenter.onAttach(); + } + + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + setRetainInstance(true); + String menuTag = getArguments().getString(ARGUMENT_MENU_TAG); + + mAdapter = new SettingsAdapter(this, getActivity()); + + mPresenter.onCreate(menuTag); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) + { + return inflater.inflate(R.layout.fragment_settings, container, false); + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) + { + LinearLayoutManager manager = new LinearLayoutManager(getActivity()); + + RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.list_settings); + + recyclerView.setAdapter(mAdapter); + recyclerView.setLayoutManager(manager); + recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), null)); + + SettingsActivityView activity = (SettingsActivityView) getActivity(); + HashMap<String, SettingSection> settings = activity.getSettings(); + + mPresenter.onViewCreated(settings); + } + + @Override + public void onDetach() + { + super.onDetach(); + mActivity = null; + + if (mAdapter != null) + { + mAdapter.closeDialog(); + } + } + + @Override + public void onSettingsFileLoaded(HashMap<String, SettingSection> settings) + { + mPresenter.setSettings(settings); + } + + @Override + public void passSettingsToActivity(HashMap<String, SettingSection> settings) + { + if (mActivity != null) + { + mActivity.setSettings(settings); + } + } + + @Override + public void showSettingsList(ArrayList<SettingsItem> settingsList) + { + mAdapter.setSettings(settingsList); + } + + @Override + public void loadSubMenu(String menuKey) + { + mActivity.showSettingsFragment(menuKey, true); + } + + @Override + public void showToastMessage(String message) + { + mActivity.showToastMessage(message); + } + + @Override + public void putSetting(Setting setting) + { + mPresenter.putSetting(setting); + } + + public static final String FRAGMENT_TAG = BuildConfig.APPLICATION_ID + ".fragment.settings"; + + public static final String ARGUMENT_MENU_TAG = FRAGMENT_TAG + ".menu_tag"; + + public static Fragment newInstance(String menuTag) + { + SettingsFragment fragment = new SettingsFragment(); + + Bundle arguments = new Bundle(); + arguments.putString(ARGUMENT_MENU_TAG, menuTag); + + fragment.setArguments(arguments); + return fragment; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java new file mode 100644 index 0000000000..c338ec22fd --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java @@ -0,0 +1,257 @@ +package org.dolphinemu.dolphinemu.ui.settings; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.BooleanSetting; +import org.dolphinemu.dolphinemu.model.settings.IntSetting; +import org.dolphinemu.dolphinemu.model.settings.Setting; +import org.dolphinemu.dolphinemu.model.settings.SettingSection; +import org.dolphinemu.dolphinemu.model.settings.view.CheckBoxSetting; +import org.dolphinemu.dolphinemu.model.settings.view.HeaderSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.model.settings.view.SingleChoiceSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SliderSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SubmenuSetting; +import org.dolphinemu.dolphinemu.utils.EGLHelper; +import org.dolphinemu.dolphinemu.utils.SettingsFile; + +import java.util.ArrayList; +import java.util.HashMap; + +public final class SettingsFragmentPresenter +{ + private SettingsFragmentView mView; + + private String mMenuTag; + + private HashMap<String, SettingSection> mSettings; + private ArrayList<SettingsItem> mSettingsList; + + public SettingsFragmentPresenter(SettingsFragmentView view) + { + mView = view; + } + + public void onCreate(String menuTag) + { + mMenuTag = menuTag; + } + + public void onViewCreated(HashMap<String, SettingSection> settings) + { + setSettings(settings); + } + + /** + * If the screen is rotated, the Activity will forget the settings map. This fragment + * won't, though; so rather than have the Activity reload from disk, have the fragment pass + * the settings map back to the Activity. + */ + public void onAttach() + { + if (mSettings != null) + { + mView.passSettingsToActivity(mSettings); + } + } + + public void putSetting(Setting setting) + { + mSettings.get(setting.getSection()).putSetting(setting.getKey(), setting); + } + + public void setSettings(HashMap<String, SettingSection> settings) + { + if (mSettingsList == null) + { + mSettings = settings; + + loadSettingsList(); + } + else + { + mView.showSettingsList(mSettingsList); + } + } + + private void loadSettingsList() + { + ArrayList<SettingsItem> sl = new ArrayList<>(); + + switch (mMenuTag) + { + case SettingsFile.FILE_NAME_DOLPHIN: + addCoreSettings(sl); + break; + + case SettingsFile.FILE_NAME_GFX: + addGraphicsSettings(sl); + break; + + case SettingsFile.SECTION_GFX_ENHANCEMENTS: + addEnhanceSettings(sl); + break; + + case SettingsFile.SECTION_GFX_HACKS: + addHackSettings(sl); + break; + + default: + mView.showToastMessage("Unimplemented menu."); + return; + } + + mSettingsList = sl; + mView.showSettingsList(mSettingsList); + } + + private void addCoreSettings(ArrayList<SettingsItem> sl) + { + Setting cpuCore = null; + Setting dualCore = null; + Setting overclockEnable = null; + Setting overclock = null; + + if (mSettings != null) + { + cpuCore = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_CPU_CORE); + dualCore = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_DUAL_CORE); + overclockEnable = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_ENABLE); + overclock = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_PERCENT); + } + else + { + mSettings = new HashMap<>(); + mSettings.put(SettingsFile.SECTION_CORE, new SettingSection(SettingsFile.SECTION_CORE)); + + mView.passSettingsToActivity(mSettings); + } + + // TODO Set default value for cpuCore based on arch. + sl.add(new SingleChoiceSetting(SettingsFile.KEY_CPU_CORE, SettingsFile.SECTION_CORE, R.string.cpu_core, 0, R.array.string_emu_cores, R.array.int_emu_cores, 4, cpuCore)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_DUAL_CORE, SettingsFile.SECTION_CORE, R.string.dual_core, R.string.dual_core_descrip, true, dualCore)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_OVERCLOCK_ENABLE, SettingsFile.SECTION_CORE, R.string.overclock_enable, R.string.overclock_enable_description, false, overclockEnable)); + sl.add(new SliderSetting(SettingsFile.KEY_OVERCLOCK_PERCENT, SettingsFile.SECTION_CORE, R.string.overclock_title, 0, 400, "%", 100, overclock)); + + } + + private void addGraphicsSettings(ArrayList<SettingsItem> sl) + { + Setting showFps = null; + + if (mSettings != null) + { + showFps = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_SHOW_FPS); + } + else + { + mSettings = new HashMap<>(); + + mSettings.put(SettingsFile.SECTION_GFX_SETTINGS, new SettingSection(SettingsFile.SECTION_GFX_SETTINGS)); + mSettings.put(SettingsFile.SECTION_GFX_ENHANCEMENTS, new SettingSection(SettingsFile.SECTION_GFX_ENHANCEMENTS)); + mSettings.put(SettingsFile.SECTION_GFX_HACKS, new SettingSection(SettingsFile.SECTION_GFX_HACKS)); + + mView.passSettingsToActivity(mSettings); + } + + sl.add(new CheckBoxSetting(SettingsFile.KEY_SHOW_FPS, SettingsFile.SECTION_GFX_SETTINGS, R.string.show_fps, 0, true, showFps)); + + sl.add(new SubmenuSetting(null, null, R.string.enhancements, 0, SettingsFile.SECTION_GFX_ENHANCEMENTS)); + sl.add(new SubmenuSetting(null, null, R.string.hacks, 0, SettingsFile.SECTION_GFX_HACKS)); + } + + private void addEnhanceSettings(ArrayList<SettingsItem> sl) + { + Setting resolution = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_INTERNAL_RES); + Setting fsaa = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_FSAA); + Setting anisotropic = mSettings.get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_ANISOTROPY); + Setting efbScaledCopy = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_SCALED_EFB); + Setting perPixel = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_PER_PIXEL); + Setting forceFilter = mSettings.get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_FORCE_FILTERING); + Setting disableFog = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_DISABLE_FOG); + + sl.add(new SingleChoiceSetting(SettingsFile.KEY_INTERNAL_RES, SettingsFile.SECTION_GFX_SETTINGS, R.string.internal_resolution, R.string.internal_resolution_descrip, R.array.internalResolutionEntries, R.array.internalResolutionValues, 0, resolution)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_FSAA, SettingsFile.SECTION_GFX_SETTINGS, R.string.FSAA, R.string.FSAA_descrip, R.array.FSAAEntries, R.array.FSAAValues, 0, fsaa)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_ANISOTROPY, SettingsFile.SECTION_GFX_ENHANCEMENTS, R.string.anisotropic_filtering, R.string.anisotropic_filtering_descrip, R.array.anisotropicFilteringEntries, R.array.anisotropicFilteringValues, 0, anisotropic)); + + // TODO +// Setting shader = mSettings.get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_POST_SHADER) +// sl.add(new SingleChoiceSetting(.getKey(), , R.string., R.string._descrip, R.array., R.array.)); + + sl.add(new CheckBoxSetting(SettingsFile.KEY_SCALED_EFB, SettingsFile.SECTION_GFX_HACKS, R.string.scaled_efb_copy, R.string.scaled_efb_copy_descrip, true, efbScaledCopy)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_PER_PIXEL, SettingsFile.SECTION_GFX_SETTINGS, R.string.per_pixel_lighting, R.string.per_pixel_lighting_descrip, false, perPixel)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_FORCE_FILTERING, SettingsFile.SECTION_GFX_ENHANCEMENTS, R.string.force_texture_filtering, R.string.force_texture_filtering_descrip, false, forceFilter)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_DISABLE_FOG, SettingsFile.SECTION_GFX_SETTINGS, R.string.disable_fog, R.string.disable_fog_descrip, false, disableFog)); + + /* + Check if we support stereo + If we support desktop GL then we must support at least OpenGL 3.2 + If we only support OpenGLES then we need both OpenGLES 3.1 and AEP + */ + EGLHelper helper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT); + + if ((helper.supportsOpenGL() && helper.GetVersion() >= 320) || + (helper.supportsGLES3() && helper.GetVersion() >= 310 && helper.SupportsExtension("GL_ANDROID_extension_pack_es31a"))) + { + sl.add(new SubmenuSetting(null, null, R.string.stereoscopy, 0, SettingsFile.SECTION_STEREOSCOPY)); + } + } + + private void addHackSettings(ArrayList<SettingsItem> sl) + { + int xfbValue = getXfbValue(); + + Setting skipEFB = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_SKIP_EFB); + Setting ignoreFormat = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_IGNORE_FORMAT); + Setting efbToTexture = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_EFB_TEXTURE); + Setting texCacheAccuracy = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_TEXCACHE_ACCURACY); + IntSetting xfb = new IntSetting(SettingsFile.KEY_XFB, SettingsFile.SECTION_GFX_HACKS, xfbValue); + Setting fastDepth = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_FAST_DEPTH); + Setting aspectRatio = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_ASPECT_RATIO); + + sl.add(new HeaderSetting(null, null, R.string.embedded_frame_buffer, 0)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_SKIP_EFB, SettingsFile.SECTION_GFX_HACKS, R.string.skip_efb_access, R.string.skip_efb_access_descrip, false, skipEFB)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_IGNORE_FORMAT, SettingsFile.SECTION_GFX_HACKS, R.string.ignore_format_changes, R.string.ignore_format_changes_descrip, false, ignoreFormat)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_EFB_TEXTURE, SettingsFile.SECTION_GFX_HACKS, R.string.efb_copy_method, R.string.efb_copy_method_descrip, true, efbToTexture)); + + sl.add(new HeaderSetting(null, null, R.string.texture_cache, 0)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_TEXCACHE_ACCURACY, SettingsFile.SECTION_GFX_HACKS, R.string.texture_cache_accuracy, R.string.texture_cache_accuracy_descrip, R.array.textureCacheAccuracyEntries, R.array.textureCacheAccuracyValues, 128, texCacheAccuracy)); + + sl.add(new HeaderSetting(null, null, R.string.external_frame_buffer, 0)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_XFB_METHOD, SettingsFile.SECTION_GFX_HACKS, R.string.external_frame_buffer, R.string.external_frame_buffer_descrip, R.array.externalFrameBufferEntries, R.array.externalFrameBufferValues, 0, xfb)); + + sl.add(new HeaderSetting(null, null, R.string.other, 0)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_FAST_DEPTH, SettingsFile.SECTION_GFX_HACKS, R.string.fast_depth_calculation, R.string.fast_depth_calculation_descrip, true, fastDepth)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_ASPECT_RATIO, SettingsFile.SECTION_GFX_HACKS, R.string.aspect_ratio, R.string.aspect_ratio_descrip, R.array.aspectRatioEntries, R.array.aspectRatioValues, 0, aspectRatio)); + } + + private int getXfbValue() + { + int xfbValue; + + try + { + boolean usingXFB = ((BooleanSetting) mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_XFB)).getValue(); + boolean usingRealXFB = ((BooleanSetting) mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_XFB_REAL)).getValue(); + + if (!usingXFB) + { + xfbValue = 0; + } + else if (!usingRealXFB) + { + xfbValue = 1; + } + else + { + xfbValue = 2; + } + } + catch (NullPointerException ex) + { + xfbValue = 0; + } + + return xfbValue; + } +} + diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java new file mode 100644 index 0000000000..c437863c94 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java @@ -0,0 +1,68 @@ +package org.dolphinemu.dolphinemu.ui.settings; + +import android.app.Activity; + +import org.dolphinemu.dolphinemu.model.settings.Setting; +import org.dolphinemu.dolphinemu.model.settings.SettingSection; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * Abstraction for a screen showing a list of settings. Instances of + * this type of view will each display a layer of the setting hierarchy. + */ +public interface SettingsFragmentView +{ + /** + * Called by the containing Activity to notify the Fragment that an + * asynchronous load operation completed. + * + * @param settings The potentially-null result of the load operation. + */ + void onSettingsFileLoaded(HashMap<String, SettingSection> settings); + + /** + * Pass a settings Hashmap to the containing activity, so that it can + * share the Hashmap with other SettingsFragments; useful so that rotations + * do not require an additional load operation. + * + * @param settings A Hashmap containing all the settings + */ + void passSettingsToActivity(HashMap<String, SettingSection> settings); + + /** + * Pass an ArrayList to the View so that it can be displayed on screen. + * + * @param settingsList The result of converting the Hashmap to an ArrayList + */ + void showSettingsList(ArrayList<SettingsItem> settingsList); + + /** + * @return The Fragment's containing activity. + */ + Activity getActivity(); + + /** + * Tell the Fragment to tell the containing Activity to show a new + * Fragment containing a submenu of settings. + * + * @param menuKey Identifier for the settings group that should be shown. + */ + void loadSubMenu(String menuKey); + + /** + * Tell the Fragment to tell the containing activity to display a toast message. + * + * @param message Text to be shown in the Toast + */ + void showToastMessage(String message); + + /** + * Have the fragment add a setting to the Hashmap. + * + * @param setting The (possibly previously missing) new setting. + */ + void putSetting(Setting setting); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/CheckBoxSettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/CheckBoxSettingViewHolder.java new file mode 100644 index 0000000000..c65fde1d66 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/CheckBoxSettingViewHolder.java @@ -0,0 +1,57 @@ +package org.dolphinemu.dolphinemu.ui.settings.viewholder; + + +import android.view.View; +import android.widget.CheckBox; +import android.widget.TextView; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.view.CheckBoxSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter; + +public final class CheckBoxSettingViewHolder extends SettingViewHolder +{ + private CheckBoxSetting mItem; + + private TextView mTextSettingName; + private TextView mTextSettingDescription; + + private CheckBox mCheckbox; + + public CheckBoxSettingViewHolder(View itemView, SettingsAdapter adapter) + { + super(itemView, adapter); + } + + @Override + protected void findViews(View root) + { + mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name); + mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description); + mCheckbox = (CheckBox) root.findViewById(R.id.checkbox); + } + + @Override + public void bind(SettingsItem item) + { + mItem = (CheckBoxSetting) item; + + mTextSettingName.setText(item.getNameId()); + + if (item.getDescriptionId() > 0) + { + mTextSettingDescription.setText(item.getDescriptionId()); + } + + mCheckbox.setChecked(mItem.isChecked()); + } + + @Override + public void onClick(View clicked) + { + mCheckbox.toggle(); + + getAdapter().onBooleanClick(mItem, getAdapterPosition(), mCheckbox.isChecked()); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/HeaderViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/HeaderViewHolder.java new file mode 100644 index 0000000000..6e3b53d4b3 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/HeaderViewHolder.java @@ -0,0 +1,37 @@ +package org.dolphinemu.dolphinemu.ui.settings.viewholder; + +import android.view.View; +import android.widget.TextView; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter; + +public final class HeaderViewHolder extends SettingViewHolder +{ + private TextView mHeaderName; + + public HeaderViewHolder(View itemView, SettingsAdapter adapter) + { + super(itemView, adapter); + itemView.setOnClickListener(null); + } + + @Override + protected void findViews(View root) + { + mHeaderName = (TextView) root.findViewById(R.id.text_header_name); + } + + @Override + public void bind(SettingsItem item) + { + mHeaderName.setText(item.getNameId()); + } + + @Override + public void onClick(View clicked) + { + // no-op + } +}
\ No newline at end of file diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SettingViewHolder.java new file mode 100644 index 0000000000..f57e9fc82c --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SettingViewHolder.java @@ -0,0 +1,51 @@ +package org.dolphinemu.dolphinemu.ui.settings.viewholder; + +import android.support.v7.widget.RecyclerView; +import android.view.View; + +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter; + +public abstract class SettingViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener +{ + private SettingsAdapter mAdapter; + + public SettingViewHolder(View itemView, SettingsAdapter adapter) + { + super(itemView); + + mAdapter = adapter; + + itemView.setOnClickListener(this); + + findViews(itemView); + } + + protected SettingsAdapter getAdapter() + { + return mAdapter; + } + + /** + * Gets handles to all this ViewHolder's child views using their XML-defined identifiers. + * + * @param root The newly inflated top-level view. + */ + protected abstract void findViews(View root); + + /** + * Called by the adapter to set this ViewHolder's child views to display the list item + * it must now represent. + * + * @param item The list item that should be represented by this ViewHolder. + */ + public abstract void bind(SettingsItem item); + + /** + * Called when this ViewHolder's view is clicked on. Implementations should usually pass + * this event up to the adapter. + * + * @param clicked The view that was clicked on. + */ + public abstract void onClick(View clicked); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SingleChoiceViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SingleChoiceViewHolder.java new file mode 100644 index 0000000000..add1b76637 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SingleChoiceViewHolder.java @@ -0,0 +1,48 @@ +package org.dolphinemu.dolphinemu.ui.settings.viewholder; + +import android.view.View; +import android.widget.TextView; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.model.settings.view.SingleChoiceSetting; +import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter; + +public final class SingleChoiceViewHolder extends SettingViewHolder +{ + private SingleChoiceSetting mItem; + + private TextView mTextSettingName; + private TextView mTextSettingDescription; + + public SingleChoiceViewHolder(View itemView, SettingsAdapter adapter) + { + super(itemView, adapter); + } + + @Override + protected void findViews(View root) + { + mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name); + mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description); + } + + @Override + public void bind(SettingsItem item) + { + mItem = (SingleChoiceSetting) item; + + mTextSettingName.setText(item.getNameId()); + + if (item.getDescriptionId() > 0) + { + mTextSettingDescription.setText(item.getDescriptionId()); + } + } + + @Override + public void onClick(View clicked) + { + getAdapter().onSingleChoiceClick(mItem); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SliderViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SliderViewHolder.java new file mode 100644 index 0000000000..9615c720fb --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SliderViewHolder.java @@ -0,0 +1,50 @@ +package org.dolphinemu.dolphinemu.ui.settings.viewholder; + + +import android.view.View; +import android.widget.TextView; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.model.settings.view.SliderSetting; +import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter; + +public final class SliderViewHolder extends SettingViewHolder +{ + private SliderSetting mItem; + + private TextView mTextSettingName; + private TextView mTextSettingDescription; + + public SliderViewHolder(View itemView, SettingsAdapter adapter) + { + super(itemView, adapter); + } + + @Override + protected void findViews(View root) + { + mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name); + mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description); + } + + @Override + public void bind(SettingsItem item) + { + mItem = (SliderSetting) item; + + mTextSettingName.setText(item.getNameId()); + + if (item.getDescriptionId() > 0) + { + mTextSettingDescription.setText(item.getDescriptionId()); + } + } + + @Override + public void onClick(View clicked) + { + getAdapter().onSliderClick(mItem); + } +} + diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SubmenuViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SubmenuViewHolder.java new file mode 100644 index 0000000000..4a8243cec7 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SubmenuViewHolder.java @@ -0,0 +1,48 @@ +package org.dolphinemu.dolphinemu.ui.settings.viewholder; + +import android.view.View; +import android.widget.TextView; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; +import org.dolphinemu.dolphinemu.model.settings.view.SubmenuSetting; +import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter; + +public final class SubmenuViewHolder extends SettingViewHolder +{ + private SubmenuSetting mItem; + + private TextView mTextSettingName; + private TextView mTextSettingDescription; + + public SubmenuViewHolder(View itemView, SettingsAdapter adapter) + { + super(itemView, adapter); + } + + @Override + protected void findViews(View root) + { + mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name); + mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description); + } + + @Override + public void bind(SettingsItem item) + { + mItem = (SubmenuSetting) item; + + mTextSettingName.setText(item.getNameId()); + + if (item.getDescriptionId() > 0) + { + mTextSettingDescription.setText(item.getDescriptionId()); + } + } + + @Override + public void onClick(View clicked) + { + getAdapter().onSubmenuClick(mItem); + } +}
\ No newline at end of file diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java new file mode 100644 index 0000000000..865e3371ae --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java @@ -0,0 +1,302 @@ +package org.dolphinemu.dolphinemu.utils; + +import android.os.Environment; +import android.support.annotation.NonNull; + +import org.dolphinemu.dolphinemu.model.settings.BooleanSetting; +import org.dolphinemu.dolphinemu.model.settings.FloatSetting; +import org.dolphinemu.dolphinemu.model.settings.IntSetting; +import org.dolphinemu.dolphinemu.model.settings.Setting; +import org.dolphinemu.dolphinemu.model.settings.SettingSection; +import org.dolphinemu.dolphinemu.model.settings.StringSetting; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Set; + +import rx.Observable; +import rx.Subscriber; + +/** + * Contains static methods for interacting with .ini files in which settings are stored. + */ +public final class SettingsFile +{ + public static final String FILE_NAME_DOLPHIN = "Dolphin"; + public static final String FILE_NAME_GFX = "GFX"; + public static final String FILE_NAME_GCPAD = "GCPadNew"; + public static final String FILE_NAME_WIIMOTE = "WiimoteNew"; + + public static final String SECTION_CORE = "Core"; + + public static final String SECTION_GFX_SETTINGS = "Settings"; + public static final String SECTION_GFX_ENHANCEMENTS = "Enhancements"; + public static final String SECTION_GFX_HACKS = "Hacks"; + + public static final String SECTION_STEREOSCOPY = "Stereoscopy"; + + public static final String KEY_CPU_CORE = "CPUCore"; + public static final String KEY_DUAL_CORE = "CPUThread"; + public static final String KEY_OVERCLOCK_ENABLE = "OverclockEnable"; + public static final String KEY_OVERCLOCK_PERCENT = "Overclock"; + public static final String KEY_VIDEO_BACKEND = "GFXBackend"; + + public static final String KEY_SHOW_FPS = "ShowFPS"; + public static final String KEY_INTERNAL_RES = "EFBScale"; + public static final String KEY_FSAA = "MSAA"; + public static final String KEY_ANISOTROPY = "MaxAnisotropy"; + public static final String KEY_POST_SHADER = "PostProcessingShader"; + public static final String KEY_SCALED_EFB = "EFBScaledCopy"; + public static final String KEY_PER_PIXEL = "EnablePixelLighting"; + public static final String KEY_FORCE_FILTERING = "ForceFiltering"; + public static final String KEY_DISABLE_FOG = "DisableFog"; + + public static final String KEY_STEREO_MODE = "StereoMode"; + public static final String KEY_STEREO_DEPTH = "StereoDepth"; + public static final String KEY_STEREO_CONV = "StereoConvergencePercentage"; + public static final String KEY_STEREO_SWAP = "StereoSwapEyes"; + + public static final String KEY_SKIP_EFB = "EFBAccessEnable"; + public static final String KEY_IGNORE_FORMAT = "EFBEmulateFormatChanges"; + public static final String KEY_EFB_COPY = "EFBCopyEnable"; + public static final String KEY_EFB_TEXTURE = "EFBToTextureEnable"; + public static final String KEY_EFB_CACHE = "EFBCopyCacheEnable"; + public static final String KEY_TEXCACHE_ACCURACY = "SafeTextureCacheColorSamples"; + public static final String KEY_XFB = "UseXFB"; + public static final String KEY_XFB_REAL = "UseRealXFB"; + public static final String KEY_FAST_DEPTH= "FastDepthCalc"; + public static final String KEY_ASPECT_RATIO= "AspectRatio"; + + // Internal only, not actually found in settings file. + public static final String KEY_XFB_METHOD = "XFBMethod"; + + private SettingsFile() + { + } + + /** + * Reads a given .ini file from disk and returns it as an Rx Observable. If successful, + * this Observable emits a Hashmap of SettingSections, themselves effectively a Hashmap of + * key/value settings. If unsuccessful, the observer notifies the subscriber of why it failed. + * + * @param fileName The name of the settings file without a path or extension. + * @return An Observable that emits a Hashmap of the file's contents, then completes. + */ + public static Observable<HashMap<String, SettingSection>> readFile(final String fileName) + { + return Observable.create(new Observable.OnSubscribe<HashMap<String, SettingSection>>() + { + @Override + public void call(Subscriber<? super HashMap<String, SettingSection>> subscriber) + { + + HashMap<String, SettingSection> sections = new HashMap<>(); + + File ini = getSettingsFile(fileName); + + BufferedReader reader = null; + + try + { + reader = new BufferedReader(new FileReader(ini)); + + SettingSection current = null; + for (String line; (line = reader.readLine()) != null; ) + { + if (line.startsWith("[") && line.endsWith("]")) + { + current = sectionFromLine(line); + sections.put(current.getName(), current); + } + else if ((current != null) && line.contains("=")) + { + Setting setting = settingFromLine(current, line); + current.putSetting(setting.getKey(), setting); + } + } + } + catch (FileNotFoundException e) + { + Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.getMessage()); + subscriber.onError(e); + } + catch (IOException e) + { + Log.error("[SettingsFile] Error reading from: " + fileName + ".ini: " + e.getMessage()); + subscriber.onError(e); + } finally + { + if (reader != null) + { + try + { + reader.close(); + } + catch (IOException e) + { + Log.error("[SettingsFile] Error closing: " + fileName + ".ini: " + e.getMessage()); + subscriber.onError(e); + } + } + } + + subscriber.onNext(sections); + subscriber.onCompleted(); + } + }); + } + + /** + * Saves a Settings Hashmap to a given .ini file on disk, returning the operation + * as an Rx Observable. If successful, this Observable emits an event to notify subscribers; + * if unsuccessful, the observer notifies the subscriber of why it failed. + * + * @param fileName The target filename without a path or extension. + * @param sections The hashmap containing the Settings we want to serialize. + * @return An Observable representing the operation. + */ + public static Observable<Boolean> saveFile(final String fileName, final HashMap<String, SettingSection> sections) + { + return Observable.create(new Observable.OnSubscribe<Boolean>() + { + @Override + public void call(Subscriber<? super Boolean> subscriber) + { + File ini = getSettingsFile(fileName); + + PrintWriter writer = null; + try + { + writer = new PrintWriter(ini, "UTF-8"); + + Set<String> keySet = sections.keySet(); + + for (String key : keySet) + { + SettingSection section = sections.get(key); + writeSection(writer, section); + } + } + catch (FileNotFoundException e) + { + Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.getMessage()); + subscriber.onError(e); + } + catch (UnsupportedEncodingException e) + { + Log.error("[SettingsFile] Bad encoding; please file a bug report: " + fileName + ".ini: " + e.getMessage()); + subscriber.onError(e); + } finally + { + if (writer != null) + { + writer.close(); + } + } + + subscriber.onNext(true); + subscriber.onCompleted(); + } + }); + } + + @NonNull + private static File getSettingsFile(String fileName) + { + String storagePath = Environment.getExternalStorageDirectory().getAbsolutePath(); + return new File(storagePath + "/dolphin-emu/Config/" + fileName + ".ini"); + } + + private static SettingSection sectionFromLine(String line) + { + String sectionName = line.substring(1, line.length() - 1); + return new SettingSection(sectionName); + } + + /** + * For a line of text, determines what type of data is being represented, and returns + * a Setting object containing this data. + * + * @param current The section currently being parsed by the consuming method. + * @param line The line of text being parsed. + * @return A typed Setting containing the key/value contained in the line. + */ + private static Setting settingFromLine(SettingSection current, String line) + { + String[] splitLine = line.split("="); + + String key = splitLine[0].trim(); + String value = splitLine[1].trim(); + + try + { + int valueAsInt = Integer.valueOf(value); + + return new IntSetting(key, current.getName(), valueAsInt); + } + catch (NumberFormatException ex) + { + } + + try + { + float valueAsFloat = Float.valueOf(value); + + return new FloatSetting(key, current.getName(), valueAsFloat); + } + catch (NumberFormatException ex) + { + } + + switch (value) + { + case "True": + return new BooleanSetting(key, current.getName(), true); + case "False": + return new BooleanSetting(key, current.getName(), false); + default: + return new StringSetting(key, current.getName(), value); + } + } + + /** + * Writes the contents of a Section hashmap to disk. + * + * @param writer A PrintWriter pointed at a file on disk. + * @param section A section containing settings to be written to the file. + */ + private static void writeSection(PrintWriter writer, SettingSection section) + { + // Write the section header. + String header = sectionAsString(section); + writer.println(header); + + // Write this section's values. + HashMap<String, Setting> settings = section.getSettings(); + Set<String> keySet = settings.keySet(); + + for (String key : keySet) + { + Setting setting = settings.get(key); + String settingString = settingAsString(setting); + + writer.println(settingString); + } + } + + private static String sectionAsString(SettingSection section) + { + return "[" + section.getName() + "]"; + } + + private static String settingAsString(Setting setting) + { + return setting.getKey() + " = " + setting.getValueAsString(); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SliderPreference.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SliderPreference.java deleted file mode 100644 index da896cf590..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SliderPreference.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.dolphinemu.dolphinemu.utils; - -import android.app.AlertDialog; -import android.content.Context; -import android.os.Bundle; -import android.preference.DialogPreference; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.SeekBar; -import android.widget.TextView; -import android.widget.Toast; - -import org.dolphinemu.dolphinemu.R; - -public class SliderPreference extends DialogPreference implements SeekBar.OnSeekBarChangeListener, View.OnClickListener -{ - private static final String androidns = "http://schemas.android.com/apk/res/android"; - - // SeekBar - private int m_max, m_value; - private String m_key; - private SeekBar m_seekbar; - - // TextView - private TextView m_textview; - - public SliderPreference(Context context, AttributeSet attrs) - { - super(context, attrs); - - // Seekbar values - m_value = attrs.getAttributeIntValue(androidns, "defaultValue", 0); - m_max = attrs.getAttributeIntValue(androidns, "max", 100); - m_key = attrs.getAttributeValue(androidns, "key"); - } - - @Override - protected View onCreateDialogView() - { - LayoutInflater inflater = LayoutInflater.from(getContext()); - LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.slider_layout, null, false); - - m_seekbar = (SeekBar) layout.findViewById(R.id.sliderSeekBar); - m_textview = (TextView) layout.findViewById(R.id.sliderTextView); - - if (shouldPersist()) - { - if (m_key != null && m_key.equals("Overclock")) - { - Toast.makeText(getContext(), getContext().getString(R.string.overclock_warning), - Toast.LENGTH_LONG).show(); - - float valueAsFloat = Float.valueOf(getPersistedString(Integer.toString(m_value))); - float valueAsPercent = valueAsFloat * 100; - - m_value = Math.round(valueAsPercent); - } - else - { - m_value = Integer.valueOf(getPersistedString(Integer.toString(m_value))); - } - } - - m_seekbar.setMax(m_max); - m_seekbar.setProgress(m_value); - setProgressText(m_value); - m_seekbar.setOnSeekBarChangeListener(this); - - return layout; - } - - // SeekBar overrides - @Override - public void onProgressChanged(SeekBar seek, int value, boolean fromTouch) - { - m_value = value; - setProgressText(value); - } - - @Override - public void onStartTrackingTouch(SeekBar seek) - { - } - - @Override - public void onStopTrackingTouch(SeekBar seek) - { - } - - void setProgressText(int value) - { - m_textview.setText(String.valueOf(value)); - } - - @Override - public void showDialog(Bundle state) - { - super.showDialog(state); - - Button positiveButton = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE); - positiveButton.setOnClickListener(this); - } - - @Override - public void onClick(View v) - { - if (shouldPersist()) - { - String valueToSave; - if (m_key != null && m_key.equals("Overclock")) - { - float valueAsFloat = m_value / 100.0f; - valueToSave = Float.toString(valueAsFloat); - } - else - { - valueToSave = Integer.toString(m_seekbar.getProgress()); - } - - persistString(valueToSave); - callChangeListener(m_seekbar.getProgress()); - } - ((AlertDialog) getDialog()).dismiss(); - } -} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/UserPreferences.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/UserPreferences.java deleted file mode 100644 index a5d8883b95..0000000000 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/UserPreferences.java +++ /dev/null @@ -1,495 +0,0 @@ -/** - * Copyright 2013 Dolphin Emulator Project - * Licensed under GPLv2+ - * Refer to the license.txt file included. - */ - -package org.dolphinemu.dolphinemu.utils; - -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Build; -import android.preference.PreferenceManager; - -import org.dolphinemu.dolphinemu.NativeLibrary; - -/** - * A class that retrieves all of the set user preferences in Android, in a safe way. - * <p> - * If any preferences are added to this emulator, an accessor for that preference - * should be added here. This way lengthy calls to getters from SharedPreferences - * aren't made necessary. - */ -public final class UserPreferences -{ - private UserPreferences() - { - // Disallows instantiation. - } - - /** - * Loads the settings stored in the Dolphin ini config files to the shared preferences of this front-end. - * - * @param ctx The context used to retrieve the SharedPreferences instance. - */ - public static void LoadIniToPrefs(Context ctx) - { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); - - // Get an editor. - SharedPreferences.Editor editor = prefs.edit(); - - // Add the settings. - if (Build.CPU_ABI.contains("arm64")) - editor.putString("cpuCorePref", getConfig("Dolphin.ini", "Core", "CPUCore", "4")); - else - editor.putString("cpuCorePref", getConfig("Dolphin.ini", "Core", "CPUCore", "3")); - - editor.putBoolean("dualCorePref", getConfig("Dolphin.ini", "Core", "CPUThread", "True").equals("True")); - editor.putBoolean("OverclockEnable", getConfig("Dolphin.ini", "Core", "OverclockEnable", "False").equals("True")); - editor.putString("Overclock", getConfig("Dolphin.ini", "Core", "Overclock", "100")); - - // Load analog ranges from GCPadNew.ini and WiimoteNew.ini - editor.putString("mainRadius0", getConfig("GCPadNew.ini", "GCPad1", "Main Stick/Radius", "100,000000")); - editor.putString("cStickRadius0", getConfig("GCPadNew.ini", "GCPad1", "C-Stick/Radius", "100,000000")); - editor.putString("inputThres0", getConfig("GCPadNew.ini", "GCPad1", "Triggers/Threshold", "90,000000")); - editor.putString("mainRadius1", getConfig("GCPadNew.ini", "GCPad2", "Main Stick/Radius", "100,000000")); - editor.putString("cStickRadius1", getConfig("GCPadNew.ini", "GCPad2", "C-Stick/Radius", "100,000000")); - editor.putString("inputThres1", getConfig("GCPadNew.ini", "GCPad2", "Triggers/Threshold", "90,000000")); - editor.putString("mainRadius2", getConfig("GCPadNew.ini", "GCPad3", "Main Stick/Radius", "100,000000")); - editor.putString("cStickRadius2", getConfig("GCPadNew.ini", "GCPad3", "C-Stick/Radius", "100,000000")); - editor.putString("inputThres2", getConfig("GCPadNew.ini", "GCPad3", "Triggers/Threshold", "90,000000")); - editor.putString("mainRadius3", getConfig("GCPadNew.ini", "GCPad4", "Main Stick/Radius", "100,000000")); - editor.putString("cStickRadius3", getConfig("GCPadNew.ini", "GCPad4", "C-Stick/Radius", "100,000000")); - editor.putString("inputThres3", getConfig("GCPadNew.ini", "GCPad4", "Triggers/Threshold", "90,000000")); - - editor.putString("tiltRange4", getConfig("WiimoteNew.ini", "Wiimote1", "Tilt/Modifier/Range", "50,00000")); - editor.putString("tiltRange5", getConfig("WiimoteNew.ini", "Wiimote2", "Tilt/Modifier/Range", "50,00000")); - editor.putString("tiltRange6", getConfig("WiimoteNew.ini", "Wiimote3", "Tilt/Modifier/Range", "50,00000")); - editor.putString("tiltRange7", getConfig("WiimoteNew.ini", "Wiimote4", "Tilt/Modifier/Range", "50,00000")); - - editor.putString("nunchukRadius4", getConfig("WiimoteNew.ini", "Wiimote1", "Nunchuk/Stick/Radius", "100,000000")); - editor.putString("nunchukRange4", getConfig("WiimoteNew.ini", "Wiimote1", "Nunchuk/Tilt/Modifier/Range", "50,00000")); - editor.putString("nunchukRadius5", getConfig("WiimoteNew.ini", "Wiimote2", "Nunchuk/Stick/Radius", "100,000000")); - editor.putString("nunchukRange5", getConfig("WiimoteNew.ini", "Wiimote2", "Nunchuk/Tilt/Modifier/Range", "50,00000")); - editor.putString("nunchukRadius6", getConfig("WiimoteNew.ini", "Wiimote3", "Nunchuk/Stick/Radius", "100,000000")); - editor.putString("nunchukRange6", getConfig("WiimoteNew.ini", "Wiimote3", "Nunchuk/Tilt/Modifier/Range", "50,00000")); - editor.putString("nunchukRadius7", getConfig("WiimoteNew.ini", "Wiimote4", "Nunchuk/Stick/Radius", "100,000000")); - editor.putString("nunchukRange7", getConfig("WiimoteNew.ini", "Wiimote4", "Nunchuk/Tilt/Modifier/Range", "50,00000")); - - editor.putString("classicLRadius4", getConfig("WiimoteNew.ini", "Wiimote1", "Classic/Left Stick/Radius", "100,000000")); - editor.putString("classicRRadius4", getConfig("WiimoteNew.ini", "Wiimote1", "Classic/Right Stick/Radius", "100,000000")); - editor.putString("classicThres4", getConfig("WiimoteNew.ini", "Wiimote1", "Classic/Triggers/Threshold", "90,000000")); - editor.putString("classicLRadius5", getConfig("WiimoteNew.ini", "Wiimote2", "Classic/Left Stick/Radius", "100,000000")); - editor.putString("classicRRadius5", getConfig("WiimoteNew.ini", "Wiimote2", "Classic/Right Stick/Radius", "100,000000")); - editor.putString("classicThres5", getConfig("WiimoteNew.ini", "Wiimote2", "Classic/Triggers/Threshold", "90,000000")); - editor.putString("classicLRadius6", getConfig("WiimoteNew.ini", "Wiimote3", "Classic/Left Stick/Radius", "100,000000")); - editor.putString("classicRRadius6", getConfig("WiimoteNew.ini", "Wiimote3", "Classic/Right Stick/Radius", "100,000000")); - editor.putString("classicThres6", getConfig("WiimoteNew.ini", "Wiimote3", "Classic/Triggers/Threshold", "90,000000")); - editor.putString("classicLRadius7", getConfig("WiimoteNew.ini", "Wiimote4", "Classic/Left Stick/Radius", "100,000000")); - editor.putString("classicRRadius7", getConfig("WiimoteNew.ini", "Wiimote4", "Classic/Right Stick/Radius", "100,000000")); - editor.putString("classicThres7", getConfig("WiimoteNew.ini", "Wiimote4", "Classic/Triggers/Threshold", "90,000000")); - - editor.putString("guitarRadius4", getConfig("WiimoteNew.ini", "Wiimote1", "Guitar/Stick/Radius", "100,000000")); - editor.putString("guitarRadius5", getConfig("WiimoteNew.ini", "Wiimote2", "Guitar/Stick/Radius", "100,000000")); - editor.putString("guitarRadius6", getConfig("WiimoteNew.ini", "Wiimote3", "Guitar/Stick/Radius", "100,000000")); - editor.putString("guitarRadius7", getConfig("WiimoteNew.ini", "Wiimote4", "Guitar/Stick/Radius", "100,000000")); - - editor.putString("drumsRadius4", getConfig("WiimoteNew.ini", "Wiimote1", "Drums/Stick/Radius", "100,000000")); - editor.putString("drumsRadius5", getConfig("WiimoteNew.ini", "Wiimote2", "Drums/Stick/Radius", "100,000000")); - editor.putString("drumsRadius6", getConfig("WiimoteNew.ini", "Wiimote3", "Drums/Stick/Radius", "100,000000")); - editor.putString("drumsRadius7", getConfig("WiimoteNew.ini", "Wiimote4", "Drums/Stick/Radius", "100,000000")); - - editor.putString("turntableRadius4", getConfig("WiimoteNew.ini", "Wiimote1", "Turntable/Stick/Radius", "100,000000")); - editor.putString("turntableRadius5", getConfig("WiimoteNew.ini", "Wiimote2", "Turntable/Stick/Radius", "100,000000")); - editor.putString("turntableRadius6", getConfig("WiimoteNew.ini", "Wiimote3", "Turntable/Stick/Radius", "100,000000")); - editor.putString("turntableRadius7", getConfig("WiimoteNew.ini", "Wiimote4", "Turntable/Stick/Radius", "100,000000")); - - // Load Wiimote Extension settings from WiimoteNew.ini - editor.putString("wiimoteExtension4", getConfig("WiimoteNew.ini", "Wiimote1", "Extension", "None")); - editor.putString("wiimoteExtension5", getConfig("WiimoteNew.ini", "Wiimote2", "Extension", "None")); - editor.putString("wiimoteExtension6", getConfig("WiimoteNew.ini", "Wiimote3", "Extension", "None")); - editor.putString("wiimoteExtension7", getConfig("WiimoteNew.ini", "Wiimote4", "Extension", "None")); - - editor.putString("gpuPref", getConfig("Dolphin.ini", "Core", "GFXBackend", "OGL")); - editor.putBoolean("showFPS", getConfig("GFX.ini", "Settings", "ShowFPS", "False").equals("True")); - editor.putBoolean("drawOnscreenControls", getConfig("Dolphin.ini", "Android", "ScreenControls", "True").equals("True")); - - editor.putString("internalResolution", getConfig("GFX.ini", "Settings", "EFBScale", "2")); - editor.putString("FSAA", getConfig("GFX.ini", "Settings", "MSAA", "0")); - editor.putString("anisotropicFiltering", getConfig("GFX.ini", "Enhancements", "MaxAnisotropy", "0")); - editor.putString("postProcessingShader", getConfig("GFX.ini", "Enhancements", "PostProcessingShader", "")); - editor.putBoolean("scaledEFBCopy", getConfig("GFX.ini", "Hacks", "EFBScaledCopy", "True").equals("True")); - editor.putBoolean("perPixelLighting", getConfig("GFX.ini", "Settings", "EnablePixelLighting", "False").equals("True")); - editor.putBoolean("forceTextureFiltering", getConfig("GFX.ini", "Enhancements", "ForceFiltering", "False").equals("True")); - editor.putBoolean("disableFog", getConfig("GFX.ini", "Settings", "DisableFog", "False").equals("True")); - editor.putBoolean("skipEFBAccess", getConfig("GFX.ini", "Hacks", "EFBAccessEnable", "False").equals("True")); - editor.putBoolean("ignoreFormatChanges", getConfig("GFX.ini", "Hacks", "EFBEmulateFormatChanges", "False").equals("True")); - editor.putString("stereoscopyMode", getConfig("GFX.ini", "Stereoscopy", "StereoMode", "0")); - editor.putBoolean("stereoSwapEyes", getConfig("GFX.ini", "Stereoscopy", "StereoSwapEyes", "False").equals("True")); - editor.putString("stereoDepth", getConfig("GFX.ini", "Stereoscopy", "StereoDepth", "20")); - editor.putString("stereoConvergencePercentage", getConfig("GFX.ini", "Stereoscopy", "StereoConvergencePercentage", "100")); - editor.putBoolean("enableController1", getConfig("Dolphin.ini", "Core", "SIDevice0", "6") == "6"); - editor.putBoolean("enableController2", getConfig("Dolphin.ini", "Core", "SIDevice1", "0") == "6"); - editor.putBoolean("enableController3", getConfig("Dolphin.ini", "Core", "SIDevice2", "0") == "6"); - editor.putBoolean("enableController4", getConfig("Dolphin.ini", "Core", "SIDevice3", "0") == "6"); - - String efbCopyOn = getConfig("GFX.ini", "Hacks", "EFBCopyEnable", "True"); - String efbToTexture = getConfig("GFX.ini", "Hacks", "EFBToTextureEnable", "True"); - String efbCopyCache = getConfig("GFX.ini", "Hacks", "EFBCopyCacheEnable", "False"); - - if (efbCopyOn.equals("False")) - { - editor.putString("efbCopyMethod", "Off"); - } - else if (efbCopyOn.equals("True") && efbToTexture.equals("True")) - { - editor.putString("efbCopyMethod", "Texture"); - } - else if(efbCopyOn.equals("True") && efbToTexture.equals("False") && efbCopyCache.equals("False")) - { - editor.putString("efbCopyMethod", "RAM (uncached)"); - } - else if(efbCopyOn.equals("True") && efbToTexture.equals("False") && efbCopyCache.equals("True")) - { - editor.putString("efbCopyMethod", "RAM (cached)"); - } - - editor.putString("textureCacheAccuracy", getConfig("GFX.ini", "Settings", "SafeTextureCacheColorSamples", "128")); - - String usingXFB = getConfig("GFX.ini", "Settings", "UseXFB", "False"); - String usingRealXFB = getConfig("GFX.ini", "Settings", "UseRealXFB", "False"); - - if (usingXFB.equals("False")) - { - editor.putString("externalFrameBuffer", "Disabled"); - } - else if (usingXFB.equals("True") && usingRealXFB.equals("False")) - { - editor.putString("externalFrameBuffer", "Virtual"); - } - else if (usingXFB.equals("True") && usingRealXFB.equals("True")) - { - editor.putString("externalFrameBuffer", "Real"); - } - - editor.putBoolean("fastDepthCalculation", getConfig("GFX.ini", "Settings", "FastDepthCalc", "True").equals("True")); - editor.putString("aspectRatio", getConfig("GFX.ini", "Settings", "AspectRatio", "0")); - - // Apply the changes. - editor.apply(); - } - - // Small utility method that shortens calls to NativeLibrary.GetConfig. - private static String getConfig(String ini, String section, String key, String defaultValue) - { - return NativeLibrary.GetConfig(ini, section, key, defaultValue); - } - - /** - * Writes the preferences set in the front-end to the Dolphin ini files. - * - * @param ctx The context used to retrieve the user settings. - * */ - public static void SavePrefsToIni(Context ctx) - { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); - - // Whether or not the user is using dual core. - boolean isUsingDualCore = prefs.getBoolean("dualCorePref", true); - - // Current CPU core being used. Falls back to interpreter upon error. - String currentEmuCore = prefs.getString("cpuCorePref", "0"); - - boolean overclockEnabled = prefs.getBoolean("OverclockEnable", false); - String overclockSetting = prefs.getString("Overclock", "100"); - - // Current GC analog range setup. Falls back to default upon error. - String currentMainRadius0 = prefs.getString("mainRadius0", "100,000000"); - String currentCStickRadius0 = prefs.getString("cStickRadius0", "100,000000"); - String currentInputThres0 = prefs.getString("inputThres0", "90,000000"); - String currentMainRadius1 = prefs.getString("mainRadius1", "100,000000"); - String currentCStickRadius1 = prefs.getString("cStickRadius1", "100,000000"); - String currentInputThres1 = prefs.getString("inputThres1", "90,000000"); - String currentMainRadius2 = prefs.getString("mainRadius2", "100,000000"); - String currentCStickRadius2 = prefs.getString("cStickRadius2", "100,000000"); - String currentInputThres2 = prefs.getString("inputThres2", "90,000000"); - String currentMainRadius3 = prefs.getString("mainRadius3", "100,000000"); - String currentCStickRadius3 = prefs.getString("cStickRadius3", "100,000000"); - String currentInputThres3 = prefs.getString("inputThres3", "90,000000"); - - // Current Wii analog range setup. Falls back to default on error. - String currentTiltRange4 = prefs.getString("tiltRange4", "50,000000"); - String currentTiltRange5 = prefs.getString("tiltRange5", "50,000000"); - String currentTiltRange6 = prefs.getString("tiltRange6", "50,000000"); - String currentTiltRange7 = prefs.getString("tiltRange7", "50,000000"); - - // Current Nunchuk analog range setup. Falls back to default upon error. - String currentNunchukRadius4 = prefs.getString("nunchukRadius4", "100,000000"); - String currentNunchukRange4 = prefs.getString("nunchukRange4", "50,000000"); - String currentNunchukRadius5 = prefs.getString("nunchukRadius5", "100,000000"); - String currentNunchukRange5 = prefs.getString("nunchukRange5", "50,000000"); - String currentNunchukRadius6 = prefs.getString("nunchukRadius6", "100,000000"); - String currentNunchukRange6 = prefs.getString("nunchukRange6", "50,000000"); - String currentNunchukRadius7 = prefs.getString("nunchukRadius7", "100,000000"); - String currentNunchukRange7 = prefs.getString("nunchukRange7", "50,000000"); - - // Current Classic analog range setup. Falls back to 100,000000 upon error. - String currentClassicLRadius4 = prefs.getString("classicLRadius4", "100,000000"); - String currentClassicRRadius4 = prefs.getString("classicRRadius4", "100,000000"); - String currentClassicThres4 = prefs.getString("classicThres4", "90,000000"); - String currentClassicLRadius5 = prefs.getString("classicLRadius5", "100,000000"); - String currentClassicRRadius5 = prefs.getString("classicRRadius5", "100,000000"); - String currentClassicThres5 = prefs.getString("classicThres5", "90,000000"); - String currentClassicLRadius6 = prefs.getString("classicLRadius6", "100,000000"); - String currentClassicRRadius6 = prefs.getString("classicRRadius6", "100,000000"); - String currentClassicThres6 = prefs.getString("classicThres6", "90,000000"); - String currentClassicLRadius7 = prefs.getString("classicLRadius7", "100,000000"); - String currentClassicRRadius7 = prefs.getString("classicRRadius7", "100,000000"); - String currentClassicThres7 = prefs.getString("classicThres7", "90,000000"); - - // Current Guitar analog range setup. Falls back to default upon error. - String currentGuitarRadius4 = prefs.getString("guitarRadius4", "100,000000"); - String currentGuitarRadius5 = prefs.getString("guitarRadius5", "100,000000"); - String currentGuitarRadius6 = prefs.getString("guitarRadius6", "100,000000"); - String currentGuitarRadius7 = prefs.getString("guitarRadius7", "100,000000"); - - // Current Drums modifier Radius setup. Falls back to default upon error. - String currentDrumsRadius4 = prefs.getString("drumsRadius4", "100,000000"); - String currentDrumsRadius5 = prefs.getString("drumsRadius5", "100,000000"); - String currentDrumsRadius6 = prefs.getString("drumsRadius6", "100,000000"); - String currentDrumsRadius7 = prefs.getString("drumsRadius7", "100,000000"); - - // Current Turntable analog range setup. Falls back to default upon error. - String currentTurntableRadius4 = prefs.getString("turntableRadius4", "100,000000"); - String currentTurntableRadius5 = prefs.getString("turntableRadius5", "100,000000"); - String currentTurntableRadius6 = prefs.getString("turntableRadius6", "100,000000"); - String currentTurntableRadius7 = prefs.getString("turntableRadius7", "100,000000"); - - // Current wiimote extension setup. Falls back to no extension upon error. - String currentWiimoteExtension4 = prefs.getString("wiimoteExtension4", "None"); - String currentWiimoteExtension5 = prefs.getString("wiimoteExtension5", "None"); - String currentWiimoteExtension6 = prefs.getString("wiimoteExtension6", "None"); - String currentWiimoteExtension7 = prefs.getString("wiimoteExtension7", "None"); - - // Current video backend being used. Falls back to software rendering upon error. - String currentVideoBackend = prefs.getString("gpuPref", "Software Rendering"); - - // Whether or not FPS will be displayed on-screen. - boolean showingFPS = prefs.getBoolean("showFPS", false); - - // Whether or not to draw on-screen controls. - boolean drawingOnscreenControls = prefs.getBoolean("drawOnscreenControls", true); - - // Whether or not to ignore all EFB access requests from the CPU. - boolean skipEFBAccess = prefs.getBoolean("skipEFBAccess", false); - - // Whether or not to ignore changes to the EFB format. - boolean ignoreFormatChanges = prefs.getBoolean("ignoreFormatChanges", false); - - // EFB copy method to use. - String efbCopyMethod = prefs.getString("efbCopyMethod", "Texture"); - - // Texture cache accuracy. Falls back to "Fast" up error. - String textureCacheAccuracy = prefs.getString("textureCacheAccuracy", "128"); - - // External frame buffer emulation. Falls back to disabled upon error. - String externalFrameBuffer = prefs.getString("externalFrameBuffer", "Disabled"); - - // Whether or not to use fast depth calculation. - boolean useFastDepthCalc = prefs.getBoolean("fastDepthCalculation", true); - - // Aspect ratio selection - String aspectRatio = prefs.getString("aspectRatio", "0"); - - // Internal resolution. Falls back to 1x Native upon error. - String internalResolution = prefs.getString("internalResolution", "2"); - - // FSAA Level. Falls back to 1x upon error. - String FSAALevel = prefs.getString("FSAA", "0"); - - // Anisotropic Filtering Level. Falls back to 1x upon error. - String anisotropicFiltLevel = prefs.getString("anisotropicFiltering", "0"); - - // Post processing shader setting - String postProcessing = prefs.getString("postProcessingShader", ""); - - // Whether or not Scaled EFB copies are used. - boolean usingScaledEFBCopy = prefs.getBoolean("scaledEFBCopy", true); - - // Whether or not per-pixel lighting is used. - boolean usingPerPixelLighting = prefs.getBoolean("perPixelLighting", false); - - // Whether or not texture filtering is being forced. - boolean isForcingTextureFiltering = prefs.getBoolean("forceTextureFiltering", false); - - // Whether or not fog is disabled. - boolean fogIsDisabled = prefs.getBoolean("disableFog", false); - - // Stereoscopy setting - String stereoscopyMode = prefs.getString("stereoscopyMode", "0"); - - // Stereoscopy swap eyes - boolean stereoscopyEyeSwap = prefs.getBoolean("stereoSwapEyes", false); - - // Stereoscopy separation - String stereoscopySeparation = prefs.getString("stereoDepth", "20"); - - // Stereoscopy convergence - String stereoConvergencePercentage = prefs.getString("stereoConvergencePercentage", "100"); - - // Controllers - // Controller 1 never gets disconnected due to touch screen - //boolean enableController1 = prefs.getBoolean("enableController1", true); - boolean enableController2 = prefs.getBoolean("enableController2", false); - boolean enableController3 = prefs.getBoolean("enableController3", false); - boolean enableController4 = prefs.getBoolean("enableController4", false); - - // CPU related Settings - NativeLibrary.SetConfig("Dolphin.ini", "Core", "CPUCore", currentEmuCore); - NativeLibrary.SetConfig("Dolphin.ini", "Core", "CPUThread", isUsingDualCore ? "True" : "False"); - - NativeLibrary.SetConfig("Dolphin.ini", "Core", "OverclockEnable", overclockEnabled ? "True" : "False"); - NativeLibrary.SetConfig("Dolphin.ini", "Core", "Overclock", overclockSetting); - - // GameCube analog ranges Setup - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad1", "Main Stick/Radius", currentMainRadius0); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad1", "C-Stick/Radius", currentCStickRadius0); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad1", "Triggers/Threshold", currentInputThres0); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad2", "Main Stick/Radius", currentMainRadius1); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad2", "C-Stick/Radius", currentCStickRadius1); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad2", "Triggers/Threshold", currentInputThres1); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad3", "Main Stick/Radius", currentMainRadius2); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad3", "C-Stick/Radius", currentCStickRadius2); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad3", "Triggers/Threshold", currentInputThres2); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad4", "Main Stick/Radius", currentMainRadius3); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad4", "C-Stick/Radius", currentCStickRadius3); - NativeLibrary.SetConfig("GCPadNew.ini", "GCPad4", "Triggers/Threshold", currentInputThres3); - - // Wiimote analog ranges Setup - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Tilt/Modifier/Range", currentTiltRange4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Tilt/Modifier/Range", currentTiltRange5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Tilt/Modifier/Range", currentTiltRange6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Tilt/Modifier/Range", currentTiltRange7); - - // Nunchuk analog ranges Setup - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Nunchuk/Stick/Radius", currentNunchukRadius4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Nunchuk/Stick/Radius", currentNunchukRange4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Nunchuk/Stick/Radius", currentNunchukRadius5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Nunchuk/Stick/Radius", currentNunchukRange5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Nunchuk/Stick/Radius", currentNunchukRadius6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Nunchuk/Stick/Radius", currentNunchukRange6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Nunchuk/Stick/Radius", currentNunchukRadius7); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Nunchuk/Stick/Radius", currentNunchukRange7); - - // Classic analog ranges Setup - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Classic/Left Stick/Radius", currentClassicLRadius4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Classic/Right Stick/Radius", currentClassicRRadius4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Classic/Triggers/Threshold", currentClassicThres4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Classic/Left Stick/Radius", currentClassicLRadius5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Classic/Right Stick/Radius", currentClassicRRadius5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Classic/Triggers/Threshold", currentClassicThres5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Classic/Left Stick/Radius", currentClassicLRadius6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Classic/Right Stick/Radius", currentClassicRRadius6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Classic/Triggers/Threshold", currentClassicThres6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Classic/Left Stick/Radius", currentClassicLRadius7); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Classic/Right Stick/Radius", currentClassicRRadius7); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Classic/Triggers/Threshold", currentClassicThres7); - - // Guitar analog ranges Setup - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Guitar/Stick/Radius", currentGuitarRadius4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Guitar/Stick/Radius", currentGuitarRadius5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Guitar/Stick/Radius", currentGuitarRadius6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Guitar/Stick/Radius", currentGuitarRadius7); - - // Drums analog ranges Setup - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Drums/Stick/Radius", currentDrumsRadius4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Drums/Stick/Radius", currentDrumsRadius5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Drums/Stick/Radius", currentDrumsRadius6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Drums/Stick/Radius", currentDrumsRadius7); - - // Turntable analog ranges Setup - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Turntable/Stick/Radius", currentTurntableRadius4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Turntable/Stick/Radius", currentTurntableRadius5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Turntable/Stick/Radius", currentTurntableRadius6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Turntable/Stick/Radius", currentTurntableRadius7); - - // Wiimote Extension Settings - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Extension", currentWiimoteExtension4); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote2", "Extension", currentWiimoteExtension5); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote3", "Extension", currentWiimoteExtension6); - NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote4", "Extension", currentWiimoteExtension7); - - // General Video Settings - NativeLibrary.SetConfig("Dolphin.ini", "Core", "GFXBackend", currentVideoBackend); - NativeLibrary.SetConfig("GFX.ini", "Settings", "ShowFPS", showingFPS ? "True" : "False"); - NativeLibrary.SetConfig("Dolphin.ini", "Android", "ScreenControls", drawingOnscreenControls ? "True" : "False"); - - // Video Hack Settings - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBAccessEnable", skipEFBAccess ? "False" : "True"); - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBEmulateFormatChanges", ignoreFormatChanges ? "True" : "False"); - NativeLibrary.SetConfig("GFX.ini", "Settings", "AspectRatio", aspectRatio); - - // Set EFB Copy Method - if (efbCopyMethod.equals("Off")) - { - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBCopyEnable", "False"); - } - else if (efbCopyMethod.equals("Texture")) - { - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBCopyEnable", "True"); - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBToTextureEnable", "True"); - } - else if (efbCopyMethod.equals("RAM (uncached)")) - { - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBCopyEnable", "True"); - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBToTextureEnable", "False"); - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBCopyCacheEnable", "False"); - } - else if (efbCopyMethod.equals("RAM (cached)")) - { - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBCopyEnable", "True"); - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBToTextureEnable", "False"); - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBCopyCacheEnable", "True"); - } - - // Set texture cache accuracy - NativeLibrary.SetConfig("GFX.ini", "Settings", "SafeTextureCacheColorSamples", textureCacheAccuracy); - - // Set external frame buffer. - if (externalFrameBuffer.equals("Disabled")) - { - NativeLibrary.SetConfig("GFX.ini", "Settings", "UseXFB", "False"); - } - else if (externalFrameBuffer.equals("Virtual")) - { - NativeLibrary.SetConfig("GFX.ini", "Settings", "UseXFB", "True"); - NativeLibrary.SetConfig("GFX.ini", "Settings", "UseRealXFB", "False"); - } - else if (externalFrameBuffer.equals("Real")) - { - NativeLibrary.SetConfig("GFX.ini", "Settings", "UseXFB", "True"); - NativeLibrary.SetConfig("GFX.ini", "Settings", "UseRealXFB", "True"); - } - - NativeLibrary.SetConfig("GFX.ini", "Settings", "FastDepthCalc", useFastDepthCalc ? "True" : "False"); - - //-- Enhancement Settings --// - NativeLibrary.SetConfig("GFX.ini", "Settings", "EFBScale", internalResolution); - NativeLibrary.SetConfig("GFX.ini", "Settings", "MSAA", FSAALevel); - NativeLibrary.SetConfig("GFX.ini", "Enhancements", "MaxAnisotropy", anisotropicFiltLevel); - NativeLibrary.SetConfig("GFX.ini", "Enhancements", "PostProcessingShader", postProcessing); - NativeLibrary.SetConfig("GFX.ini", "Hacks", "EFBScaledCopy", usingScaledEFBCopy ? "True" : "False"); - NativeLibrary.SetConfig("GFX.ini", "Settings", "EnablePixelLighting", usingPerPixelLighting ? "True" : "False"); - NativeLibrary.SetConfig("GFX.ini", "Enhancements", "ForceFiltering", isForcingTextureFiltering ? "True" : "False"); - NativeLibrary.SetConfig("GFX.ini", "Settings", "DisableFog", fogIsDisabled ? "True" : "False"); - NativeLibrary.SetConfig("GFX.ini", "Stereoscopy", "StereoMode", stereoscopyMode); - NativeLibrary.SetConfig("GFX.ini", "Stereoscopy", "StereoSwapEyes", stereoscopyEyeSwap ? "True" : "False"); - NativeLibrary.SetConfig("GFX.ini", "Stereoscopy", "StereoDepth", stereoscopySeparation); - NativeLibrary.SetConfig("GFX.ini", "Stereoscopy", "StereoConvergence", stereoConvergencePercentage); - NativeLibrary.SetConfig("Dolphin.ini", "Core", "SIDevice0", "6"); - NativeLibrary.SetConfig("Dolphin.ini", "Core", "SIDevice1", enableController2 ? "6" : "0"); - NativeLibrary.SetConfig("Dolphin.ini", "Core", "SIDevice2", enableController3 ? "6" : "0"); - NativeLibrary.SetConfig("Dolphin.ini", "Core", "SIDevice3", enableController4 ? "6" : "0"); - } -} diff --git a/Source/Android/app/src/main/res/drawable-hdpi/ic_settings.png b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings.png Binary files differdeleted file mode 100644 index f9a8915fd2..0000000000 --- a/Source/Android/app/src/main/res/drawable-hdpi/ic_settings.png +++ /dev/null diff --git a/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_core.png b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_core.png Binary files differnew file mode 100644 index 0000000000..27985eba15 --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_core.png diff --git a/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_graphics.png Binary files differnew file mode 100644 index 0000000000..8264acb8cd --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_graphics.png diff --git a/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings.png b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings.png Binary files differdeleted file mode 100644 index 12e5d100dd..0000000000 --- a/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings.png +++ /dev/null diff --git a/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_core.png b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_core.png Binary files differnew file mode 100644 index 0000000000..c6fae13587 --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_core.png diff --git a/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_graphics.png Binary files differnew file mode 100644 index 0000000000..de130a60fb --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_graphics.png diff --git a/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings.png b/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings.png Binary files differdeleted file mode 100644 index 6bb8f6e080..0000000000 --- a/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings.png +++ /dev/null diff --git a/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_core.png b/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_core.png Binary files differnew file mode 100644 index 0000000000..4c5f2493a5 --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_core.png diff --git a/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_graphics.png Binary files differnew file mode 100644 index 0000000000..7b7e2f7a1a --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_graphics.png diff --git a/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings.png b/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings.png Binary files differdeleted file mode 100644 index 97e9ca945c..0000000000 --- a/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings.png +++ /dev/null diff --git a/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_core.png b/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_core.png Binary files differnew file mode 100644 index 0000000000..9c8fde1b43 --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_core.png diff --git a/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_graphics.png Binary files differnew file mode 100644 index 0000000000..d7b1ac95ce --- /dev/null +++ b/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_graphics.png diff --git a/Source/Android/app/src/main/res/drawable/ic_settings_core_tv.png b/Source/Android/app/src/main/res/drawable/ic_settings_core_tv.png Binary files differnew file mode 100644 index 0000000000..9c8fde1b43 --- /dev/null +++ b/Source/Android/app/src/main/res/drawable/ic_settings_core_tv.png diff --git a/Source/Android/app/src/main/res/drawable/ic_settings_graphics_tv.png b/Source/Android/app/src/main/res/drawable/ic_settings_graphics_tv.png Binary files differnew file mode 100644 index 0000000000..d7b1ac95ce --- /dev/null +++ b/Source/Android/app/src/main/res/drawable/ic_settings_graphics_tv.png diff --git a/Source/Android/app/src/main/res/drawable/ic_settings_tv.png b/Source/Android/app/src/main/res/drawable/ic_settings_tv.png Binary files differdeleted file mode 100644 index 9e242e7748..0000000000 --- a/Source/Android/app/src/main/res/drawable/ic_settings_tv.png +++ /dev/null diff --git a/Source/Android/app/src/main/res/layout/activity_settings.xml b/Source/Android/app/src/main/res/layout/activity_settings.xml index d72e5a0142..492fbf04ec 100644 --- a/Source/Android/app/src/main/res/layout/activity_settings.xml +++ b/Source/Android/app/src/main/res/layout/activity_settings.xml @@ -1,20 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - - <FrameLayout - android:id="@+id/frame_content" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginLeft="@dimen/activity_horizontal_margin" - android:layout_marginRight="@dimen/activity_horizontal_margin" - tools:listitem="@layout/list_item_file" - android:elevation="4dp" - android:background="@android:color/white"/> - - -</LinearLayout>
\ No newline at end of file +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/frame_content"/> diff --git a/Source/Android/app/src/main/res/layout/dialog_seekbar.xml b/Source/Android/app/src/main/res/layout/dialog_seekbar.xml new file mode 100644 index 0000000000..4d81af8d81 --- /dev/null +++ b/Source/Android/app/src/main/res/layout/dialog_seekbar.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <SeekBar + android:id="@+id/seekbar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/spacing_xlarge" + android:layout_marginRight="@dimen/spacing_xlarge" + android:layout_alignParentEnd="true" + android:layout_alignParentStart="true" + android:layout_below="@+id/text_value" + android:layout_marginBottom="@dimen/spacing_xlarge"/> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + tools:text="75" + android:id="@+id/text_value" + android:layout_alignParentTop="true" + android:layout_centerHorizontal="true" + android:layout_marginTop="@dimen/spacing_xlarge" + android:layout_marginBottom="@dimen/spacing_large"/> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + tools:text="%" + android:id="@+id/text_units" + android:layout_alignTop="@+id/text_value" + android:layout_toEndOf="@+id/text_value"/> + +</RelativeLayout>
\ No newline at end of file diff --git a/Source/Android/app/src/main/res/layout/fragment_settings.xml b/Source/Android/app/src/main/res/layout/fragment_settings.xml new file mode 100644 index 0000000000..3823d50d12 --- /dev/null +++ b/Source/Android/app/src/main/res/layout/fragment_settings.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <android.support.v7.widget.RecyclerView + android:id="@+id/list_settings" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + +</FrameLayout>
\ No newline at end of file diff --git a/Source/Android/app/src/main/res/layout/list_item_setting.xml b/Source/Android/app/src/main/res/layout/list_item_setting.xml new file mode 100644 index 0000000000..d150d53265 --- /dev/null +++ b/Source/Android/app/src/main/res/layout/list_item_setting.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="72dp" + android:background="?android:attr/selectableItemBackground" + android:focusable="true" + android:clickable="true"> + + <TextView + android:layout_width="0dp" + android:layout_height="wrap_content" + style="@style/TextAppearance.AppCompat.Headline" + tools:text="Setting Name" + android:layout_alignParentEnd="true" + android:layout_alignParentStart="true" + android:layout_alignParentTop="true" + android:layout_marginStart="@dimen/spacing_large" + android:layout_marginEnd="@dimen/spacing_large" + android:layout_marginTop="@dimen/spacing_large" + android:id="@+id/text_setting_name" + android:textSize="16sp"/> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + tools:text="@string/overclock_enable_description" + android:layout_alignParentEnd="true" + android:layout_alignParentStart="true" + android:layout_marginStart="@dimen/spacing_large" + android:layout_marginEnd="@dimen/spacing_large" + android:layout_marginBottom="@dimen/spacing_large" + android:layout_marginTop="@dimen/spacing_small" + android:id="@+id/text_setting_description" + android:layout_below="@+id/text_setting_name" + android:layout_alignStart="@+id/text_setting_name"/> + +</RelativeLayout>
\ No newline at end of file diff --git a/Source/Android/app/src/main/res/layout/list_item_setting_checkbox.xml b/Source/Android/app/src/main/res/layout/list_item_setting_checkbox.xml new file mode 100644 index 0000000000..265c51bb61 --- /dev/null +++ b/Source/Android/app/src/main/res/layout/list_item_setting_checkbox.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="72dp" + android:background="?android:attr/selectableItemBackground" + android:focusable="true" + android:clickable="true"> + + <TextView + android:id="@+id/text_setting_name" + style="@style/TextAppearance.AppCompat.Headline" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_alignParentTop="true" + android:layout_marginEnd="@dimen/spacing_large" + android:layout_marginStart="@dimen/spacing_large" + android:layout_marginTop="@dimen/spacing_large" + android:layout_toStartOf="@+id/checkbox" + android:textSize="16sp" + tools:text="@string/overclock_enable"/> + + <TextView + android:id="@+id/text_setting_description" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_alignStart="@+id/text_setting_name" + android:layout_below="@+id/text_setting_name" + android:layout_marginBottom="@dimen/spacing_large" + android:layout_marginEnd="@dimen/spacing_large" + android:layout_marginStart="@dimen/spacing_large" + android:layout_marginTop="@dimen/spacing_small" + android:layout_toStartOf="@+id/checkbox" + tools:text="@string/overclock_enable_description"/> + + <CheckBox + android:id="@+id/checkbox" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:layout_marginEnd="@dimen/spacing_large" + android:focusable="false" + android:clickable="false"/> + +</RelativeLayout>
\ No newline at end of file diff --git a/Source/Android/app/src/main/res/layout/list_item_settings_header.xml b/Source/Android/app/src/main/res/layout/list_item_settings_header.xml new file mode 100644 index 0000000000..3c72913c93 --- /dev/null +++ b/Source/Android/app/src/main/res/layout/list_item_settings_header.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="48dp"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/text_header_name" + tools:text="CPU Settings" + android:layout_marginStart="@dimen/spacing_large" + android:layout_marginBottom="@dimen/spacing_small" + android:textColor="?android:colorAccent" + android:textStyle="bold" + android:layout_gravity="left|bottom"/> + +</FrameLayout>
\ No newline at end of file diff --git a/Source/Android/app/src/main/res/layout/slider_layout.xml b/Source/Android/app/src/main/res/layout/slider_layout.xml deleted file mode 100644 index a667ff6489..0000000000 --- a/Source/Android/app/src/main/res/layout/slider_layout.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:weightSum="1" - android:gravity="center_horizontal"> - - <SeekBar - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:id="@+id/sliderSeekBar" - /> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - tools:text="Sample Text" - android:id="@+id/sliderTextView" - android:textStyle="bold"/> - -</LinearLayout>
\ No newline at end of file diff --git a/Source/Android/app/src/main/res/menu/menu_game_grid.xml b/Source/Android/app/src/main/res/menu/menu_game_grid.xml index 5b6bf23ac0..a87f89f32d 100644 --- a/Source/Android/app/src/main/res/menu/menu_game_grid.xml +++ b/Source/Android/app/src/main/res/menu/menu_game_grid.xml @@ -7,9 +7,14 @@ android:icon="@drawable/ic_refresh" app:showAsAction="ifRoom"/> <item - android:id="@+id/menu_settings" - android:title="@string/grid_menu_settings" - android:icon="@drawable/ic_settings" + android:id="@+id/menu_settings_core" + android:title="@string/grid_menu_core_settings" + android:icon="@drawable/ic_settings_core" + app:showAsAction="ifRoom"/> + <item + android:id="@+id/menu_settings_video" + android:title="@string/grid_menu_video_settings" + android:icon="@drawable/ic_settings_graphics" app:showAsAction="ifRoom"/> </menu>
\ No newline at end of file diff --git a/Source/Android/app/src/main/res/values/arrays.xml b/Source/Android/app/src/main/res/values/arrays.xml index cf812c87e9..c7299780c6 100644 --- a/Source/Android/app/src/main/res/values/arrays.xml +++ b/Source/Android/app/src/main/res/values/arrays.xml @@ -9,77 +9,49 @@ <item>@string/jit64_recompiler</item> <item>@string/jitil_recompiler</item> </string-array> - <string-array name="emuCoreValuesX86_64" translatable="false"> + <integer-array name="emuCoreValuesX86_64" translatable="false"> <item>0</item> <item>1</item> <item>2</item> - </string-array> + </integer-array> <!-- CPU core selection - ARM --> <string-array name="emuCoreEntriesARM" translatable="false"> <item>@string/interpreter</item> <item>@string/jit_arm_recompiler</item> </string-array> - <string-array name="emuCoreValuesARM" translatable="false"> + <integer-array name="emuCoreValuesARM" translatable="false"> <item>0</item> <item>3</item> - </string-array> + </integer-array> <!-- CPU core selection - ARM64 --> <string-array name="emuCoreEntriesARM64" translatable="false"> <item>@string/interpreter</item> <item>@string/jit_arm64_recompiler</item> </string-array> - <string-array name="emuCoreValuesARM64" translatable="false"> + <integer-array name="emuCoreValuesARM64" translatable="false"> <item>0</item> <item>4</item> - </string-array> + </integer-array> <!-- CPU core selection - Other --> <string-array name="emuCoreEntriesOther" translatable="false"> <item>@string/interpreter</item> </string-array> - <string-array name="emuCoreValuesOther" translatable="false"> + <integer-array name="emuCoreValuesOther" translatable="false"> <item>0</item> - </string-array> + </integer-array> <!-- New UI CPU Core selection - Default --> <string-array name="string_emu_cores" translatable="false"> <item>@string/interpreter</item> <item>@string/cached_interpreter</item> </string-array> - <string-array name="int_emu_cores" translatable="false"> + <integer-array name="int_emu_cores" translatable="false"> <item>0</item> <item>5</item> - </string-array> - - <!-- Video Backend Selection - Supports OpenGL ES 3 --> - <string-array name="videoBackendEntriesGLES3" translatable="false"> - <item>@string/software_renderer</item> - <item>@string/opengl_es3</item> - </string-array> - <string-array name="videoBackendValuesGLES3" translatable="false"> - <item>Software Renderer</item> - <item>OGL</item> - </string-array> - - <!-- Video Backend Selection - Supports desktop OpenGL --> - <string-array name="videoBackendEntriesGL" translatable="false"> - <item>@string/software_renderer</item> - <item>@string/opengl</item> - </string-array> - <string-array name="videoBackendValuesGL" translatable="false"> - <item>Software Renderer</item> - <item>OGL</item> - </string-array> - - <!-- Video Backend Selection - No OpenGL ES 3 support --> - <string-array name="videoBackendEntriesNoGLES3" translatable="false"> - <item>@string/software_renderer</item> - </string-array> - <string-array name="videoBackendValuesNoGLES3" translatable="false"> - <item>Software Renderer</item> - </string-array> + </integer-array> <!-- Wiimote extensions --> <string-array name="wiimoteExtEntries" translatable="false"> @@ -99,57 +71,17 @@ <item>Turntable</item> </string-array> - <!-- EFB Copy Method Preference --> - <string-array name="efbCopyMethodEntries" translatable="false"> - <item>@string/disabled</item> - <item>@string/efb_copy_texture</item> - <item>@string/efb_copy_ram_uncached</item> - <item>@string/efb_copy_ram_cached</item> - </string-array> - <string-array name="efbCopyMethodValues" translatable="false"> - <item>Off</item> - <item>Texture</item> - <item>RAM (cached)</item> - <item>RAM (uncached)</item> - </string-array> - <!-- Texture Cache Accuracy Preference --> <string-array name="textureCacheAccuracyEntries" translatable="false"> <item>@string/texture_cache_accuracy_low</item> <item>@string/texture_cache_accuracy_medium</item> <item>@string/texture_cache_accuracy_high</item> </string-array> - <string-array name="textureCacheAccuracyValues" translatable="false"> + <integer-array name="textureCacheAccuracyValues" translatable="false"> <item>128</item> <item>512</item> <item>0</item> - </string-array> - - <!-- Analog Modifier ranges --> - <string-array name="analogRangesEntries" translatable="false"> - <item>100</item> - <item>90</item> - <item>80</item> - <item>70</item> - <item>60</item> - <item>50</item> - <item>40</item> - <item>30</item> - <item>20</item> - <item>10</item> - </string-array> - <string-array name="analogRangesValues" translatable="false"> - <item>100,000000</item> - <item>90,000000</item> - <item>80,000000</item> - <item>70,000000</item> - <item>60,000000</item> - <item>50,000000</item> - <item>40,000000</item> - <item>30,000000</item> - <item>20,000000</item> - <item>10,000000</item> - </string-array> + </integer-array> <!-- External Frame Buffer Preference --> <string-array name="externalFrameBufferEntries" translatable="false"> @@ -157,11 +89,11 @@ <item>@string/external_frame_buffer_virtual</item> <item>@string/external_frame_buffer_real</item> </string-array> - <string-array name="externalFrameBufferValues" translatable="false"> - <item>Disabled</item> - <item>Virtual</item> - <item>Real</item> - </string-array> + <integer-array name="externalFrameBufferValues" translatable="false"> + <item>0</item> + <item>1</item> + <item>2</item> + </integer-array> <!-- Internal Resolution Preference --> <string-array name="internalResolutionEntries" translatable="false"> @@ -174,7 +106,7 @@ <item>5x Native (3200x2640)</item> <item>6x Native (3840x3168) for 4K</item> </string-array> - <string-array name="internalResolutionValues" translatable="false"> + <integer-array name="internalResolutionValues" translatable="false"> <item>2</item> <item>3</item> <item>4</item> @@ -183,7 +115,7 @@ <item>7</item> <item>8</item> <item>9</item> - </string-array> + </integer-array> <!-- FSAA Preference --> <string-array name="FSAAEntries" translatable="false"> @@ -191,11 +123,11 @@ <item>2x</item> <item>4x</item> </string-array> - <string-array name="FSAAValues" translatable="false"> + <integer-array name="FSAAValues" translatable="false"> <item>0</item> <item>1</item> <item>2</item> - </string-array> + </integer-array> <!-- Anisotropic Filtering Preference --> <string-array name="anisotropicFilteringEntries" translatable="false"> @@ -205,13 +137,13 @@ <item>8x</item> <item>16x</item> </string-array> - <string-array name="anisotropicFilteringValues" translatable="false"> + <integer-array name="anisotropicFilteringValues" translatable="false"> <item>0</item> <item>1</item> <item>2</item> <item>3</item> <item>4</item> - </string-array> + </integer-array> <!-- Stereoscopy Preference --> <string-array name="stereoscopyEntries" translatable="false"> @@ -220,12 +152,12 @@ <item>Top-and-Bottom</item> <item>Anaglyph</item> </string-array> - <string-array name="stereoscopyValues" translatable="false"> + <integer-array name="stereoscopyValues" translatable="false"> <item>0</item> <item>1</item> <item>2</item> <item>3</item> - </string-array> + </integer-array> <!-- Aspect Ratio Preference --> <string-array name="aspectRatioEntries" translatable="false"> @@ -234,12 +166,12 @@ <item>Force 4:3</item> <item>Stretch To Window</item> </string-array> - <string-array name="aspectRatioValues" translatable="false"> + <integer-array name="aspectRatioValues" translatable="false"> <item>0</item> <item>1</item> <item>2</item> <item>3</item> - </string-array> + </integer-array> <string-array name="country_names"> <item>Europe</item> diff --git a/Source/Android/app/src/main/res/values/dimens.xml b/Source/Android/app/src/main/res/values/dimens.xml index 986b230792..ba98e10607 100644 --- a/Source/Android/app/src/main/res/values/dimens.xml +++ b/Source/Android/app/src/main/res/values/dimens.xml @@ -9,4 +9,11 @@ <dimen name="add_button_margin">16dp</dimen> <dimen name="main_appbar_height">128dp</dimen> + + <dimen name="spacing_xsmall">2dp</dimen> + <dimen name="spacing_small">4dp</dimen> + <dimen name="spacing_medium">8dp</dimen> + <dimen name="spacing_medlarge">12dp</dimen> + <dimen name="spacing_large">16dp</dimen> + <dimen name="spacing_xlarge">32dp</dimen> </resources> diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 7819de79cc..cf98d53bb9 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -286,11 +286,8 @@ <string name="skip_efb_access_descrip">Ignore any requests from the CPU to read/write to the EFB.</string> <string name="ignore_format_changes">Ignore Format Changes</string> <string name="ignore_format_changes_descrip">Ignore any changes to the EFB format.</string> - <string name="efb_copy_method">EFB Copy Method</string> - <string name="efb_copy_method_descrip">Determines how EFB copies will be emulated.</string> - <string name="efb_copy_texture">Texture</string> - <string name="efb_copy_ram_uncached">RAM (uncached)</string> - <string name="efb_copy_ram_cached">RAM (cached)</string> + <string name="efb_copy_method">Store EFB Copies to Texture Only</string> + <string name="efb_copy_method_descrip">Stores EFB Copies exclusively on the GPU, bypassing system memory. Causes graphical defects in a small number of games. If unsure, leave this checked.</string> <string name="texture_cache">Texture Cache</string> <string name="texture_cache_accuracy">Texture Cache Accuracy</string> <string name="texture_cache_accuracy_descrip">The safer the selection, the less likely the emulator will be missing any texture updates from RAM.</string> @@ -320,7 +317,8 @@ <!-- Game Grid Screen--> - <string name="grid_menu_settings">Settings</string> + <string name="grid_menu_core_settings">Settings</string> + <string name="grid_menu_video_settings">Video Settings</string> <string name="grid_menu_refresh">Refresh Library</string> <!-- Add Directory Screen--> @@ -334,6 +332,8 @@ <string name="preferences_extensions">Extension Bindings</string> <string name="preferences_video">Video Settings</string> <string name="emulation_title">Emulation Activity</string> + <string name="dialog_seekbar_pos">OK</string> + <string name="dialog_seekbar_neg">Cancel</string> <!-- Emulation Menu --> <string name="emulation_toggle_input">Toggle Touch Controls</string> diff --git a/Source/Android/app/src/main/res/values/styles.xml b/Source/Android/app/src/main/res/values/styles.xml index dba853f492..d5db92e1e3 100644 --- a/Source/Android/app/src/main/res/values/styles.xml +++ b/Source/Android/app/src/main/res/values/styles.xml @@ -17,7 +17,7 @@ </style> <!-- Same as above, but use default action bar, and mandate margins. --> - <style name="DolphinSettingsBase" parent="Theme.AppCompat.Light.NoActionBar"> + <style name="DolphinSettingsBase" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/dolphin_blue</item> <item name="colorPrimaryDark">@color/dolphin_blue_dark</item> </style> diff --git a/Source/Android/app/src/main/res/xml/preferences.xml b/Source/Android/app/src/main/res/xml/preferences.xml deleted file mode 100644 index 3a5bc32422..0000000000 --- a/Source/Android/app/src/main/res/xml/preferences.xml +++ /dev/null @@ -1,4834 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - - <PreferenceCategory - android:key="preferences_cpu" - android:title="@string/preferences_cpu"> - - <!-- CPU Settings --> - <CheckBoxPreference - android:defaultValue="true" - android:key="dualCorePref" - android:summary="@string/dual_core_descrip" - android:title="@string/dual_core"/> - - <ListPreference - android:key="cpuCorePref" - android:summary="@string/cpu_core_desc" - android:title="@string/cpu_core" - android:entries="@array/string_emu_cores" - android:entryValues="@array/int_emu_cores"/> - - <CheckBoxPreference - android:defaultValue="false" - android:key="OverclockEnable" - android:summary="@string/overclock_enable_description" - android:title="@string/overclock_enable" - /> - - <org.dolphinemu.dolphinemu.utils.SliderPreference - android:dependency="OverclockEnable" - android:defaultValue="100" - android:key="Overclock" - android:max="400" - android:title="@string/overclock_title" - /> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_input" - android:title="@string/preferences_input"> - - <PreferenceScreen - android:key="input_overlay" - android:summary="@string/input_overlay_desc" - android:title="@string/input_overlay"> - - <Preference - android:key="inputOverlayConfigPref" - android:summary="@string/input_overlay_layout_desc" - android:title="@string/input_overlay_layout"> - - <intent - android:targetClass="org.dolphinemu.dolphinemu.activities.OverlayConfigActivity" - android:targetPackage="@string/application_id"/> - - </Preference> - - <SeekBarPreference - android:defaultValue="25" - android:key="controls_size" - android:max="75" - android:title="@string/controls_size"/> - - </PreferenceScreen> - - <!-- Controller bindings --> - <PreferenceScreen - android:key="controller_bindings" - android:title="@string/controller_bindings"> - - <PreferenceCategory - android:key="controller_gc_bindings" - android:title="@string/controller_gc"> - - <!-- Gamecube Controller 1 bindings --> - <PreferenceScreen - android:key="gamecube_bindings_control_0" - android:title="@string/controller_0"> - - <CheckBoxPreference - android:key="enableController1" - android:title="@string/enable_controller"/> - - <PreferenceCategory - android:key="preferences_controller0_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputA_0" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputB_0" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputX_0" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputY_0" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputZ_0" - android:summary="%s" - android:title="@string/button_z"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputStart_0" - android:summary="%s" - android:title="@string/button_start"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller0_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="DPadUp_0" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="DPadDown_0" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="DPadLeft_0" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="DPadRight_0" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller0_main" - android:title="@string/controller_main"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="MainUp_0" - android:summary="%s" - android:title="@string/main_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="MainDown_0" - android:summary="%s" - android:title="@string/main_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="MainLeft_0" - android:summary="%s" - android:title="@string/main_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="MainRight_0" - android:summary="%s" - android:title="@string/main_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController1" - android:key="mainRadius0" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller0_c" - android:title="@string/controller_c"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="CStickUp_0" - android:summary="%s" - android:title="@string/c_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="CStickDown_0" - android:summary="%s" - android:title="@string/c_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="CStickLeft_0" - android:summary="%s" - android:title="@string/c_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="CStickRight_0" - android:summary="%s" - android:title="@string/c_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController1" - android:key="cStickRadius0" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller0_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputL_0" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController1" - android:key="InputR_0" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:dependency="enableController1" - android:key="inputThres0" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- GameCube Controller 2 bindings --> - <PreferenceScreen - android:key="gamecube_bindings_control_1" - android:title="@string/controller_1"> - - <CheckBoxPreference - android:key="enableController2" - android:title="@string/enable_controller"/> - - <PreferenceCategory - android:key="preferences_controller1_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputA_1" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputB_1" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputX_1" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputY_1" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputZ_1" - android:summary="%s" - android:title="@string/button_z"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputStart_1" - android:summary="%s" - android:title="@string/button_start"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller1_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="DPadUp_1" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="DPadDown_1" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="DPadLeft_1" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="DPadRight_1" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller1_main" - android:title="@string/controller_main"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="MainUp_1" - android:summary="%s" - android:title="@string/main_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="MainDown_1" - android:summary="%s" - android:title="@string/main_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="MainLeft_1" - android:summary="%s" - android:title="@string/main_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="MainRight_1" - android:summary="%s" - android:title="@string/main_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController2" - android:key="mainRadius1" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller1_c" - android:title="@string/controller_c"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="CStickUp_1" - android:summary="%s" - android:title="@string/c_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="CStickDown_1" - android:summary="%s" - android:title="@string/c_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="CStickLeft_1" - android:summary="%s" - android:title="@string/c_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="CStickRight_1" - android:summary="%s" - android:title="@string/c_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController2" - android:key="cStickRadius1" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller1_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputL_1" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController2" - android:key="InputR_1" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:dependency="enableController2" - android:key="inputThres1" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Gamecube Controller 3 bindings --> - <PreferenceScreen - android:key="gamecube_bindings_control_2" - android:title="@string/controller_2"> - - <CheckBoxPreference - android:key="enableController3" - android:title="@string/enable_controller"/> - - <PreferenceCategory - android:key="preferences_controller2_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputA_2" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputB_2" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputX_2" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputY_2" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputZ_2" - android:summary="%s" - android:title="@string/button_z"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputStart_2" - android:summary="%s" - android:title="@string/button_start"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller2_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="DPadUp_2" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="DPadDown_2" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="DPadLeft_2" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="DPadRight_2" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller2_main" - android:title="@string/controller_main"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="MainUp_2" - android:summary="%s" - android:title="@string/main_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="MainDown_2" - android:summary="%s" - android:title="@string/main_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="MainLeft_2" - android:summary="%s" - android:title="@string/main_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="MainRight_2" - android:summary="%s" - android:title="@string/main_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController3" - android:key="mainRadius2" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller2_c" - android:title="@string/controller_c"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="CStickUp_2" - android:summary="%s" - android:title="@string/c_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="CStickDown_2" - android:summary="%s" - android:title="@string/c_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="CStickLeft_2" - android:summary="%s" - android:title="@string/c_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="CStickRight_2" - android:summary="%s" - android:title="@string/c_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController3" - android:key="cStickRadius2" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller2_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputL_2" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController3" - android:key="InputR_2" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:dependency="enableController3" - android:key="inputThres2" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Gamecube Controller 4 bindings --> - <PreferenceScreen - android:key="gamecube_bindings_control_3" - android:title="@string/controller_3"> - - <CheckBoxPreference - android:key="enableController4" - android:title="@string/enable_controller"/> - - <PreferenceCategory - android:key="preferences_controller3_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputA_3" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputB_3" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputX_3" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputY_3" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputZ_3" - android:summary="%s" - android:title="@string/button_z"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputStart_3" - android:summary="%s" - android:title="@string/button_start"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller3_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="DPadUp_3" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="DPadDown_3" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="DPadLeft_3" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="DPadRight_3" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller3_main" - android:title="@string/controller_main"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="MainUp_3" - android:summary="%s" - android:title="@string/main_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="MainDown_3" - android:summary="%s" - android:title="@string/main_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="MainLeft_3" - android:summary="%s" - android:title="@string/main_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="MainRight_3" - android:summary="%s" - android:title="@string/main_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController4" - android:key="mainRadius3" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller3_c" - android:title="@string/controller_c"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="CStickUp_3" - android:summary="%s" - android:title="@string/c_stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="CStickDown_3" - android:summary="%s" - android:title="@string/c_stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="CStickLeft_3" - android:summary="%s" - android:title="@string/c_stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="CStickRight_3" - android:summary="%s" - android:title="@string/c_stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:dependency="enableController4" - android:key="cStickRadius3" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_controller3_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputL_3" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableController4" - android:key="InputR_3" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:dependency="enableController4" - android:key="inputThres3" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - </PreferenceCategory> - - <PreferenceCategory - android:key="controller_wii_bindings" - android:title="@string/controller_wii"> - - <!-- Wiimote 1 bindings --> - <PreferenceScreen - android:key="wiimote_bindings_4" - android:title="@string/wiimote_0"> - - <CheckBoxPreference - android:key="enableWiimote1" - android:title="@string/enable_wiimote"/> - - <ListPreference - android:dependency="enableWiimote1" - android:defaultValue="None" - android:entries="@array/wiimoteExtEntries" - android:entryValues="@array/wiimoteExtValues" - android:key="wiimoteExtension4" - android:summary="@string/wiimote_extensions_descrip" - android:title="@string/wiimote_extensions"/> - - <PreferenceCategory - android:key="preferences_wiimote4_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteA_4" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteB_4" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteMinus_4" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimotePlus_4" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteHome_4" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="Wiimote1_4" - android:summary="%s" - android:title="@string/button_one"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="Wiimote2_4" - android:summary="%s" - android:title="@string/button_two"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote4_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteUp_4" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteDown_4" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteLeft_4" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="WiimoteRight_4" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote4_ir" - android:title="@string/wiimote_ir"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="IRUp_4" - android:summary="%s" - android:title="@string/ir_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="IRDown_4" - android:summary="%s" - android:title="@string/ir_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="IRLeft_4" - android:summary="%s" - android:title="@string/ir_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="IRRight_4" - android:summary="%s" - android:title="@string/ir_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="IRForward_4" - android:summary="%s" - android:title="@string/ir_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="IRBackward_4" - android:summary="%s" - android:title="@string/ir_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="IRHide_4" - android:summary="%s" - android:title="@string/ir_hide"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote4_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="SwingUp_4" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="SwingDown_4" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="SwingLeft_4" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="SwingRight_4" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="SwingForward_4" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="SwingBackward_4" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote4_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="TiltForward_4" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="TiltBackward_4" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="TiltLeft_4" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="TiltRight_4" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="TiltModifier_4" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:dependency="enableWiimote1" - android:defaultValue="50,000000" - android:key="tiltRange4" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote4_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="ShakeX_4" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="ShakeY_4" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote1" - android:key="ShakeZ_4" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_extension4" - android:title="@string/preferences_extensions"> - - <!-- Nunchuk 1 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote1" - android:key="ExtNunchuk_4" - android:title="@string/show_nunchuk"> - - <PreferenceCategory - android:key="preferences_nunchuk4_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukC_4" - android:summary="%s" - android:title="@string/nunchuk_button_c"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukZ_4" - android:summary="%s" - android:title="@string/button_z"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk4_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukUp_4" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukDown_4" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukLeft_4" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukRight_4" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="nunchukRadius4" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk4_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingUp_4" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingDown_4" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingLeft_4" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingRight_4" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingForward_4" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingBackward_4" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk4_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltForward_4" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltBackward_4" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltLeft_4" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltRight_4" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukModifier_4" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:defaultValue="50,000000" - android:key="nunchukRange4" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk4_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeX_4" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeY_4" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeZ_4" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Classic 1 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote1" - android:key="ExtClassic_4" - android:title="@string/show_classic"> - - <PreferenceCategory - android:key="preferences_classic4_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicA_4" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicB_4" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicX_4" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicY_4" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicMinus_4" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicPlus_4" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicHome_4" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZL_4" - android:summary="%s" - android:title="@string/classic_button_zl"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZR_4" - android:summary="%s" - android:title="@string/classic_button_zr"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic4_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicUp_4" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicDown_4" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeft_4" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRight_4" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic4_leftstick" - android:title="@string/classic_leftstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickUp_4" - android:summary="%s" - android:title="@string/classic_stick_left_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickDown_4" - android:summary="%s" - android:title="@string/classic_stick_left_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickLeft_4" - android:summary="%s" - android:title="@string/classic_stick_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickRight_4" - android:summary="%s" - android:title="@string/classic_stick_left_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicLRadius4" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic4_rightstick" - android:title="@string/classic_rightstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickUp_4" - android:summary="%s" - android:title="@string/classic_stick_right_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickDown_4" - android:summary="%s" - android:title="@string/classic_stick_right_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickLeft_4" - android:summary="%s" - android:title="@string/classic_stick_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickRight_4" - android:summary="%s" - android:title="@string/classic_stick_right_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicRRadius4" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic4_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerL_4" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerR_4" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:key="classicThres4" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Guitar 1 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote1" - android:key="ExtGuitar_4" - android:title="@string/show_guitar"> - - <PreferenceCategory - android:key="preferences_guitar4_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarMinus_4" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarPlus_4" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar4_frets" - android:title="@string/guitar_frets"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarGreen_4" - android:summary="%s" - android:title="@string/guitar_fret_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRed_4" - android:summary="%s" - android:title="@string/guitar_fret_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarYellow_4" - android:summary="%s" - android:title="@string/guitar_fret_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarBlue_4" - android:summary="%s" - android:title="@string/guitar_fret_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarOrange_4" - android:summary="%s" - android:title="@string/guitar_fret_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumUp_4" - android:summary="%s" - android:title="@string/guitar_strum_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumDown_4" - android:summary="%s" - android:title="@string/guitar_strum_down"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar4_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarUp_4" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarDown_4" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarLeft_4" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRight_4" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="guitarRadius4" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar4_whammy" - android:title="@string/guitar_whammy"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarWhammy_4" - android:summary="%s" - android:title="@string/guitar_whammy_bar"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Drums 1 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote1" - android:key="ExtDrums_4" - android:title="@string/show_drums"> - - <PreferenceCategory - android:key="preferences_drums4_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsMinus_4" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsPlus_4" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums4_pads" - android:title="@string/drums_pads"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRed_4" - android:summary="%s" - android:title="@string/drums_pad_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsYellow_4" - android:summary="%s" - android:title="@string/drums_pad_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBlue_4" - android:summary="%s" - android:title="@string/drums_pad_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsGreen_4" - android:summary="%s" - android:title="@string/drums_pad_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsOrange_4" - android:summary="%s" - android:title="@string/drums_pad_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBass_4" - android:summary="%s" - android:title="@string/drums_pad_bass"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums4_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsUp_4" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsDown_4" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsLeft_4" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRight_4" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="drumsRadius4" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Turntable 1 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote1" - android:key="ExtTurntable_4" - android:title="@string/show_turntable"> - - <PreferenceCategory - android:key="preferences_turntable4_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenLeft_4" - android:summary="%s" - android:title="@string/turntable_button_green_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedLeft_4" - android:summary="%s" - android:title="@string/turntable_button_red_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueLeft_4" - android:summary="%s" - android:title="@string/turntable_button_blue_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenRight_4" - android:summary="%s" - android:title="@string/turntable_button_green_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedRight_4" - android:summary="%s" - android:title="@string/turntable_button_red_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueRight_4" - android:summary="%s" - android:title="@string/turntable_button_blue_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableMinus_4" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntablePlus_4" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableHome_4" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEuphoria_4" - android:summary="%s" - android:title="@string/turntable_button_euphoria"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable4_lefttable" - android:title="@string/turntable_table_left"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftLeft_4" - android:summary="%s" - android:title="@string/turntable_table_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftRight_4" - android:summary="%s" - android:title="@string/turntable_table_left_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable4_righttable" - android:title="@string/turntable_table_right"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightLeft_4" - android:summary="%s" - android:title="@string/turntable_table_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightRight_4" - android:summary="%s" - android:title="@string/turntable_table_right_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable4_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableUp_4" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableDown_4" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeft_4" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRight_4" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="turntableRadius4" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable4_eff" - android:title="@string/turntable_effect"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEffDial_4" - android:summary="%s" - android:title="@string/turntable_effect_dial"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable4_cross" - android:title="@string/turntable_crossfade"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossLeft_4" - android:summary="%s" - android:title="@string/turntable_crossfade_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossRight_4" - android:summary="%s" - android:title="@string/turntable_crossfade_right"/> - - </PreferenceCategory> - - </PreferenceScreen> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Wiimote 2 bindings --> - <PreferenceScreen - android:key="wiimote_bindings_5" - android:title="@string/wiimote_1"> - - <CheckBoxPreference - android:key="enableWiimote2" - android:title="@string/enable_wiimote"/> - - <ListPreference - android:dependency="enableWiimote2" - android:defaultValue="None" - android:entries="@array/wiimoteExtEntries" - android:entryValues="@array/wiimoteExtValues" - android:key="wiimoteExtension5" - android:summary="@string/wiimote_extensions_descrip" - android:title="@string/wiimote_extensions"/> - - <PreferenceCategory - android:key="preferences_wiimote5_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteA_5" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteB_5" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteMinus_5" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimotePlus_5" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteHome_5" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="Wiimote1_5" - android:summary="%s" - android:title="@string/button_one"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="Wiimote2_5" - android:summary="%s" - android:title="@string/button_two"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote5_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteUp_5" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteDown_5" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteLeft_5" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="WiimoteRight_5" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote5_ir" - android:title="@string/wiimote_ir"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="IRUp_5" - android:summary="%s" - android:title="@string/ir_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="IRDown_5" - android:summary="%s" - android:title="@string/ir_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="IRLeft_5" - android:summary="%s" - android:title="@string/ir_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="IRRight_5" - android:summary="%s" - android:title="@string/ir_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="IRForward_5" - android:summary="%s" - android:title="@string/ir_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="IRBackward_5" - android:summary="%s" - android:title="@string/ir_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="IRHide_5" - android:summary="%s" - android:title="@string/ir_hide"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote5_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="SwingUp_5" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="SwingDown_5" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="SwingLeft_5" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="SwingRight_5" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="SwingForward_5" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="SwingBackward_5" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote5_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="TiltForward_5" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="TiltBackward_5" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="TiltLeft_5" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="TiltRight_5" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="TiltModifier_5" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:dependency="enableWiimote2" - android:defaultValue="50,000000" - android:key="tiltRange5" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote5_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="ShakeX_5" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="ShakeY_5" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote2" - android:key="ShakeZ_5" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - <!-- Nunchuk 2 Bindings --> - <PreferenceCategory - android:key="preferences_extension5" - android:title="@string/preferences_extensions"> - - <PreferenceScreen - android:dependency="enableWiimote2" - android:key="ExtNunchuk_5" - android:title="@string/show_nunchuk"> - - <PreferenceCategory - android:key="preferences_nunchuk5_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukC_5" - android:summary="%s" - android:title="@string/nunchuk_button_c"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukZ_5" - android:summary="%s" - android:title="@string/button_z"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk5_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukUp_5" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukDown_5" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukLeft_5" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukRight_5" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="nunchukRadius5" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk5_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingUp_5" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingDown_5" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingLeft_5" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingRight_5" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingForward_5" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingBackward_5" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk5_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltForward_5" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltBackward_5" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltLeft_5" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltRight_5" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukModifier_5" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:defaultValue="50,000000" - android:key="nunchukRange5" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk5_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeX_5" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeY_5" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeZ_5" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Classic 2 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote2" - android:key="ExtClassic_5" - android:title="@string/show_classic"> - - <PreferenceCategory - android:key="preferences_classic5_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicA_5" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicB_5" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicX_5" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicY_5" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicMinus_5" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicPlus_5" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicHome_5" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZL_5" - android:summary="%s" - android:title="@string/classic_button_zl"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZR_5" - android:summary="%s" - android:title="@string/classic_button_zr"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic5_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicUp_5" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicDown_5" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeft_5" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRight_5" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic5_leftstick" - android:title="@string/classic_leftstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickUp_5" - android:summary="%s" - android:title="@string/classic_stick_left_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickDown_5" - android:summary="%s" - android:title="@string/classic_stick_left_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickLeft_5" - android:summary="%s" - android:title="@string/classic_stick_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickRight_5" - android:summary="%s" - android:title="@string/classic_stick_left_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicLRadius5" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic5_rightstick" - android:title="@string/classic_rightstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickUp_5" - android:summary="%s" - android:title="@string/classic_stick_right_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickDown_5" - android:summary="%s" - android:title="@string/classic_stick_right_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickLeft_5" - android:summary="%s" - android:title="@string/classic_stick_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickRight_5" - android:summary="%s" - android:title="@string/classic_stick_right_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicRRadius5" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic5_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerL_5" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerR_5" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:key="classicThres5" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Guitar 2 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote2" - android:key="ExtGuitar_5" - android:title="@string/show_guitar"> - - <PreferenceCategory - android:key="preferences_guitar5_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarMinus_5" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarPlus_5" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar5_frets" - android:title="@string/guitar_frets"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarGreen_5" - android:summary="%s" - android:title="@string/guitar_fret_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRed_5" - android:summary="%s" - android:title="@string/guitar_fret_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarYellow_5" - android:summary="%s" - android:title="@string/guitar_fret_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarBlue_5" - android:summary="%s" - android:title="@string/guitar_fret_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarOrange_5" - android:summary="%s" - android:title="@string/guitar_fret_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumUp_5" - android:summary="%s" - android:title="@string/guitar_strum_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumDown_5" - android:summary="%s" - android:title="@string/guitar_strum_down"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar5_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarUp_5" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarDown_5" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarLeft_5" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRight_5" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="guitarRadius5" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar5_whammy" - android:title="@string/guitar_whammy"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarWhammy_5" - android:summary="%s" - android:title="@string/guitar_whammy_bar"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Drums 2 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote2" - android:key="ExtDrums_5" - android:title="@string/show_drums"> - - <PreferenceCategory - android:key="preferences_drums5_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsMinus_5" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsPlus_5" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums5_pads" - android:title="@string/drums_pads"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRed_5" - android:summary="%s" - android:title="@string/drums_pad_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsYellow_5" - android:summary="%s" - android:title="@string/drums_pad_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBlue_5" - android:summary="%s" - android:title="@string/drums_pad_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsGreen_5" - android:summary="%s" - android:title="@string/drums_pad_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsOrange_5" - android:summary="%s" - android:title="@string/drums_pad_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBass_5" - android:summary="%s" - android:title="@string/drums_pad_bass"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums5_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsUp_5" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsDown_5" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsLeft_5" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRight_5" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="drumsRadius5" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Turntable 2 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote2" - android:key="ExtTurntable_5" - android:title="@string/show_turntable"> - - <PreferenceCategory - android:key="preferences_turntable5_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenLeft_5" - android:summary="%s" - android:title="@string/turntable_button_green_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedLeft_5" - android:summary="%s" - android:title="@string/turntable_button_red_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueLeft_5" - android:summary="%s" - android:title="@string/turntable_button_blue_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenRight_5" - android:summary="%s" - android:title="@string/turntable_button_green_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedRight_5" - android:summary="%s" - android:title="@string/turntable_button_red_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueRight_5" - android:summary="%s" - android:title="@string/turntable_button_blue_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableMinus_5" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntablePlus_5" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableHome_5" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEuphoria_5" - android:summary="%s" - android:title="@string/turntable_button_euphoria"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable5_lefttable" - android:title="@string/turntable_table_left"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftLeft_5" - android:summary="%s" - android:title="@string/turntable_table_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftRight_5" - android:summary="%s" - android:title="@string/turntable_table_left_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable5_righttable" - android:title="@string/turntable_table_right"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightLeft_5" - android:summary="%s" - android:title="@string/turntable_table_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightRight_5" - android:summary="%s" - android:title="@string/turntable_table_right_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable5_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableUp_5" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableDown_5" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeft_5" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRight_5" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="turntableRadius5" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable5_eff" - android:title="@string/turntable_effect"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEffDial_5" - android:summary="%s" - android:title="@string/turntable_effect_dial"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable5_cross" - android:title="@string/turntable_crossfade"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossLeft_5" - android:summary="%s" - android:title="@string/turntable_crossfade_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossRight_5" - android:summary="%s" - android:title="@string/turntable_crossfade_right"/> - - </PreferenceCategory> - - </PreferenceScreen> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Wiimote 3 bindings --> - <PreferenceScreen - android:key="wiimote_bindings_6" - android:title="@string/wiimote_2"> - - <CheckBoxPreference - android:key="enableWiimote3" - android:title="@string/enable_wiimote"/> - - <ListPreference - android:dependency="enableWiimote3" - android:defaultValue="None" - android:entries="@array/wiimoteExtEntries" - android:entryValues="@array/wiimoteExtValues" - android:key="wiimoteExtension6" - android:summary="@string/wiimote_extensions_descrip" - android:title="@string/wiimote_extensions"/> - - <PreferenceCategory - android:key="preferences_wiimote6_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteA_6" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteB_6" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteMinus_6" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimotePlus_6" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteHome_6" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="Wiimote1_6" - android:summary="%s" - android:title="@string/button_one"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="Wiimote2_6" - android:summary="%s" - android:title="@string/button_two"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote6_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteUp_6" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteDown_6" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteLeft_6" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="WiimoteRight_6" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote6_ir" - android:title="@string/wiimote_ir"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="IRUp_6" - android:summary="%s" - android:title="@string/ir_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="IRDown_6" - android:summary="%s" - android:title="@string/ir_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="IRLeft_6" - android:summary="%s" - android:title="@string/ir_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="IRRight_6" - android:summary="%s" - android:title="@string/ir_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="IRForward_6" - android:summary="%s" - android:title="@string/ir_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="IRBackward_6" - android:summary="%s" - android:title="@string/ir_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="IRHide_6" - android:summary="%s" - android:title="@string/ir_hide"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote6_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="SwingUp_6" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="SwingDown_6" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="SwingLeft_6" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="SwingRight_6" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="SwingForward_6" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="SwingBackward_6" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote6_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="TiltForward_6" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="TiltBackward_6" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="TiltLeft_6" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="TiltRight_6" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="TiltModifier_6" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:defaultValue="50,000000" - android:key="tiltRange6" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote6_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="ShakeX_6" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="ShakeY_6" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote3" - android:key="ShakeZ_6" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_extension6" - android:title="@string/preferences_extensions"> - - <!-- Nunchuk 3 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote3" - android:key="ExtNunchuk_6" - android:title="@string/show_nunchuk"> - - <PreferenceCategory - android:key="preferences_nunchuk6_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukC_6" - android:summary="%s" - android:title="@string/nunchuk_button_c"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukZ_6" - android:summary="%s" - android:title="@string/button_z"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk6_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukUp_6" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukDown_6" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukLeft_6" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukRight_6" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="nunchukRadius6" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk6_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingUp_6" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingDown_6" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingLeft_6" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingRight_6" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingForward_6" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingBackward_6" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk6_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltForward_6" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltBackward_6" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltLeft_6" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltRight_6" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukModifier_6" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:defaultValue="50,000000" - android:key="nunchukRange6" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk6_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeX_6" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeY_6" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeZ_6" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Classic 3 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote3" - android:key="ExtClassic_6" - android:title="@string/show_classic"> - - <PreferenceCategory - android:key="preferences_classic6_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicA_6" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicB_6" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicX_6" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicY_6" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicMinus_6" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicPlus_6" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicHome_6" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZL_6" - android:summary="%s" - android:title="@string/classic_button_zl"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZR_6" - android:summary="%s" - android:title="@string/classic_button_zr"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic6_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicUp_6" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicDown_6" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeft_6" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRight_6" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic6_leftstick" - android:title="@string/classic_leftstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickUp_6" - android:summary="%s" - android:title="@string/classic_stick_left_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickDown_6" - android:summary="%s" - android:title="@string/classic_stick_left_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickLeft_6" - android:summary="%s" - android:title="@string/classic_stick_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickRight_6" - android:summary="%s" - android:title="@string/classic_stick_left_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicLRadius6" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic6_rightstick" - android:title="@string/classic_rightstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickUp_6" - android:summary="%s" - android:title="@string/classic_stick_right_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickDown_6" - android:summary="%s" - android:title="@string/classic_stick_right_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickLeft_6" - android:summary="%s" - android:title="@string/classic_stick_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickRight_6" - android:summary="%s" - android:title="@string/classic_stick_right_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicRRadius6" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic6_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerL_6" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerR_6" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:key="classicThres6" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Guitar 3 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote3" - android:key="ExtGuitar_6" - android:title="@string/show_guitar"> - - <PreferenceCategory - android:key="preferences_guitar6_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarMinus_6" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarPlus_6" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar6_frets" - android:title="@string/guitar_frets"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarGreen_6" - android:summary="%s" - android:title="@string/guitar_fret_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRed_6" - android:summary="%s" - android:title="@string/guitar_fret_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarYellow_6" - android:summary="%s" - android:title="@string/guitar_fret_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarBlue_6" - android:summary="%s" - android:title="@string/guitar_fret_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarOrange_6" - android:summary="%s" - android:title="@string/guitar_fret_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumUp_6" - android:summary="%s" - android:title="@string/guitar_strum_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumDown_6" - android:summary="%s" - android:title="@string/guitar_strum_down"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar6_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarUp_6" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarDown_6" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarLeft_6" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRight_6" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="guitarRadius6" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar6_whammy" - android:title="@string/guitar_whammy"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarWhammy_6" - android:summary="%s" - android:title="@string/guitar_whammy_bar"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Drums 3 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote3" - android:key="ExtDrums_6" - android:title="@string/show_drums"> - - <PreferenceCategory - android:key="preferences_drums6_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsMinus_6" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsPlus_6" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums6_pads" - android:title="@string/drums_pads"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRed_6" - android:summary="%s" - android:title="@string/drums_pad_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsYellow_6" - android:summary="%s" - android:title="@string/drums_pad_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBlue_6" - android:summary="%s" - android:title="@string/drums_pad_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsGreen_6" - android:summary="%s" - android:title="@string/drums_pad_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsOrange_6" - android:summary="%s" - android:title="@string/drums_pad_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBass_6" - android:summary="%s" - android:title="@string/drums_pad_bass"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums6_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsUp_6" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsDown_6" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsLeft_6" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRight_6" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="drumsRadius6" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Turntable 3 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote3" - android:key="ExtTurntable_6" - android:title="@string/show_turntable"> - - <PreferenceCategory - android:key="preferences_turntable6_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenLeft_6" - android:summary="%s" - android:title="@string/turntable_button_green_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedLeft_6" - android:summary="%s" - android:title="@string/turntable_button_red_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueLeft_6" - android:summary="%s" - android:title="@string/turntable_button_blue_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenRight_6" - android:summary="%s" - android:title="@string/turntable_button_green_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedRight_6" - android:summary="%s" - android:title="@string/turntable_button_red_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueRight_6" - android:summary="%s" - android:title="@string/turntable_button_blue_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableMinus_6" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntablePlus_6" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableHome_6" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEuphoria_6" - android:summary="%s" - android:title="@string/turntable_button_euphoria"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable6_lefttable" - android:title="@string/turntable_table_left"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftLeft_6" - android:summary="%s" - android:title="@string/turntable_table_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftRight_6" - android:summary="%s" - android:title="@string/turntable_table_left_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable6_righttable" - android:title="@string/turntable_table_right"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightLeft_6" - android:summary="%s" - android:title="@string/turntable_table_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightRight_6" - android:summary="%s" - android:title="@string/turntable_table_right_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable6_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableUp_6" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableDown_6" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeft_6" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRight_6" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="turntableRadius6" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable6_eff" - android:title="@string/turntable_effect"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEffDial_6" - android:summary="%s" - android:title="@string/turntable_effect_dial"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable6_cross" - android:title="@string/turntable_crossfade"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossLeft_6" - android:summary="%s" - android:title="@string/turntable_crossfade_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossRight_6" - android:summary="%s" - android:title="@string/turntable_crossfade_right"/> - - </PreferenceCategory> - - </PreferenceScreen> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Wiimote 4 bindings --> - <PreferenceScreen - android:key="wiimote_bindings_7" - android:title="@string/wiimote_3"> - - <CheckBoxPreference - android:key="enableWiimote4" - android:title="@string/enable_wiimote"/> - - <ListPreference - android:dependency="enableWiimote4" - android:defaultValue="None" - android:entries="@array/wiimoteExtEntries" - android:entryValues="@array/wiimoteExtValues" - android:key="wiimoteExtension7" - android:summary="@string/wiimote_extensions_descrip" - android:title="@string/wiimote_extensions"/> - - <PreferenceCategory - android:key="preferences_wiimote7_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteA_7" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteB_7" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteMinus_7" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimotePlus_7" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteHome_7" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="Wiimote1_7" - android:summary="%s" - android:title="@string/button_one"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="Wiimote2_7" - android:summary="%s" - android:title="@string/button_two"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote7_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteUp_7" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteDown_7" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteLeft_7" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="WiimoteRight_7" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote7_ir" - android:title="@string/wiimote_ir"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="IRUp_7" - android:summary="%s" - android:title="@string/ir_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="IRDown_7" - android:summary="%s" - android:title="@string/ir_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="IRLeft_7" - android:summary="%s" - android:title="@string/ir_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="IRRight_7" - android:summary="%s" - android:title="@string/ir_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="IRForward_7" - android:summary="%s" - android:title="@string/ir_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="IRBackward_7" - android:summary="%s" - android:title="@string/ir_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="IRHide_7" - android:summary="%s" - android:title="@string/ir_hide"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote7_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="SwingUp_7" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="SwingDown_7" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="SwingLeft_7" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="SwingRight_7" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="SwingForward_7" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="SwingBackward_7" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote7_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="TiltForward_7" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="TiltBackward_7" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="TiltLeft_7" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="TiltRight_7" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="TiltModifier_7" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:defaultValue="50,000000" - android:key="tiltRange7" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_wiimote7_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="ShakeX_7" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="ShakeY_7" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:dependency="enableWiimote4" - android:key="ShakeZ_7" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_extension7" - android:title="@string/preferences_extensions"> - - <!-- Nunchuk 4 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote4" - android:key="ExtClassic_7" - android:title="@string/show_nunchuk"> - - <PreferenceCategory - android:key="preferences_nunchuk7_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukC_7" - android:summary="%s" - android:title="@string/nunchuk_button_c"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukZ_7" - android:summary="%s" - android:title="@string/button_z"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk7_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukUp_7" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukDown_7" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukLeft_7" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukRight_7" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="nunchukRadius7" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk7_swing" - android:title="@string/wiimote_swing"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingUp_7" - android:summary="%s" - android:title="@string/swing_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingDown_7" - android:summary="%s" - android:title="@string/swing_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingLeft_7" - android:summary="%s" - android:title="@string/swing_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingRight_7" - android:summary="%s" - android:title="@string/swing_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingForward_7" - android:summary="%s" - android:title="@string/swing_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukSwingBackward_7" - android:summary="%s" - android:title="@string/swing_backward"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk7_tilt" - android:title="@string/wiimote_tilt"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltForward_7" - android:summary="%s" - android:title="@string/tilt_forward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltBackward_7" - android:summary="%s" - android:title="@string/tilt_backward"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltLeft_7" - android:summary="%s" - android:title="@string/tilt_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukTiltRight_7" - android:summary="%s" - android:title="@string/tilt_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukModifier_7" - android:summary="%s" - android:title="@string/tilt_modifier"/> - - <ListPreference - android:defaultValue="50,000000" - android:key="nunchukRange7" - android:summary="%s" - android:title="@string/modifier_range" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_nunchuk7_shake" - android:title="@string/wiimote_shake"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeX_7" - android:summary="%s" - android:title="@string/shake_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeY_7" - android:summary="%s" - android:title="@string/shake_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="NunchukShakeZ_7" - android:summary="%s" - android:title="@string/shake_z"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Classic 4 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote4" - android:key="ExtClassic_7" - android:title="@string/show_classic"> - - <PreferenceCategory - android:key="preferences_classic7_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicA_7" - android:summary="%s" - android:title="@string/button_a"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicB_7" - android:summary="%s" - android:title="@string/button_b"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicX_7" - android:summary="%s" - android:title="@string/button_x"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicY_7" - android:summary="%s" - android:title="@string/button_y"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicMinus_7" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicPlus_7" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicHome_7" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZL_7" - android:summary="%s" - android:title="@string/classic_button_zl"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicZR_7" - android:summary="%s" - android:title="@string/classic_button_zr"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic7_dpad" - android:title="@string/controller_dpad"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicUp_7" - android:summary="%s" - android:title="@string/dpad_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicDown_7" - android:summary="%s" - android:title="@string/dpad_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeft_7" - android:summary="%s" - android:title="@string/dpad_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRight_7" - android:summary="%s" - android:title="@string/dpad_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic7_leftstick" - android:title="@string/classic_leftstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickUp_7" - android:summary="%s" - android:title="@string/classic_stick_left_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickDown_7" - android:summary="%s" - android:title="@string/classic_stick_left_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickLeft_7" - android:summary="%s" - android:title="@string/classic_stick_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicLeftStickRight_7" - android:summary="%s" - android:title="@string/classic_stick_left_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicLRadius7" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic7_rightstick" - android:title="@string/classic_rightstick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickUp_7" - android:summary="%s" - android:title="@string/classic_stick_right_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickDown_7" - android:summary="%s" - android:title="@string/classic_stick_right_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickLeft_7" - android:summary="%s" - android:title="@string/classic_stick_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicRightStickRight_7" - android:summary="%s" - android:title="@string/classic_stick_right_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="classicRRadius7" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_classic7_trig" - android:title="@string/controller_trig"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerL_7" - android:summary="%s" - android:title="@string/trigger_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="ClassicTriggerR_7" - android:summary="%s" - android:title="@string/trigger_right"/> - - <ListPreference - android:defaultValue="90,000000" - android:key="classicThres7" - android:summary="%s" - android:title="@string/analog_threshold" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Guitar 4 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote4" - android:key="ExtGuitar_7" - android:title="@string/show_guitar"> - - <PreferenceCategory - android:key="preferences_guitar7_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarMinus_7" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarPlus_7" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar7_frets" - android:title="@string/guitar_frets"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarGreen_7" - android:summary="%s" - android:title="@string/guitar_fret_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRed_7" - android:summary="%s" - android:title="@string/guitar_fret_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarYellow_7" - android:summary="%s" - android:title="@string/guitar_fret_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarBlue_7" - android:summary="%s" - android:title="@string/guitar_fret_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarOrange_7" - android:summary="%s" - android:title="@string/guitar_fret_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumUp_7" - android:summary="%s" - android:title="@string/guitar_strum_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarStrumDown_7" - android:summary="%s" - android:title="@string/guitar_strum_down"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar7_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarUp_7" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarDown_7" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarLeft_7" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarRight_7" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="guitarRadius7" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_guitar7_whammy" - android:title="@string/guitar_whammy"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="GuitarWhammy_7" - android:summary="%s" - android:title="@string/guitar_whammy_bar"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Drums 4 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote4" - android:key="ExtDrums_7" - android:title="@string/show_drums"> - - <PreferenceCategory - android:key="preferences_drums7_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsMinus_7" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsPlus_7" - android:summary="%s" - android:title="@string/button_plus"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums7_pads" - android:title="@string/drums_pads"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRed_7" - android:summary="%s" - android:title="@string/drums_pad_red"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsYellow_7" - android:summary="%s" - android:title="@string/drums_pad_yellow"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBlue_7" - android:summary="%s" - android:title="@string/drums_pad_blue"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsGreen_7" - android:summary="%s" - android:title="@string/drums_pad_green"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsOrange_7" - android:summary="%s" - android:title="@string/drums_pad_orange"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsBass_7" - android:summary="%s" - android:title="@string/drums_pad_bass"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_drums7_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsUp_7" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsDown_7" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsLeft_7" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="DrumsRight_7" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="drumsRadius7" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - </PreferenceScreen> - - <!-- Turntable 4 Bindings --> - <PreferenceScreen - android:dependency="enableWiimote4" - android:key="ExtTurntable_7" - android:title="@string/show_turntable"> - - <PreferenceCategory - android:key="preferences_turntable7_buttons" - android:title="@string/controller_buttons"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenLeft_7" - android:summary="%s" - android:title="@string/turntable_button_green_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedLeft_7" - android:summary="%s" - android:title="@string/turntable_button_red_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueLeft_7" - android:summary="%s" - android:title="@string/turntable_button_blue_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableGreenRight_7" - android:summary="%s" - android:title="@string/turntable_button_green_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRedRight_7" - android:summary="%s" - android:title="@string/turntable_button_red_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableBlueRight_7" - android:summary="%s" - android:title="@string/turntable_button_blue_right"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableMinus_7" - android:summary="%s" - android:title="@string/button_minus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntablePlus_7" - android:summary="%s" - android:title="@string/button_plus"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableHome_7" - android:summary="%s" - android:title="@string/button_home"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEuphoria_7" - android:summary="%s" - android:title="@string/turntable_button_euphoria"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable7_lefttable" - android:title="@string/turntable_table_left"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftLeft_7" - android:summary="%s" - android:title="@string/turntable_table_left_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeftRight_7" - android:summary="%s" - android:title="@string/turntable_table_left_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable7_righttable" - android:title="@string/turntable_table_right"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightLeft_7" - android:summary="%s" - android:title="@string/turntable_table_right_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRightRight_7" - android:summary="%s" - android:title="@string/turntable_table_right_right"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable7_stick" - android:title="@string/wiimote_stick"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableUp_7" - android:summary="%s" - android:title="@string/stick_up"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableDown_7" - android:summary="%s" - android:title="@string/stick_down"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableLeft_7" - android:summary="%s" - android:title="@string/stick_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableRight_7" - android:summary="%s" - android:title="@string/stick_right"/> - - <ListPreference - android:defaultValue="100,000000" - android:key="turntableRadius7" - android:summary="%s" - android:title="@string/analog_radius" - android:entries="@array/analogRangesEntries" - android:entryValues="@array/analogRangesValues"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable7_eff" - android:title="@string/turntable_effect"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableEffDial_7" - android:summary="%s" - android:title="@string/turntable_effect_dial"/> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_turntable7_cross" - android:title="@string/turntable_crossfade"> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossLeft_7" - android:summary="%s" - android:title="@string/turntable_crossfade_left"/> - - <org.dolphinemu.dolphinemu.utils.InputBindingPreference - android:key="TurntableCrossRight_7" - android:summary="%s" - android:title="@string/turntable_crossfade_right"/> - - </PreferenceCategory> - - </PreferenceScreen> - - </PreferenceCategory> - - </PreferenceScreen> - - </PreferenceCategory> - - </PreferenceScreen> - - </PreferenceCategory> - - <PreferenceCategory - android:key="preferences_video" - android:title="@string/preferences_video"><!-- Video Settings --> - - <!-- Video Enhancements --> - <PreferenceScreen - android:title="@string/enhancements" - android:key="enhancements"> - - <ListPreference - android:entries="@array/internalResolutionEntries" - android:entryValues="@array/internalResolutionValues" - android:key="internalResolution" - android:summary="@string/internal_resolution_descrip" - android:title="@string/internal_resolution"/> - - <ListPreference - android:entries="@array/FSAAEntries" - android:entryValues="@array/FSAAValues" - android:key="FSAA" - android:summary="@string/FSAA_descrip" - android:title="@string/FSAA"/> - - <ListPreference - android:entries="@array/anisotropicFilteringEntries" - android:entryValues="@array/anisotropicFilteringValues" - android:key="anisotropicFiltering" - android:summary="@string/anisotropic_filtering_descrip" - android:title="@string/anisotropic_filtering"/> - - <ListPreference - android:key="postProcessingShader" - android:summary="@string/postprocessing_shader_descrip" - android:title="@string/postprocessing_shader"/> - - <CheckBoxPreference - android:defaultValue="true" - android:key="scaledEFBCopy" - android:summary="@string/scaled_efb_copy_descrip" - android:title="@string/scaled_efb_copy"/> - - <CheckBoxPreference - android:defaultValue="false" - android:key="perPixelLighting" - android:summary="@string/per_pixel_lighting_descrip" - android:title="@string/per_pixel_lighting"/> - - <CheckBoxPreference - android:defaultValue="false" - android:key="forceTextureFiltering" - android:summary="@string/force_texture_filtering_descrip" - android:title="@string/force_texture_filtering"/> - - <CheckBoxPreference - android:defaultValue="false" - android:key="disableFog" - android:summary="@string/disable_fog_descrip" - android:title="@string/disable_fog"/> - - <PreferenceScreen - android:key="StereoscopyScreen" - android:summary="@string/stereoscopy_descrip" - android:title="@string/stereoscopy"> - - <ListPreference - android:entries="@array/stereoscopyEntries" - android:entryValues="@array/stereoscopyValues" - android:key="stereoscopyMode" - android:summary="@string/stereoscopy_mode_descrip" - android:title="@string/stereoscopy_mode"/> - - <org.dolphinemu.dolphinemu.utils.SliderPreference - android:defaultValue="20" - android:key="stereoDepth" - android:max="100" - android:summary="@string/sterescopy_depth_descrip" - android:title="@string/sterescopy_depth"/> - - <org.dolphinemu.dolphinemu.utils.SliderPreference - android:defaultValue="20" - android:key="stereoConvergence" - android:max="500" - android:summary="@string/convergence_descrip" - android:title="@string/convergence"/> - - <CheckBoxPreference - android:defaultValue="false" - android:key="stereoSwapEyes" - android:summary="@string/swap_eyes_descrip" - android:title="@string/swap_eyes"/> - </PreferenceScreen> - </PreferenceScreen> - - <!-- Video Hacks --> - <PreferenceScreen - android:title="@string/hacks" - android:key="hacks"> - <PreferenceCategory android:title="@string/embedded_frame_buffer"> - - <CheckBoxPreference - android:defaultValue="false" - android:key="skipEFBAccess" - android:summary="@string/skip_efb_access_descrip" - android:title="@string/skip_efb_access"/> - - <CheckBoxPreference - android:defaultValue="true" - android:key="ignoreFormatChanges" - android:summary="@string/ignore_format_changes_descrip" - android:title="@string/ignore_format_changes"/> - - <ListPreference - android:defaultValue="Texture" - android:entries="@array/efbCopyMethodEntries" - android:entryValues="@array/efbCopyMethodValues" - android:key="efbCopyMethod" - android:summary="@string/efb_copy_method_descrip" - android:title="@string/efb_copy_method"/> - - </PreferenceCategory> - - <!-- Texture Cache --> - <PreferenceCategory android:title="@string/texture_cache"> - <ListPreference - android:defaultValue="Low" - android:entries="@array/textureCacheAccuracyEntries" - android:entryValues="@array/textureCacheAccuracyValues" - android:key="textureCacheAccuracy" - android:summary="@string/texture_cache_accuracy_descrip" - android:title="@string/texture_cache_accuracy"/> - </PreferenceCategory> - - <!-- External Frame Buffer --> - <PreferenceCategory android:title="@string/external_frame_buffer"> - <ListPreference - android:defaultValue="Disabled" - android:entries="@array/externalFrameBufferEntries" - android:entryValues="@array/externalFrameBufferValues" - android:key="externalFrameBuffer" - android:summary="@string/external_frame_buffer_descrip" - android:title="@string/external_frame_buffer"/> - </PreferenceCategory> - - - <!-- Other Hacks --> - <PreferenceCategory android:title="@string/other"> - - <CheckBoxPreference - android:defaultValue="true" - android:key="fastDepthCalculation" - android:summary="@string/fast_depth_calculation_descrip" - android:title="@string/fast_depth_calculation"/> - - <ListPreference - android:defaultValue="0" - android:entries="@array/aspectRatioEntries" - android:entryValues="@array/aspectRatioValues" - android:key="aspectRatio" - android:summary="@string/aspect_ratio_descrip" - android:title="@string/aspect_ratio"/> - - </PreferenceCategory> - </PreferenceScreen> - - <ListPreference - android:key="gpuPref" - android:summary="@string/video_backend_desc" - android:title="@string/video_backend"/> - - <CheckBoxPreference - android:key="showFPS" - android:summary="@string/show_fps_descrip" - android:title="@string/show_fps"/> - - </PreferenceCategory> - - <!-- TODO Add the About information here too. --> -</PreferenceScreen> |
