summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2018-07-04 21:50:09 +0200
committerGitHub <noreply@github.com>2018-07-04 21:50:09 +0200
commitfd83937987f5a6a9152513975375c49d49028daf (patch)
tree12f11be089ca0b08f2ee1e2c4aeefb025d191b49 /Source/Android/app/src/main/java
parent0cf205f9475228419265318b0ff34e8706930d2f (diff)
parent77e51ab5271f1d6db265feb1c41e1a14866d101c (diff)
Merge pull request #6338 from mahdihijazi/settings_enhancements
Update Android UI Settings to have the most common used settings
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java6
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java6
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/IntSetting.java16
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SettingsItem.java1
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SingleChoiceSetting.java15
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SliderSetting.java3
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/StringSingleChoiceSetting.java97
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/SubmenuSetting.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/DirectoryInitializationService.java16
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java3
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java12
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainView.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java9
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/MenuTag.java106
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivity.java25
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityPresenter.java26
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsActivityView.java16
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java55
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java30
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java237
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java15
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/SingleChoiceViewHolder.java14
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java6
23 files changed, 569 insertions, 159 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java
index b1f3fb0a7b..b33919c491 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameAdapter.java
@@ -14,9 +14,9 @@ import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
import org.dolphinemu.dolphinemu.model.GameFile;
import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity;
import org.dolphinemu.dolphinemu.utils.PicassoUtils;
-import org.dolphinemu.dolphinemu.utils.SettingsFile;
import org.dolphinemu.dolphinemu.viewholders.GameViewHolder;
import java.io.File;
@@ -156,10 +156,10 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
- SettingsActivity.launch(activity, SettingsFile.FILE_NAME_DOLPHIN, gameId);
+ SettingsActivity.launch(activity, MenuTag.CONFIG, gameId);
break;
case 1:
- SettingsActivity.launch(activity, SettingsFile.FILE_NAME_GFX, gameId);
+ SettingsActivity.launch(activity, MenuTag.GRAPHICS, gameId);
break;
case 2:
String path = DirectoryInitializationService.getUserDirectory() + "/GameSettings/" + gameId + ".ini";
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java
index 4928a0b44e..e7c12562cf 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/adapters/GameRowPresenter.java
@@ -17,9 +17,9 @@ import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.model.GameFile;
import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity;
import org.dolphinemu.dolphinemu.utils.PicassoUtils;
-import org.dolphinemu.dolphinemu.utils.SettingsFile;
import org.dolphinemu.dolphinemu.viewholders.TvGameViewHolder;
import java.io.File;
@@ -103,10 +103,10 @@ public final class GameRowPresenter extends Presenter
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
- SettingsActivity.launch(activity, SettingsFile.FILE_NAME_DOLPHIN, gameId);
+ SettingsActivity.launch(activity, MenuTag.CONFIG, gameId);
break;
case 1:
- SettingsActivity.launch(activity, SettingsFile.FILE_NAME_GFX, gameId);
+ SettingsActivity.launch(activity, MenuTag.GRAPHICS, gameId);
break;
case 2:
String path = DirectoryInitializationService.getUserDirectory() + "/GameSettings/" + gameId + ".ini";
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
index 145ec9a76f..9f8ae14f95 100644
--- 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
@@ -1,8 +1,11 @@
package org.dolphinemu.dolphinemu.model.settings;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
+
public final class IntSetting extends Setting
{
private int mValue;
+ private MenuTag menuTag;
public IntSetting(String key, String section, int file, int value)
{
@@ -10,6 +13,13 @@ public final class IntSetting extends Setting
mValue = value;
}
+ public IntSetting(String key, String section, int file, int value, MenuTag menuTag)
+ {
+ super(key, section, file);
+ mValue = value;
+ this.menuTag = menuTag;
+ }
+
public int getValue()
{
return mValue;
@@ -25,4 +35,10 @@ public final class IntSetting extends Setting
{
return Integer.toString(mValue);
}
+
+ public MenuTag getMenuTag()
+ {
+ return menuTag;
+ }
+
}
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
index 094e8be91d..95a926038a 100644
--- 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
@@ -17,6 +17,7 @@ public abstract class SettingsItem
public static final int TYPE_SLIDER = 3;
public static final int TYPE_SUBMENU = 4;
public static final int TYPE_INPUT_BINDING = 5;
+ public static final int TYPE_STRING_SINGLE_CHOICE = 6;
private String mKey;
private String mSection;
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
index 4566ddd54a..68d418f096 100644
--- 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
@@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.model.settings.view;
import org.dolphinemu.dolphinemu.model.settings.IntSetting;
import org.dolphinemu.dolphinemu.model.settings.Setting;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
public final class SingleChoiceSetting extends SettingsItem
{
@@ -9,13 +10,20 @@ public final class SingleChoiceSetting extends SettingsItem
private int mChoicesId;
private int mValuesId;
+ private MenuTag menuTag;
- public SingleChoiceSetting(String key, String section, int file, int titleId, int descriptionId, int choicesId, int valuesId, int defaultValue, Setting setting)
+ public SingleChoiceSetting(String key, String section, int file, int titleId, int descriptionId, int choicesId, int valuesId, int defaultValue, Setting setting, MenuTag menuTag)
{
super(key, section, file, setting, titleId, descriptionId);
mValuesId = valuesId;
mChoicesId = choicesId;
mDefaultValue = defaultValue;
+ this.menuTag = menuTag;
+ }
+
+ public SingleChoiceSetting(String key, String section, int file, int titleId, int descriptionId, int choicesId, int valuesId, int defaultValue, Setting setting)
+ {
+ this(key, section, file, titleId, descriptionId, choicesId, valuesId, defaultValue, setting, null);
}
public int getChoicesId()
@@ -41,6 +49,11 @@ public final class SingleChoiceSetting extends SettingsItem
}
}
+ public MenuTag getMenuTag()
+ {
+ return menuTag;
+ }
+
/**
* 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.
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
index 0d67eaabe4..9ab9edf4a9 100644
--- 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
@@ -43,7 +43,8 @@ public final class SliderSetting extends SettingsItem
else if (setting instanceof FloatSetting)
{
FloatSetting floatSetting = (FloatSetting) setting;
- if (floatSetting.getKey().equals(SettingsFile.KEY_OVERCLOCK_PERCENT))
+ if (floatSetting.getKey().equals(SettingsFile.KEY_OVERCLOCK_PERCENT)
+ || floatSetting.getKey().equals(SettingsFile.KEY_SPEED_LIMIT))
{
return Math.round(floatSetting.getValue() * 100);
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/StringSingleChoiceSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/StringSingleChoiceSetting.java
new file mode 100644
index 0000000000..161ee0f567
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/StringSingleChoiceSetting.java
@@ -0,0 +1,97 @@
+package org.dolphinemu.dolphinemu.model.settings.view;
+
+import org.dolphinemu.dolphinemu.model.settings.Setting;
+import org.dolphinemu.dolphinemu.model.settings.StringSetting;
+
+public class StringSingleChoiceSetting extends SettingsItem
+{
+ private String mDefaultValue;
+
+ private String[] mChoicesId;
+ private String[] mValuesId;
+
+ public StringSingleChoiceSetting(String key, String section, int file, int titleId, int descriptionId, String[] choicesId, String[] valuesId, String defaultValue, Setting setting)
+ {
+ super(key, section, file, setting, titleId, descriptionId);
+ mValuesId = valuesId;
+ mChoicesId = choicesId;
+ mDefaultValue = defaultValue;
+ }
+
+ public String[] getChoicesId()
+ {
+ return mChoicesId;
+ }
+
+ public String[] getValuesId()
+ {
+ return mValuesId;
+ }
+
+ public String getValueAt(int index)
+ {
+ if (mValuesId == null)
+ return null;
+
+ if (index >= 0 && index < mValuesId.length)
+ {
+ return mValuesId[index];
+ }
+
+ return "";
+ }
+
+ public String getSelectedValue()
+ {
+ if (getSetting() != null)
+ {
+ StringSetting setting = (StringSetting) getSetting();
+ return setting.getValue();
+ }
+ else
+ {
+ return mDefaultValue;
+ }
+ }
+
+ public int getSelectValueIndex() {
+ String selectedValue = getSelectedValue();
+ for(int i=0;i<mValuesId.length;i++) {
+ if(mValuesId[i].equals(selectedValue)) {
+ return i;
+ }
+ }
+
+ 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 StringSetting setSelectedValue(String selection)
+ {
+ if (getSetting() == null)
+ {
+ StringSetting setting = new StringSetting(getKey(), getSection(), getFile(), selection);
+ setSetting(setting);
+ return setting;
+ }
+ else
+ {
+ StringSetting setting = (StringSetting) getSetting();
+ setting.setValue(selection);
+ return null;
+ }
+ }
+
+ @Override
+ public int getType()
+ {
+ return TYPE_STRING_SINGLE_CHOICE;
+ }
+}
+
+
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
index 4f9e2b2209..1c528ed356 100644
--- 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
@@ -1,18 +1,19 @@
package org.dolphinemu.dolphinemu.model.settings.view;
import org.dolphinemu.dolphinemu.model.settings.Setting;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
public final class SubmenuSetting extends SettingsItem
{
- private String mMenuKey;
+ private MenuTag mMenuKey;
- public SubmenuSetting(String key, Setting setting, int titleId, int descriptionId, String menuKey)
+ public SubmenuSetting(String key, Setting setting, int titleId, int descriptionId, MenuTag menuKey)
{
super(key, null, 0, setting, titleId, descriptionId);
mMenuKey = menuKey;
}
- public String getMenuKey()
+ public MenuTag getMenuKey()
{
return mMenuKey;
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/DirectoryInitializationService.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/DirectoryInitializationService.java
index 9dde847d35..795a0b74ae 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/DirectoryInitializationService.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/DirectoryInitializationService.java
@@ -37,6 +37,7 @@ public final class DirectoryInitializationService extends IntentService
public static final String EXTRA_STATE = "directoryState";
private static volatile DirectoryInitializationState directoryState = null;
private static String userPath;
+ private static String internalPath;
private static AtomicBoolean isDolphinDirectoryInitializationRunning = new AtomicBoolean(false);
public enum DirectoryInitializationState
@@ -110,6 +111,7 @@ public final class DirectoryInitializationService extends IntentService
private void initializeInternalStorage()
{
File sysDirectory = new File(getFilesDir(), "Sys");
+ internalPath = sysDirectory.getAbsolutePath();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String revision = NativeLibrary.GetGitRevision();
@@ -177,6 +179,20 @@ public final class DirectoryInitializationService extends IntentService
}
+ public static String getDolphinInternalDirectory()
+ {
+ if (directoryState == null)
+ {
+ throw new IllegalStateException("DirectoryInitializationService has to run at least once!");
+ }
+ else if (isDolphinDirectoryInitializationRunning.get())
+ {
+ throw new IllegalStateException("DirectoryInitializationService has to finish running first!");
+ }
+ return internalPath;
+
+ }
+
private void sendBroadcastState(DirectoryInitializationState state)
{
Intent localIntent =
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 57b9814a75..36ea898753 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
@@ -21,6 +21,7 @@ import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
import org.dolphinemu.dolphinemu.services.GameFileCacheService;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
import org.dolphinemu.dolphinemu.ui.platform.PlatformGamesView;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity;
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper;
import org.dolphinemu.dolphinemu.utils.PermissionsHandler;
@@ -129,7 +130,7 @@ public final class MainActivity extends AppCompatActivity implements MainView
}
@Override
- public void launchSettingsActivity(String menuTag)
+ public void launchSettingsActivity(MenuTag menuTag)
{
SettingsActivity.launch(this, menuTag, "");
}
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 9ae48acb0f..92e35e5907 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
@@ -10,7 +10,7 @@ import org.dolphinemu.dolphinemu.BuildConfig;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.model.GameFileCache;
import org.dolphinemu.dolphinemu.services.GameFileCacheService;
-import org.dolphinemu.dolphinemu.utils.SettingsFile;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
public final class MainPresenter
{
@@ -64,19 +64,19 @@ public final class MainPresenter
switch (itemId)
{
case R.id.menu_settings_core:
- mView.launchSettingsActivity(SettingsFile.FILE_NAME_DOLPHIN);
+ mView.launchSettingsActivity(MenuTag.CONFIG);
return true;
- case R.id.menu_settings_video:
- mView.launchSettingsActivity(SettingsFile.FILE_NAME_GFX);
+ case R.id.menu_settings_graphics:
+ mView.launchSettingsActivity(MenuTag.GRAPHICS);
return true;
case R.id.menu_settings_gcpad:
- mView.launchSettingsActivity(SettingsFile.FILE_NAME_GCPAD);
+ mView.launchSettingsActivity(MenuTag.GCPAD_TYPE);
return true;
case R.id.menu_settings_wiimote:
- mView.launchSettingsActivity(SettingsFile.FILE_NAME_WIIMOTE);
+ mView.launchSettingsActivity(MenuTag.WIIMOTE);
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 cb21b7b084..88e6a175c3 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
@@ -1,9 +1,6 @@
package org.dolphinemu.dolphinemu.ui.main;
-import android.database.Cursor;
-
-import org.dolphinemu.dolphinemu.model.GameFile;
-import org.dolphinemu.dolphinemu.ui.platform.Platform;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
/**
* Abstraction for the screen that shows on application launch.
@@ -29,7 +26,7 @@ public interface MainView
void refreshFragmentScreenshot(int fragmentPosition);
- void launchSettingsActivity(String menuTag);
+ void launchSettingsActivity(MenuTag 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 10187df402..27b5ce6711 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
@@ -23,6 +23,7 @@ import org.dolphinemu.dolphinemu.model.TvSettingsItem;
import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
import org.dolphinemu.dolphinemu.services.GameFileCacheService;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
+import org.dolphinemu.dolphinemu.ui.settings.MenuTag;
import org.dolphinemu.dolphinemu.ui.settings.SettingsActivity;
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper;
import org.dolphinemu.dolphinemu.utils.PermissionsHandler;
@@ -119,7 +120,7 @@ public final class TvMainActivity extends FragmentActivity implements MainView
}
@Override
- public void launchSettingsActivity(String menuTag)
+ public void launchSettingsActivity(MenuTag menuTag)
{
SettingsActivity.launch(this, menuTag, "");
}
@@ -230,11 +231,11 @@ public final class TvMainActivity extends FragmentActivity implements MainView
rowItems.add(new TvSettingsItem(R.id.menu_settings_core,
R.drawable.ic_settings_core_tv,
- R.string.grid_menu_core_settings));
+ R.string.grid_menu_config));
- rowItems.add(new TvSettingsItem(R.id.menu_settings_video,
+ rowItems.add(new TvSettingsItem(R.id.menu_settings_graphics,
R.drawable.ic_settings_graphics_tv,
- R.string.grid_menu_video_settings));
+ R.string.grid_menu_graphics_settings));
rowItems.add(new TvSettingsItem(R.id.menu_settings_gcpad,
R.drawable.ic_settings_gcpad,
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/MenuTag.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/MenuTag.java
new file mode 100644
index 0000000000..9f1adf0aed
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/MenuTag.java
@@ -0,0 +1,106 @@
+package org.dolphinemu.dolphinemu.ui.settings;
+
+public enum MenuTag
+{
+ CONFIG("config"),
+ CONFIG_GENERAL("config_general"),
+ CONFIG_INTERFACE("config_interface"),
+ CONFIG_GAME_CUBE("config_gamecube"),
+ CONFIG_WII("config_wii"),
+ WIIMOTE("wiimote"),
+ WIIMOTE_EXTENSION("wiimote_extension"),
+ GCPAD_TYPE("gc_pad_type"),
+ GRAPHICS("graphics"),
+ HACKS("hacks"),
+ ENHANCEMENTS("enhancements"),
+ STEREOSCOPY("stereoscopy"),
+ GCPAD_1("gcpad", 0),
+ GCPAD_2("gcpad", 1),
+ GCPAD_3("gcpad", 2),
+ GCPAD_4("gcpad", 3),
+ WIIMOTE_1("wiimote", 1),
+ WIIMOTE_2("wiimote", 2),
+ WIIMOTE_3("wiimote", 3),
+ WIIMOTE_4("wiimote", 4),
+ WIIMOTE_EXTENSION_1("wiimote_extension", 1),
+ WIIMOTE_EXTENSION_2("wiimote_extension", 2),
+ WIIMOTE_EXTENSION_3("wiimote_extension", 3),
+ WIIMOTE_EXTENSION_4("wiimote_extension", 4);
+
+ private String tag;
+ private int subType = -1;
+
+ MenuTag(String tag)
+ {
+ this.tag = tag;
+ }
+
+ MenuTag(String tag, int subtype)
+ {
+ this.tag = tag;
+ this.subType = subtype;
+ }
+
+ @Override
+ public String toString()
+ {
+ if (subType != -1)
+ {
+ return tag + subType;
+ }
+
+ return tag;
+ }
+
+ public String getTag()
+ {
+ return tag;
+ }
+
+ public int getSubType()
+ {
+ return subType;
+ }
+
+ public boolean isGCPadMenu()
+ {
+ return this == GCPAD_1 || this == GCPAD_2 || this == GCPAD_3 || this == GCPAD_4;
+ }
+
+ public boolean isWiimoteMenu()
+ {
+ return this == WIIMOTE_1 || this == WIIMOTE_2 || this == WIIMOTE_3 || this == WIIMOTE_4;
+ }
+
+ public boolean isWiimoteExtensionMenu()
+ {
+ return this == WIIMOTE_EXTENSION_1 || this == WIIMOTE_EXTENSION_2
+ || this == WIIMOTE_EXTENSION_3 || this == WIIMOTE_EXTENSION_4;
+ }
+
+ public static MenuTag getGCPadMenuTag(int subtype)
+ {
+ return getMenuTag("gcpad", subtype);
+ }
+
+ public static MenuTag getWiimoteMenuTag(int subtype)
+ {
+ return getMenuTag("wiimote", subtype);
+ }
+
+ public static MenuTag getWiimoteExtensionMenuTag(int subtype)
+ {
+ return getMenuTag("wiimote_extension", subtype);
+ }
+
+ private static MenuTag getMenuTag(String tag, int subtype)
+ {
+ for (MenuTag menuTag : MenuTag.values())
+ {
+ if (menuTag.tag.equals(tag) && menuTag.subType == subtype) return menuTag;
+ }
+
+ throw new IllegalArgumentException("You are asking for a menu that is not available or " +
+ "passing a wrong subtype");
+ }
+}
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
index 5a0a5a8e8d..1c76b48042 100644
--- 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
@@ -25,20 +25,18 @@ import java.util.HashMap;
public final class SettingsActivity extends AppCompatActivity implements SettingsActivityView
{
- private static final String ARG_FILE_NAME = "file_name";
+ private static final String ARG_MENU_TAG = "menu_tag";
private static final String ARG_GAME_ID = "game_id";
-
private static final String FRAGMENT_TAG = "settings";
private SettingsActivityPresenter mPresenter = new SettingsActivityPresenter(this);
private ProgressDialog dialog;
- public static void launch(Context context, String menuTag, String gameId)
+ public static void launch(Context context, MenuTag menuTag, String gameId)
{
Intent settings = new Intent(context, SettingsActivity.class);
- settings.putExtra(ARG_FILE_NAME, menuTag);
+ settings.putExtra(ARG_MENU_TAG, menuTag);
settings.putExtra(ARG_GAME_ID, gameId);
-
context.startActivity(settings);
}
@@ -50,10 +48,9 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
setContentView(R.layout.activity_settings);
Intent launcher = getIntent();
- String filename = launcher.getStringExtra(ARG_FILE_NAME);
String gameID = launcher.getStringExtra(ARG_GAME_ID);
-
- mPresenter.onCreate(savedInstanceState, filename, gameID);
+ MenuTag menuTag = (MenuTag) launcher.getSerializableExtra(ARG_MENU_TAG);
+ mPresenter.onCreate(savedInstanceState, menuTag, gameID);
}
@Override
@@ -107,7 +104,7 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
@Override
- public void showSettingsFragment(String menuTag, boolean addToStack, String gameID)
+ public void showSettingsFragment(MenuTag menuTag, Bundle extras, boolean addToStack, String gameID)
{
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
@@ -125,7 +122,7 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
transaction.addToBackStack(null);
mPresenter.addToStack();
}
- transaction.replace(R.id.frame_content, SettingsFragment.newInstance(menuTag, gameID), FRAGMENT_TAG);
+ transaction.replace(R.id.frame_content, SettingsFragment.newInstance(menuTag, gameID, extras), FRAGMENT_TAG);
transaction.commit();
}
@@ -242,21 +239,21 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
}
@Override
- public void onGcPadSettingChanged(String key, int value)
+ public void onGcPadSettingChanged(MenuTag key, int value)
{
mPresenter.onGcPadSettingChanged(key, value);
}
@Override
- public void onWiimoteSettingChanged(String section, int value)
+ public void onWiimoteSettingChanged(MenuTag section, int value)
{
mPresenter.onWiimoteSettingChanged(section, value);
}
@Override
- public void onExtensionSettingChanged(String key, int value)
+ public void onExtensionSettingChanged(MenuTag menuTag, int value)
{
- mPresenter.onExtensionSettingChanged(key, value);
+ mPresenter.onExtensionSettingChanged(menuTag, value);
}
private SettingsFragment getFragment()
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
index 35e0ec1539..b63481794f 100644
--- 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
@@ -31,7 +31,7 @@ public final class SettingsActivityPresenter
private DirectoryStateReceiver directoryStateReceiver;
- private String menuTag;
+ private MenuTag menuTag;
private String gameId;
public SettingsActivityPresenter(SettingsActivityView view)
@@ -39,7 +39,7 @@ public final class SettingsActivityPresenter
mView = view;
}
- public void onCreate(Bundle savedInstanceState, String menuTag, String gameId)
+ public void onCreate(Bundle savedInstanceState, MenuTag menuTag, String gameId)
{
if (savedInstanceState == null)
{
@@ -75,7 +75,7 @@ public final class SettingsActivityPresenter
}
}
- mView.showSettingsFragment(menuTag, false, gameId);
+ mView.showSettingsFragment(menuTag, null, false, gameId);
mView.onSettingsFileLoaded(mSettings);
}
@@ -135,11 +135,11 @@ public final class SettingsActivityPresenter
if (!TextUtils.isEmpty(gameId)) {
Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI...");
// Needed workaround for now due to an odd bug in how it handles saving two different settings sections to the same file. It won't save GFX settings if it follows the normal saving pattern
- if (menuTag.equals("Dolphin"))
+ if (menuTag.equals(MenuTag.CONFIG))
{
SettingsFile.saveFile("../GameSettings/" + gameId, mSettings.get(SettingsFile.SETTINGS_DOLPHIN), mView);
}
- else if (menuTag.equals("GFX"))
+ else if (menuTag.equals(MenuTag.GRAPHICS))
{
SettingsFile.saveFile("../GameSettings/" + gameId, mSettings.get(SettingsFile.SETTINGS_GFX), mView);
}
@@ -194,20 +194,22 @@ public final class SettingsActivityPresenter
outState.putBoolean(KEY_SHOULD_SAVE, mShouldSave);
}
- public void onGcPadSettingChanged(String key, int value)
+ public void onGcPadSettingChanged(MenuTag key, int value)
{
if (value != 0) // Not disabled
{
- mView.showSettingsFragment(key + (value / 6), true, gameId);
+ Bundle bundle = new Bundle();
+ bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value/6);
+ mView.showSettingsFragment(key, bundle, true, gameId);
}
}
- public void onWiimoteSettingChanged(String section, int value)
+ public void onWiimoteSettingChanged(MenuTag menuTag, int value)
{
switch (value)
{
case 1:
- mView.showSettingsFragment(section, true, gameId);
+ mView.showSettingsFragment(menuTag, null, true, gameId);
break;
case 2:
@@ -216,11 +218,13 @@ public final class SettingsActivityPresenter
}
}
- public void onExtensionSettingChanged(String key, int value)
+ public void onExtensionSettingChanged(MenuTag menuTag, int value)
{
if (value != 0) // None
{
- mView.showSettingsFragment(key + value, true, gameId);
+ Bundle bundle = new Bundle();
+ bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value);
+ mView.showSettingsFragment(menuTag, bundle, true, gameId);
}
}
}
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
index 6bc396e6b9..5885868531 100644
--- 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
@@ -1,6 +1,7 @@
package org.dolphinemu.dolphinemu.ui.settings;
import android.content.IntentFilter;
+import android.os.Bundle;
import org.dolphinemu.dolphinemu.model.settings.SettingSection;
import org.dolphinemu.dolphinemu.utils.DirectoryStateReceiver;
@@ -19,7 +20,7 @@ public interface SettingsActivityView
* @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, String gameId);
+ void showSettingsFragment(MenuTag menuTag, Bundle extras, boolean addToStack, String gameId);
/**
* Called by a contained Fragment to get access to the Setting HashMap
@@ -79,29 +80,28 @@ public interface SettingsActivityView
* Called by a containing Fragment to tell the containing Activity that a GCPad's setting
* was modified.
*
- * @param key Identifier for the GCPad that was modified.
+ * @param menuTag Identifier for the GCPad that was modified.
* @param value New setting for the GCPad.
*/
- void onGcPadSettingChanged(String key, int value);
+ void onGcPadSettingChanged(MenuTag menuTag, int value);
/**
* Called by a containing Fragment to tell the containing Activity that a Wiimote's setting
* was modified.
*
- * @param section Identifier for Wiimote that was modified; Wiimotes are identified by their section,
- * not their key.
+ * @param menuTag Identifier for Wiimote that was modified.
* @param value New setting for the Wiimote.
*/
- void onWiimoteSettingChanged(String section, int value);
+ void onWiimoteSettingChanged(MenuTag menuTag, int value);
/**
* Called by a containing Fragment to tell the containing Activity that an extension setting
* was modified.
*
- * @param key Identifier for the extension that was modified.
+ * @param menuTag Identifier for the extension that was modified.
* @param value New setting for the extension.
*/
- void onExtensionSettingChanged(String key, int value);
+ void onExtensionSettingChanged(MenuTag menuTag, int value);
/**
* Show loading dialog while loading the settings
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
index 2548b3c0af..2f58e2801f 100644
--- 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
@@ -23,6 +23,7 @@ import org.dolphinemu.dolphinemu.model.settings.view.InputBindingSetting;
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.StringSingleChoiceSetting;
import org.dolphinemu.dolphinemu.model.settings.view.SubmenuSetting;
import org.dolphinemu.dolphinemu.ui.settings.viewholder.CheckBoxSettingViewHolder;
import org.dolphinemu.dolphinemu.ui.settings.viewholder.HeaderViewHolder;
@@ -71,6 +72,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
view = inflater.inflate(R.layout.list_item_setting_checkbox, parent, false);
return new CheckBoxSettingViewHolder(view, this);
+ case SettingsItem.TYPE_STRING_SINGLE_CHOICE:
case SettingsItem.TYPE_SINGLE_CHOICE:
view = inflater.inflate(R.layout.list_item_setting, parent, false);
return new SingleChoiceViewHolder(view, this);
@@ -161,6 +163,18 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
mDialog = builder.show();
}
+ public void onStringSingleChoiceClick(StringSingleChoiceSetting item)
+ {
+ mClickedItem = item;
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
+
+ builder.setTitle(item.getNameId());
+ builder.setSingleChoiceItems(item.getChoicesId(), item.getSelectValueIndex(), this);
+
+ mDialog = builder.show();
+ }
+
public void onSliderClick(SliderSetting item)
{
mClickedItem = item;
@@ -186,6 +200,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
seekbar.setMax(item.getMax());
seekbar.setProgress(mSeekbarProgress);
+ seekbar.setKeyProgressIncrement(5);
seekbar.setOnSeekBarChangeListener(this);
}
@@ -234,20 +249,23 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
SingleChoiceSetting scSetting = (SingleChoiceSetting) mClickedItem;
int value = getValueForSingleChoiceSelection(scSetting, which);
-
- if (scSetting.getKey().startsWith(SettingsFile.KEY_GCPAD_TYPE))
+ MenuTag menuTag = scSetting.getMenuTag();
+ if(menuTag != null)
{
- mView.onGcPadSettingChanged(scSetting.getKey(), value);
- }
+ if (menuTag.isGCPadMenu())
+ {
+ mView.onGcPadSettingChanged(menuTag, value);
+ }
- if (scSetting.getKey().equals(SettingsFile.KEY_WIIMOTE_TYPE))
- {
- mView.onWiimoteSettingChanged(scSetting.getSection(), value);
- }
+ if (menuTag.isWiimoteMenu())
+ {
+ mView.onWiimoteSettingChanged(menuTag, value);
+ }
- if (scSetting.getKey().equals(SettingsFile.KEY_WIIMOTE_EXTENSION))
- {
- mView.onExtensionSettingChanged(scSetting.getKey() + Character.getNumericValue(scSetting.getSection().charAt(scSetting.getSection().length() - 1)), value);
+ if (menuTag.isWiimoteExtensionMenu())
+ {
+ mView.onExtensionSettingChanged(menuTag, value);
+ }
}
// Get the backing Setting, which may be null (if for example it was missing from the file)
@@ -270,6 +288,18 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
closeDialog();
}
+ else if (mClickedItem instanceof StringSingleChoiceSetting)
+ {
+ StringSingleChoiceSetting scSetting = (StringSingleChoiceSetting) mClickedItem;
+ String value = scSetting.getValueAt(which);
+ StringSetting setting = scSetting.setSelectedValue(value);
+ if (setting != null)
+ {
+ mView.putSetting(setting);
+ }
+
+ closeDialog();
+ }
else if (mClickedItem instanceof SliderSetting)
{
SliderSetting sliderSetting = (SliderSetting) mClickedItem;
@@ -277,7 +307,8 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
{
float value;
- if (sliderSetting.getKey().equals(SettingsFile.KEY_OVERCLOCK_PERCENT))
+ if (sliderSetting.getKey().equals(SettingsFile.KEY_OVERCLOCK_PERCENT)
+ || sliderSetting.getKey().equals(SettingsFile.KEY_SPEED_LIMIT))
{
value = mSeekbarProgress / 100.0f;
}
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
index 111f042d9d..ccd2f1e7b1 100644
--- 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
@@ -31,12 +31,17 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
private SettingsAdapter mAdapter;
- public static Fragment newInstance(String menuTag, String gameId)
+ public static Fragment newInstance(MenuTag menuTag, String gameId, Bundle extras)
{
SettingsFragment fragment = new SettingsFragment();
Bundle arguments = new Bundle();
- arguments.putString(ARGUMENT_MENU_TAG, menuTag);
+ if(extras != null)
+ {
+ arguments.putAll(extras);
+ }
+
+ arguments.putSerializable(ARGUMENT_MENU_TAG, menuTag);
arguments.putString(ARGUMENT_GAME_ID, gameId);
fragment.setArguments(arguments);
@@ -72,12 +77,13 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
super.onCreate(savedInstanceState);
setRetainInstance(true);
- String menuTag = getArguments().getString(ARGUMENT_MENU_TAG);
+ Bundle args = getArguments();
+ MenuTag menuTag = (MenuTag) args.getSerializable(ARGUMENT_MENU_TAG);
String gameId = getArguments().getString(ARGUMENT_GAME_ID);
mAdapter = new SettingsAdapter(this, getActivity());
- mPresenter.onCreate(menuTag, gameId);
+ mPresenter.onCreate(menuTag, gameId, args);
}
@Nullable
@@ -148,9 +154,9 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
}
@Override
- public void loadSubMenu(String menuKey)
+ public void loadSubMenu(MenuTag menuKey)
{
- mActivity.showSettingsFragment(menuKey, true, getArguments().getString(ARGUMENT_GAME_ID));
+ mActivity.showSettingsFragment(menuKey, null, true, getArguments().getString(ARGUMENT_GAME_ID));
}
@Override
@@ -172,21 +178,21 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
}
@Override
- public void onGcPadSettingChanged(String key, int value)
+ public void onGcPadSettingChanged(MenuTag menuTag, int value)
{
- mActivity.onGcPadSettingChanged(key, value);
+ mActivity.onGcPadSettingChanged(menuTag, value);
}
@Override
- public void onWiimoteSettingChanged(String section, int value)
+ public void onWiimoteSettingChanged(MenuTag menuTag, int value)
{
- mActivity.onWiimoteSettingChanged(section, value);
+ mActivity.onWiimoteSettingChanged(menuTag, value);
}
@Override
- public void onExtensionSettingChanged(String key, int value)
+ public void onExtensionSettingChanged(MenuTag menuTag, int value)
{
- mActivity.onExtensionSettingChanged(key, value);
+ mActivity.onExtensionSettingChanged(menuTag, value);
}
}
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
index 262c42ce43..66bc8db68c 100644
--- 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
@@ -2,6 +2,8 @@ package org.dolphinemu.dolphinemu.ui.settings;
import android.text.TextUtils;
+import android.os.Bundle;
+
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.model.settings.BooleanSetting;
@@ -15,10 +17,14 @@ import org.dolphinemu.dolphinemu.model.settings.view.InputBindingSetting;
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.StringSingleChoiceSetting;
import org.dolphinemu.dolphinemu.model.settings.view.SubmenuSetting;
+import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
import org.dolphinemu.dolphinemu.utils.EGLHelper;
+import org.dolphinemu.dolphinemu.utils.Log;
import org.dolphinemu.dolphinemu.utils.SettingsFile;
+import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
@@ -26,7 +32,8 @@ public final class SettingsFragmentPresenter
{
private SettingsFragmentView mView;
- private String mMenuTag;
+ public static final String ARG_CONTROLLER_TYPE = "controller_type";
+ private MenuTag mMenuTag;
private String mGameID;
private ArrayList<HashMap<String, SettingSection>> mSettings;
@@ -40,31 +47,24 @@ public final class SettingsFragmentPresenter
mView = view;
}
- public void onCreate(String menuTag, String gameId)
+ public void onCreate(MenuTag menuTag, String gameId, Bundle extras)
{
mGameID = gameId;
- if (menuTag.startsWith(SettingsFile.KEY_GCPAD_TYPE))
- {
- mMenuTag = SettingsFile.KEY_GCPAD_TYPE;
- mControllerNumber = Character.getNumericValue(menuTag.charAt(menuTag.length() - 2));
- mControllerType = Character.getNumericValue(menuTag.charAt(menuTag.length() - 1));
- }
- else if (menuTag.startsWith(SettingsFile.SECTION_WIIMOTE) && !menuTag.equals(SettingsFile.FILE_NAME_WIIMOTE))
- {
- mMenuTag = SettingsFile.SECTION_WIIMOTE;
- mControllerNumber = Character.getNumericValue(menuTag.charAt(menuTag.length() - 1)) + 3;
- }
- else if (menuTag.startsWith(SettingsFile.KEY_WIIMOTE_EXTENSION))
- {
- mMenuTag = SettingsFile.KEY_WIIMOTE_EXTENSION;
- mControllerNumber = Character.getNumericValue(menuTag.charAt(menuTag.length() - 2)) + 3;
- mControllerType = Character.getNumericValue(menuTag.charAt(menuTag.length() - 1));
- }
- else
- {
- mMenuTag = menuTag;
- }
+ this.mMenuTag = menuTag;
+ if (menuTag.isGCPadMenu() || menuTag.isWiimoteExtensionMenu())
+ {
+ mControllerNumber = menuTag.getSubType();
+ mControllerType = extras.getInt(ARG_CONTROLLER_TYPE);
+ }
+ else if (menuTag.isWiimoteMenu())
+ {
+ mControllerNumber = menuTag.getSubType();
+ }
+ else
+ {
+ mMenuTag = menuTag;
+ }
}
public void onViewCreated(ArrayList<HashMap<String, SettingSection>> settings)
@@ -119,51 +119,68 @@ public final class SettingsFragmentPresenter
switch (mMenuTag)
{
- case SettingsFile.FILE_NAME_DOLPHIN:
- addConfigSettings(sl);
- break;
+ case CONFIG:
+ addConfigSettings(sl);
+ break;
- case SettingsFile.SECTION_CONFIG_GENERAL:
+ case CONFIG_GENERAL:
addGeneralSettings(sl);
break;
- case SettingsFile.SECTION_CONFIG_INTERFACE:
- addInterfaceSettings(sl);
+ case CONFIG_INTERFACE:
+ addInterfaceSettings(sl);
+ break;
+
+ case CONFIG_GAME_CUBE:
+ addGameCubeSettings(sl);
break;
- case SettingsFile.FILE_NAME_GFX:
+ case CONFIG_WII:
+ addWiiSettings(sl);
+ break;
+
+ case GRAPHICS:
addGraphicsSettings(sl);
break;
- case SettingsFile.FILE_NAME_GCPAD:
+ case GCPAD_TYPE:
addGcPadSettings(sl);
break;
- case SettingsFile.FILE_NAME_WIIMOTE:
+ case WIIMOTE:
addWiimoteSettings(sl);
break;
- case SettingsFile.SECTION_GFX_ENHANCEMENTS:
+ case ENHANCEMENTS:
addEnhanceSettings(sl);
break;
- case SettingsFile.SECTION_GFX_HACKS:
+ case HACKS:
addHackSettings(sl);
break;
- case SettingsFile.KEY_GCPAD_TYPE:
+ case GCPAD_1:
+ case GCPAD_2:
+ case GCPAD_3:
+ case GCPAD_4:
addGcPadSubSettings(sl, mControllerNumber, mControllerType);
break;
- case SettingsFile.SECTION_WIIMOTE:
+ case WIIMOTE_1:
+ case WIIMOTE_2:
+ case WIIMOTE_3:
+ case WIIMOTE_4:
addWiimoteSubSettings(sl, mControllerNumber);
break;
- case SettingsFile.KEY_WIIMOTE_EXTENSION:
+ case WIIMOTE_EXTENSION_1:
+ case WIIMOTE_EXTENSION_2:
+ case WIIMOTE_EXTENSION_3:
+ case WIIMOTE_EXTENSION_4:
addExtensionTypeSettings(sl, mControllerNumber, mControllerType);
break;
- case SettingsFile.SECTION_STEREOSCOPY:
+ case STEREOSCOPY:
addStereoSettings(sl);
break;
@@ -178,8 +195,11 @@ public final class SettingsFragmentPresenter
private void addConfigSettings(ArrayList<SettingsItem> sl)
{
- sl.add(new SubmenuSetting(null, null, R.string.general_submenu, 0, SettingsFile.SECTION_CONFIG_GENERAL));
- sl.add(new SubmenuSetting(null, null, R.string.interface_submenu, 0, SettingsFile.SECTION_CONFIG_INTERFACE));
+ sl.add(new SubmenuSetting(null, null, R.string.general_submenu, 0, MenuTag.CONFIG_GENERAL));
+ sl.add(new SubmenuSetting(null, null, R.string.interface_submenu, 0, MenuTag.CONFIG_INTERFACE));
+
+ sl.add(new SubmenuSetting(null, null, R.string.gamecube_submenu, 0, MenuTag.CONFIG_GAME_CUBE));
+ sl.add(new SubmenuSetting(null, null, R.string.wii_submenu, 0, MenuTag.CONFIG_WII));
}
private void addGeneralSettings(ArrayList<SettingsItem> sl)
@@ -188,10 +208,7 @@ public final class SettingsFragmentPresenter
Setting dualCore = null;
Setting overclockEnable = null;
Setting overclock = null;
- Setting slotADevice = null;
- Setting slotBDevice = null;
- Setting continuousScan = null;
- Setting wiimoteSpeaker = null;
+ Setting speedLimit = null;
Setting audioStretch = null;
if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty())
@@ -200,10 +217,7 @@ public final class SettingsFragmentPresenter
dualCore = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_DUAL_CORE);
overclockEnable = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_ENABLE);
overclock = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_PERCENT);
- slotADevice = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_SLOT_A_DEVICE);
- slotBDevice = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_SLOT_B_DEVICE);
- continuousScan = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_WIIMOTE_SCAN);
- wiimoteSpeaker = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_WIIMOTE_SPEAKER);
+ speedLimit = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_SPEED_LIMIT);
audioStretch = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_AUDIO_STRETCH);
}
else
@@ -236,10 +250,7 @@ public final class SettingsFragmentPresenter
sl.add(new CheckBoxSetting(SettingsFile.KEY_DUAL_CORE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.dual_core, R.string.dual_core_description, true, dualCore));
sl.add(new CheckBoxSetting(SettingsFile.KEY_OVERCLOCK_ENABLE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.overclock_enable, R.string.overclock_enable_description, false, overclockEnable));
sl.add(new SliderSetting(SettingsFile.KEY_OVERCLOCK_PERCENT, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.overclock_title, R.string.overclock_title_description, 400, "%", 100, overclock));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_SLOT_A_DEVICE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.slot_a_device, 0, R.array.slotDeviceEntries, R.array.slotDeviceValues, 8, slotADevice));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_SLOT_B_DEVICE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.slot_b_device, 0, R.array.slotDeviceEntries, R.array.slotDeviceValues, 255, slotBDevice));
- sl.add(new CheckBoxSetting(SettingsFile.KEY_WIIMOTE_SCAN, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.wiimote_scanning, R.string.wiimote_scanning_description, true, continuousScan));
- sl.add(new CheckBoxSetting(SettingsFile.KEY_WIIMOTE_SPEAKER, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.wiimote_speaker, R.string.wiimote_speaker_description, true, wiimoteSpeaker));
+ sl.add(new SliderSetting(SettingsFile.KEY_SPEED_LIMIT, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.speed_limit, 0, 200, "%", 100, speedLimit));
sl.add(new CheckBoxSetting(SettingsFile.KEY_AUDIO_STRETCH, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.audio_stretch, R.string.audio_stretch_description, false, audioStretch));
}
@@ -257,6 +268,50 @@ public final class SettingsFragmentPresenter
sl.add(new CheckBoxSetting(SettingsFile.KEY_OSD_MESSAGES, SettingsFile.SECTION_INI_INTERFACE, SettingsFile.SETTINGS_DOLPHIN, R.string.osd_messages, R.string.osd_messages_description, true, onScreenDisplayMessages));
}
+ private void addGameCubeSettings(ArrayList<SettingsItem> sl)
+ {
+ Setting systemLanguage = null;
+ Setting overrideGCLanguage = null;
+ Setting slotADevice = null;
+ Setting slotBDevice = null;
+
+ if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty())
+ {
+
+ systemLanguage = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_GAME_CUBE_LANGUAGE);
+ overrideGCLanguage = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_OVERRIDE_GAME_CUBE_LANGUAGE);
+ slotADevice = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_SLOT_A_DEVICE);
+ slotBDevice = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_SLOT_B_DEVICE);
+ }
+ else
+ {
+ mView.passSettingsToActivity(mSettings);
+ }
+
+ sl.add(new SingleChoiceSetting(SettingsFile.KEY_GAME_CUBE_LANGUAGE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.gamecube_system_language, 0, R.array.gameCubeSystemLanguageEntries, R.array.gameCubeSystemLanguageValues, 0, systemLanguage));
+ sl.add(new CheckBoxSetting(SettingsFile.KEY_OVERRIDE_GAME_CUBE_LANGUAGE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.override_gamecube_language, 0, false, overrideGCLanguage));
+ sl.add(new SingleChoiceSetting(SettingsFile.KEY_SLOT_A_DEVICE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.slot_a_device, 0, R.array.slotDeviceEntries, R.array.slotDeviceValues, 8, slotADevice));
+ sl.add(new SingleChoiceSetting(SettingsFile.KEY_SLOT_B_DEVICE, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.slot_b_device, 0, R.array.slotDeviceEntries, R.array.slotDeviceValues, 255, slotBDevice));
+ }
+
+ private void addWiiSettings(ArrayList<SettingsItem> sl)
+ {
+ Setting continuousScan = null;
+ Setting wiimoteSpeaker = null;
+ if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty())
+ {
+ continuousScan = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_WIIMOTE_SCAN);
+ wiimoteSpeaker = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_WIIMOTE_SPEAKER);
+ }
+ else
+ {
+ mView.passSettingsToActivity(mSettings);
+ }
+
+ sl.add(new CheckBoxSetting(SettingsFile.KEY_WIIMOTE_SCAN, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.wiimote_scanning, R.string.wiimote_scanning_description, true, continuousScan));
+ sl.add(new CheckBoxSetting(SettingsFile.KEY_WIIMOTE_SPEAKER, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.wiimote_speaker, R.string.wiimote_speaker_description, true, wiimoteSpeaker));
+ }
+
private void addGcPadSettings(ArrayList<SettingsItem> sl)
{
if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty())
@@ -265,7 +320,7 @@ public final class SettingsFragmentPresenter
{
// TODO This controller_0 + i business is quite the hack. It should work, but only if the definitions are kept together and in order.
Setting gcPadSetting = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_GCPAD_TYPE + i);
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_GCPAD_TYPE + i, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.controller_0 + i, 0, R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, gcPadSetting));
+ sl.add(new SingleChoiceSetting(SettingsFile.KEY_GCPAD_TYPE + i, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.controller_0 + i, 0, R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, gcPadSetting, MenuTag.getGCPadMenuTag(i)));
}
}
}
@@ -278,7 +333,7 @@ public final class SettingsFragmentPresenter
{
// TODO This wiimote_0 + i business is quite the hack. It should work, but only if the definitions are kept together and in order.
Setting wiimoteSetting = mSettings.get(SettingsFile.SETTINGS_WIIMOTE).get(SettingsFile.SECTION_WIIMOTE + i).getSetting(SettingsFile.KEY_WIIMOTE_TYPE);
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_TYPE, SettingsFile.SECTION_WIIMOTE + i, SettingsFile.SETTINGS_WIIMOTE, R.string.wiimote_0 + i - 1, 0, R.array.wiimoteTypeEntries, R.array.wiimoteTypeValues, 0, wiimoteSetting));
+ sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_TYPE, SettingsFile.SECTION_WIIMOTE + i, SettingsFile.SETTINGS_WIIMOTE, R.string.wiimote_0 + i - 1, 0, R.array.wiimoteTypeEntries, R.array.wiimoteTypeValues, 0, wiimoteSetting, MenuTag.getWiimoteMenuTag(i)));
}
}
}
@@ -289,12 +344,14 @@ public final class SettingsFragmentPresenter
Setting showFps = null;
Setting shaderCompilationMode = null;
Setting waitForShaders = null;
+ Setting aspectRatio = null;
if (!mSettings.get(SettingsFile.SETTINGS_GFX).isEmpty())
{
showFps = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_SHOW_FPS);
shaderCompilationMode = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_SHADER_COMPILATION_MODE);
waitForShaders = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_WAIT_FOR_SHADERS);
+ aspectRatio = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_ASPECT_RATIO);
}
else
{
@@ -306,12 +363,16 @@ public final class SettingsFragmentPresenter
mView.passSettingsToActivity(mSettings);
}
+ sl.add(new HeaderSetting(null, null, R.string.graphics_general, 0));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_VIDEO_BACKEND_INDEX, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.video_backend, R.string.video_backend_description, R.array.videoBackendEntries, R.array.videoBackendValues, 0, videoBackend));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SHOW_FPS, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.show_fps, R.string.show_fps_description, false, showFps));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_SHADER_COMPILATION_MODE, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.shader_compilation_mode, R.string.shader_compilation_mode_description, R.array.shaderCompilationModeEntries, R.array.shaderCompilationModeValues, 0, shaderCompilationMode));
sl.add(new CheckBoxSetting(SettingsFile.KEY_WAIT_FOR_SHADERS, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.wait_for_shaders, 0, false, waitForShaders));
- sl.add(new SubmenuSetting(null, null, R.string.enhancements_submenu, 0, SettingsFile.SECTION_GFX_ENHANCEMENTS));
- sl.add(new SubmenuSetting(null, null, R.string.hacks_submenu, 0, SettingsFile.SECTION_GFX_HACKS));
+ sl.add(new SingleChoiceSetting(SettingsFile.KEY_ASPECT_RATIO, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.aspect_ratio, R.string.aspect_ratio_description, R.array.aspectRatioEntries, R.array.aspectRatioValues, 0, aspectRatio));
+
+ sl.add(new HeaderSetting(null, null, R.string.graphics_enhancements_and_hacks, 0));
+ sl.add(new SubmenuSetting(null, null, R.string.enhancements_submenu, 0, MenuTag.ENHANCEMENTS));
+ sl.add(new SubmenuSetting(null, null, R.string.hacks_submenu, 0, MenuTag.HACKS));
}
private void addEnhanceSettings(ArrayList<SettingsItem> sl)
@@ -319,25 +380,37 @@ public final class SettingsFragmentPresenter
Setting resolution = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_INTERNAL_RES);
Setting fsaa = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_FSAA);
Setting anisotropic = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_ANISOTROPY);
+ Setting shader = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_POST_SHADER);
Setting efbScaledCopy = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_SCALED_EFB);
Setting perPixel = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_PER_PIXEL);
Setting forceFilter = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_FORCE_FILTERING);
Setting disableFog = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_DISABLE_FOG);
Setting disableCopyFilter = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_DISABLE_COPY_FILTER);
+ Setting arbitraryMipmapDetection = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_ARBITRARY_MIPMAP_DETECTION);
+ Setting wideScreenHack = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_WIDE_SCREEN_HACK);
+ Setting force24BitColor = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_FORCE_24_BIT_COLOR);
sl.add(new SingleChoiceSetting(SettingsFile.KEY_INTERNAL_RES, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.internal_resolution, R.string.internal_resolution_description, R.array.internalResolutionEntries, R.array.internalResolutionValues, 1, resolution));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_FSAA, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.FSAA, R.string.FSAA_description, R.array.FSAAEntries, R.array.FSAAValues, 0, fsaa));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_ANISOTROPY, SettingsFile.SECTION_GFX_ENHANCEMENTS, SettingsFile.SETTINGS_GFX, R.string.anisotropic_filtering, R.string.anisotropic_filtering_description, R.array.anisotropicFilteringEntries, R.array.anisotropicFilteringValues, 0, anisotropic));
- // TODO
-// Setting shader = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_POST_SHADER)
-// sl.add(new SingleChoiceSetting(.getKey(), , R.string., R.string._description, R.array., R.array.));
+ IntSetting stereoModeValue = (IntSetting) mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_STEREOSCOPY).getSetting(SettingsFile.KEY_STEREO_MODE);
+ int anaglyphMode = 3;
+ String subDir = stereoModeValue != null && stereoModeValue.getValue() == anaglyphMode ? "Anaglyph" : null;
+ String[] shaderListEntries = getShaderList(subDir);
+ String[] shaderListValues = new String[shaderListEntries.length];
+ System.arraycopy(shaderListEntries, 0, shaderListValues, 0, shaderListEntries.length);
+ shaderListValues[0] = "";
+ sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_POST_SHADER, SettingsFile.SECTION_GFX_ENHANCEMENTS, SettingsFile.SETTINGS_GFX, R.string.post_processing_shader, R.string.post_processing_shader_description, shaderListEntries, shaderListValues, "", shader));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SCALED_EFB, SettingsFile.SECTION_GFX_HACKS, SettingsFile.SETTINGS_GFX, R.string.scaled_efb_copy, R.string.scaled_efb_copy_description, true, efbScaledCopy));
sl.add(new CheckBoxSetting(SettingsFile.KEY_PER_PIXEL, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.per_pixel_lighting, R.string.per_pixel_lighting_description, false, perPixel));
sl.add(new CheckBoxSetting(SettingsFile.KEY_FORCE_FILTERING, SettingsFile.SECTION_GFX_ENHANCEMENTS, SettingsFile.SETTINGS_GFX, R.string.force_texture_filtering, R.string.force_texture_filtering_description, false, forceFilter));
+ sl.add(new CheckBoxSetting(SettingsFile.KEY_FORCE_24_BIT_COLOR, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.force_24bit_color, R.string.force_24bit_color_description, true, force24BitColor));
sl.add(new CheckBoxSetting(SettingsFile.KEY_DISABLE_FOG, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.disable_fog, R.string.disable_fog_description, false, disableFog));
sl.add(new CheckBoxSetting(SettingsFile.KEY_DISABLE_COPY_FILTER, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.disable_copy_filter, R.string.disable_copy_filter_description, false, disableCopyFilter));
+ sl.add(new CheckBoxSetting(SettingsFile.KEY_ARBITRARY_MIPMAP_DETECTION, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.arbitrary_mipmap_detection, R.string.arbitrary_mipmap_detection_description, true, arbitraryMipmapDetection));
+ sl.add(new CheckBoxSetting(SettingsFile.KEY_WIDE_SCREEN_HACK, SettingsFile.SECTION_GFX_ENHANCEMENTS, SettingsFile.SETTINGS_GFX, R.string.wide_screen_hack, R.string.wide_screen_hack_description, false, wideScreenHack));
/*
Check if we support stereo
@@ -349,10 +422,48 @@ public final class SettingsFragmentPresenter
if ((helper.supportsOpenGL() && helper.GetVersion() >= 320) ||
(helper.supportsGLES3() && helper.GetVersion() >= 310 && helper.SupportsExtension("GL_ANDROID_extension_pack_es31a")))
{
- sl.add(new SubmenuSetting(SettingsFile.KEY_STEREO_MODE, null, R.string.stereoscopy_submenu, R.string.stereoscopy_submenu_description, SettingsFile.SECTION_STEREOSCOPY));
+ sl.add(new SubmenuSetting(SettingsFile.KEY_STEREO_MODE, null, R.string.stereoscopy_submenu, R.string.stereoscopy_submenu_description, MenuTag.STEREOSCOPY));
}
}
+ private String[] getShaderList(String subDir)
+ {
+ try
+ {
+ String shadersPath = DirectoryInitializationService.getDolphinInternalDirectory() + "/Shaders";
+ if(!TextUtils.isEmpty(subDir)) {
+ shadersPath += "/" + subDir;
+ }
+
+ File file = new File(shadersPath);
+ File[] shaderFiles = file.listFiles();
+ if (shaderFiles != null)
+ {
+ String[] result = new String[shaderFiles.length + 1];
+ result[0] = "Off";
+ for (int i = 0; i < shaderFiles.length; i++)
+ {
+ String name = shaderFiles[i].getName();
+ int extensionIndex = name.indexOf(".glsl");
+ if (extensionIndex > 0)
+ {
+ name = name.substring(0, extensionIndex);
+ }
+ result[i+1] = name;
+ }
+
+ return result;
+ }
+ }
+ catch (Exception ex)
+ {
+ Log.debug("[Settings] Unable to find shader files");
+ // return empty list
+ }
+
+ return new String[]{};
+ }
+
private void addHackSettings(ArrayList<SettingsItem> sl)
{
boolean skipEFBValue = getInvertedBooleanValue(SettingsFile.SETTINGS_GFX, SettingsFile.SECTION_GFX_HACKS, SettingsFile.KEY_SKIP_EFB, false);
@@ -366,7 +477,6 @@ public final class SettingsFragmentPresenter
Setting xfbToTexture = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_XFB_TEXTURE);
Setting immediateXfb = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_IMMEDIATE_XFB);
Setting fastDepth = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_FAST_DEPTH);
- Setting aspectRatio = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).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, SettingsFile.SETTINGS_GFX, R.string.skip_efb_access, R.string.skip_efb_access_description, false, skipEFB));
@@ -383,7 +493,6 @@ public final class SettingsFragmentPresenter
sl.add(new HeaderSetting(null, null, R.string.other, 0));
sl.add(new CheckBoxSetting(SettingsFile.KEY_FAST_DEPTH, SettingsFile.SECTION_GFX_HACKS, SettingsFile.SETTINGS_GFX, R.string.fast_depth_calculation, R.string.fast_depth_calculation_description, true, fastDepth));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_ASPECT_RATIO, SettingsFile.SECTION_GFX_SETTINGS, SettingsFile.SETTINGS_GFX, R.string.aspect_ratio, R.string.aspect_ratio_description, R.array.aspectRatioEntries, R.array.aspectRatioValues, 0, aspectRatio));
}
private void addStereoSettings(ArrayList<SettingsItem> sl)
@@ -467,7 +576,7 @@ public final class SettingsFragmentPresenter
private void addWiimoteSubSettings(ArrayList<SettingsItem> sl, int wiimoteNumber)
{
// Bindings use controller numbers 4-7 (0-3 are GameCube), but the extension setting uses 1-4.
- IntSetting extension = new IntSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, SettingsFile.SECTION_WIIMOTE + (wiimoteNumber - 3), SettingsFile.SETTINGS_WIIMOTE, getExtensionValue(wiimoteNumber - 3));
+ IntSetting extension = new IntSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, SettingsFile.SECTION_WIIMOTE + wiimoteNumber, SettingsFile.SETTINGS_WIIMOTE, getExtensionValue(wiimoteNumber), MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber));
Setting bindA = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_BINDINGS).getSetting(SettingsFile.KEY_WIIBIND_A + wiimoteNumber);
Setting bindB = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_BINDINGS).getSetting(SettingsFile.KEY_WIIBIND_B + wiimoteNumber);
Setting bind1 = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_BINDINGS).getSetting(SettingsFile.KEY_WIIBIND_1 + wiimoteNumber);
@@ -501,7 +610,7 @@ public final class SettingsFragmentPresenter
Setting bindDPadLeft = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_BINDINGS).getSetting(SettingsFile.KEY_WIIBIND_DPAD_LEFT + wiimoteNumber);
Setting bindDPadRight = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_BINDINGS).getSetting(SettingsFile.KEY_WIIBIND_DPAD_RIGHT + wiimoteNumber);
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, SettingsFile.SECTION_WIIMOTE + (wiimoteNumber - 3), SettingsFile.SETTINGS_WIIMOTE, R.string.wiimote_extensions, R.string.wiimote_extensions_description, R.array.wiimoteExtensionsEntries, R.array.wiimoteExtensionsValues, 0, extension));
+ sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, SettingsFile.SECTION_WIIMOTE + (wiimoteNumber - 3), SettingsFile.SETTINGS_WIIMOTE, R.string.wiimote_extensions, R.string.wiimote_extensions_description, R.array.wiimoteExtensionsEntries, R.array.wiimoteExtensionsValues, 0, extension, MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber)));
sl.add(new HeaderSetting(null, null, R.string.generic_buttons, 0));
sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_A + wiimoteNumber, SettingsFile.SECTION_BINDINGS, SettingsFile.SETTINGS_DOLPHIN, R.string.button_a, bindA));
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
index 3029dc2a9d..81c839037c 100644
--- 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
@@ -56,7 +56,7 @@ public interface SettingsFragmentView
*
* @param menuKey Identifier for the settings group that should be shown.
*/
- void loadSubMenu(String menuKey);
+ void loadSubMenu(MenuTag menuKey);
/**
* Tell the Fragment to tell the containing activity to display a toast message.
@@ -80,25 +80,24 @@ public interface SettingsFragmentView
/**
* Have the fragment tell the containing Activity that a GCPad's setting was modified.
*
- * @param key Identifier for the GCPad that was modified.
+ * @param menuTag Identifier for the GCPad that was modified.
* @param value New setting for the GCPad.
*/
- void onGcPadSettingChanged(String key, int value);
+ void onGcPadSettingChanged(MenuTag menuTag, int value);
/**
* Have the fragment tell the containing Activity that a Wiimote's setting was modified.
*
- * @param section Identifier for Wiimote that was modified; Wiimotes are identified by their section,
- * not their key.
+ * @param menuTag Identifier for Wiimote that was modified.
* @param value New setting for the Wiimote.
*/
- void onWiimoteSettingChanged(String section, int value);
+ void onWiimoteSettingChanged(MenuTag menuTag, int value);
/**
* Have the fragment tell the containing Activity that an extension setting was modified.
*
- * @param key Identifier for the extension that was modified.
+ * @param menuTag Identifier for the extension that was modified.
* @param value New setting for the extension.
*/
- void onExtensionSettingChanged(String key, int value);
+ void onExtensionSettingChanged(MenuTag menuTag, int value);
}
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
index add1b76637..c44d64b79b 100644
--- 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
@@ -6,11 +6,12 @@ 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.model.settings.view.StringSingleChoiceSetting;
import org.dolphinemu.dolphinemu.ui.settings.SettingsAdapter;
public final class SingleChoiceViewHolder extends SettingViewHolder
{
- private SingleChoiceSetting mItem;
+ private SettingsItem mItem;
private TextView mTextSettingName;
private TextView mTextSettingDescription;
@@ -30,7 +31,7 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
@Override
public void bind(SettingsItem item)
{
- mItem = (SingleChoiceSetting) item;
+ mItem = item;
mTextSettingName.setText(item.getNameId());
@@ -43,6 +44,13 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
@Override
public void onClick(View clicked)
{
- getAdapter().onSingleChoiceClick(mItem);
+ if (mItem instanceof SingleChoiceSetting)
+ {
+ getAdapter().onSingleChoiceClick((SingleChoiceSetting) mItem);
+ }
+ else if (mItem instanceof StringSingleChoiceSetting)
+ {
+ getAdapter().onStringSingleChoiceClick((StringSingleChoiceSetting) mItem);
+ }
}
}
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
index 9667cb88af..1e2084dd57 100644
--- 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
@@ -82,8 +82,11 @@ public final class SettingsFile
public static final String KEY_DUAL_CORE = "CPUThread";
public static final String KEY_OVERCLOCK_ENABLE = "OverclockEnable";
public static final String KEY_OVERCLOCK_PERCENT = "Overclock";
+ public static final String KEY_SPEED_LIMIT = "EmulationSpeed";
public static final String KEY_VIDEO_BACKEND = "GFXBackend";
public static final String KEY_AUDIO_STRETCH = "AudioStretch";
+ public static final String KEY_GAME_CUBE_LANGUAGE = "SelectedLanguage";
+ public static final String KEY_OVERRIDE_GAME_CUBE_LANGUAGE = "OverrideGCLang";
public static final String KEY_SLOT_A_DEVICE = "SlotA";
public static final String KEY_SLOT_B_DEVICE = "SlotB";
@@ -100,6 +103,9 @@ public final class SettingsFile
public static final String KEY_FORCE_FILTERING = "ForceFiltering";
public static final String KEY_DISABLE_FOG = "DisableFog";
public static final String KEY_DISABLE_COPY_FILTER = "DisableCopyFilter";
+ public static final String KEY_ARBITRARY_MIPMAP_DETECTION = "ArbitraryMipmapDetection";
+ public static final String KEY_WIDE_SCREEN_HACK = "wideScreenHack";
+ public static final String KEY_FORCE_24_BIT_COLOR = "ForceTrueColor";
public static final String KEY_STEREO_MODE = "StereoMode";
public static final String KEY_STEREO_DEPTH = "StereoDepth";