From 87534f1b2f6f3ef62470cacb7891aa9a62d99d95 Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Tue, 6 Feb 2018 09:42:54 +0100 Subject: [PATCH 01/12] RfC: Refactor the settings for Android to use dedicated tags Before we used different way of identifying which settings menu to show, someotimes we used the section name, other times we used the settings file name. This one replaces all those different ways by just one way based on a menu tag which is more clear and easy to follow. --- .../dolphinemu/adapters/GameAdapter.java | 6 +- .../dolphinemu/adapters/GameRowPresenter.java | 6 +- .../dolphinemu/model/settings/IntSetting.java | 16 +++ .../settings/view/SingleChoiceSetting.java | 15 ++- .../model/settings/view/SubmenuSetting.java | 7 +- .../dolphinemu/ui/main/MainActivity.java | 3 +- .../dolphinemu/ui/main/MainPresenter.java | 10 +- .../dolphinemu/ui/main/MainView.java | 7 +- .../dolphinemu/ui/main/TvMainActivity.java | 3 +- .../dolphinemu/ui/settings/MenuTag.java | 104 ++++++++++++++++++ .../ui/settings/SettingsActivity.java | 25 ++--- .../settings/SettingsActivityPresenter.java | 26 +++-- .../ui/settings/SettingsActivityView.java | 16 +-- .../ui/settings/SettingsAdapter.java | 25 +++-- .../ui/settings/SettingsFragment.java | 30 +++-- .../settings/SettingsFragmentPresenter.java | 93 ++++++++-------- .../ui/settings/SettingsFragmentView.java | 15 ++- 17 files changed, 277 insertions(+), 130 deletions(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/MenuTag.java 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 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/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/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/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..3d98684729 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); + 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..f74fbbc4dd 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, ""); } 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..ab417d16a0 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/MenuTag.java @@ -0,0 +1,104 @@ +package org.dolphinemu.dolphinemu.ui.settings; + +public enum MenuTag +{ + CONFIG("config"), + CONFIG_GENERAL("config_general"), + CONFIG_INTERFACE("config_interface"), + 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..403e011143 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 @@ -234,20 +234,23 @@ public final class SettingsAdapter extends RecyclerView.Adapter> mSettings; @@ -40,31 +43,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> settings) @@ -119,51 +115,60 @@ public final class SettingsFragmentPresenter switch (mMenuTag) { - case SettingsFile.FILE_NAME_DOLPHIN: + case CONFIG: addConfigSettings(sl); break; - case SettingsFile.SECTION_CONFIG_GENERAL: + case CONFIG_GENERAL: addGeneralSettings(sl); break; - case SettingsFile.SECTION_CONFIG_INTERFACE: + case CONFIG_INTERFACE: addInterfaceSettings(sl); break; - case SettingsFile.FILE_NAME_GFX: + 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 +183,8 @@ public final class SettingsFragmentPresenter private void addConfigSettings(ArrayList 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)); } private void addGeneralSettings(ArrayList sl) @@ -265,7 +270,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 +283,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))); } } } @@ -310,8 +315,8 @@ public final class SettingsFragmentPresenter 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 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 sl) @@ -349,7 +354,7 @@ 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)); } } @@ -467,7 +472,7 @@ public final class SettingsFragmentPresenter private void addWiimoteSubSettings(ArrayList 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 +506,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); } From 93165379642e05febdb36ce323ce529b74cd2f5b Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sat, 27 Jan 2018 00:21:37 +0100 Subject: [PATCH 02/12] Android: Change the incremental value of the slider to be 5% instead of 20% --- .../org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java | 1 + 1 file changed, 1 insertion(+) 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 403e011143..6c10c1b3a6 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 @@ -186,6 +186,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter Date: Sat, 27 Jan 2018 00:37:05 +0100 Subject: [PATCH 03/12] Android: Rename main settings buttons to match the desktop version - Video Settings to Graphics Settings - CPU Settings to Config --- .../org/dolphinemu/dolphinemu/ui/main/MainPresenter.java | 2 +- .../org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java | 6 +++--- Source/Android/app/src/main/res/menu/menu_game_grid.xml | 6 +++--- Source/Android/app/src/main/res/values/strings.xml | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) 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 3d98684729..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 @@ -67,7 +67,7 @@ public final class MainPresenter mView.launchSettingsActivity(MenuTag.CONFIG); return true; - case R.id.menu_settings_video: + case R.id.menu_settings_graphics: mView.launchSettingsActivity(MenuTag.GRAPHICS); return true; 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 f74fbbc4dd..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 @@ -231,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/res/menu/menu_game_grid.xml b/Source/Android/app/src/main/res/menu/menu_game_grid.xml index 696c8716fa..60e7309ff3 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 @@ -4,13 +4,13 @@ diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index c3f97ae4de..f8c535b9b4 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -209,8 +209,8 @@ Other - CPU Settings - Video Settings + Config + Graphics Settings GameCube Input Wii Input Refresh Library From ef23d9706322f8b34646e7cad00679be68f4600c Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sat, 27 Jan 2018 00:50:29 +0100 Subject: [PATCH 04/12] Android: Refine the Graphics Settings Screen 1. Add General Section 2. Move the Aspect Ration Settings from the Enhancmenets Section to the General section to match the desktop GUI. --- .../settings/SettingsFragmentPresenter.java | 22 +++++++++++-------- .../app/src/main/res/values/strings.xml | 4 ++++ 2 files changed, 17 insertions(+), 9 deletions(-) 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 2aa1ae2baa..a184bdce18 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 @@ -115,17 +115,17 @@ public final class SettingsFragmentPresenter switch (mMenuTag) { - case CONFIG: - addConfigSettings(sl); - break; + case CONFIG: + addConfigSettings(sl); + break; - case CONFIG_GENERAL: + case CONFIG_GENERAL: addGeneralSettings(sl); break; - case CONFIG_INTERFACE: - addInterfaceSettings(sl); - break; + case CONFIG_INTERFACE: + addInterfaceSettings(sl); + break; case GRAPHICS: addGraphicsSettings(sl); @@ -294,12 +294,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 { @@ -311,10 +313,14 @@ 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 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)); } @@ -371,7 +377,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)); @@ -388,7 +393,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 sl) diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index f8c535b9b4..e2707aaa7d 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -135,6 +135,10 @@ Show On-Screen Display Messages Display messages over the emulation screen area. These messages include memory card writes, video backend and CPU information, and JIT cache clearing. + + General + Enhancements & Hacks + Video Backend Select the API used for graphics rendering. From b4bb213ffdca35d16491ef84348adfc38c76a001 Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sat, 27 Jan 2018 01:12:40 +0100 Subject: [PATCH 05/12] Android: Add Force 24-Bit Color enhancement option --- .../dolphinemu/ui/settings/SettingsFragmentPresenter.java | 2 ++ .../main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java | 1 + Source/Android/app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 5 insertions(+) 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 a184bdce18..d90d29920d 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 @@ -335,6 +335,7 @@ public final class SettingsFragmentPresenter 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 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)); @@ -347,6 +348,7 @@ public final class SettingsFragmentPresenter 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)); 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..a695a10416 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 @@ -100,6 +100,7 @@ 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_FORCE_24_BIT_COLOR = "ForceTrueColor"; public static final String KEY_STEREO_MODE = "StereoMode"; public static final String KEY_STEREO_DEPTH = "StereoDepth"; diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index e2707aaa7d..9055965d97 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -160,6 +160,8 @@ Calculate lighting of 3D graphics per-pixel rather than per vertex. Decreases emulation speed by some percent (depending on your GPU). This usually is a safe enhancement, but might cause issues sometimes. Force Texture Filtering Force texture filtering even if the emulated game explicitly disabled it. Improves texture quality slightly but causes glitches in some games. + Force 24-Bit Color + Forces the game to render the RGB color channels in 24-bit, thereby increasing quality by reducing color banding.\nIt has no impact on performance and causes few graphical issues. If unsure, leave this checked. Disable Fog Makes distant objects more visible by removing fog, thus increasing the overall detail. Disabling fog will break some games which rely on proper fog emulation. Disable Copy Filter From b924445e4894499a315769852fe5df7f747b739a Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sun, 28 Jan 2018 01:51:42 +0100 Subject: [PATCH 06/12] Android: Support Post Processing Shaders --- .../model/settings/view/SettingsItem.java | 1 + .../view/StringSingleChoiceSetting.java | 97 +++++++++++++++++++ .../DirectoryInitializationService.java | 16 +++ .../ui/settings/SettingsAdapter.java | 26 +++++ .../settings/SettingsFragmentPresenter.java | 54 ++++++++++- .../viewholder/SingleChoiceViewHolder.java | 14 ++- .../app/src/main/res/values/strings.xml | 2 + 7 files changed, 204 insertions(+), 6 deletions(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/model/settings/view/StringSingleChoiceSetting.java 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/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 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 sl) { boolean skipEFBValue = getInvertedBooleanValue(SettingsFile.SETTINGS_GFX, SettingsFile.SECTION_GFX_HACKS, SettingsFile.KEY_SKIP_EFB, false); 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/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 9055965d97..23206afdd1 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -152,6 +152,8 @@ Reduces the amount of aliasing caused by rasterizing 3D graphics. This makes the rendered picture look less blocky. Heavily decreases emulation speed and sometimes causes issues. Anisotropic Filtering Enhances visual quality of textures that are at oblique viewing angles. Might cause issues in a small number of games. + Post-Processing Effect + Apply a post-processing effect after finishing a frame Post Processing Shader Apply a post-processing effect after finishing a frame. Scaled EFB Copy From 84229c0c0554da009327179a426275597f809b01 Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Wed, 31 Jan 2018 22:56:31 +0100 Subject: [PATCH 07/12] Android: Support SpeedLimit config option --- .../dolphinemu/model/settings/view/SliderSetting.java | 3 ++- .../org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java | 3 ++- .../dolphinemu/ui/settings/SettingsFragmentPresenter.java | 3 +++ .../java/org/dolphinemu/dolphinemu/utils/SettingsFile.java | 1 + Source/Android/app/src/main/res/values/strings.xml | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) 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/ui/settings/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java index 5e27be4059..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 @@ -307,7 +307,8 @@ public final class SettingsAdapter extends RecyclerView.AdapterHigher values can make variable-framerate games run at a higher framerate, requiring a powerful device. Lower values make games run at a lower framerate, increasing emulation speed, but reducing the emulated console\'s performance. Emulated CPU Clock Speed Adjusts the emulated CPU\'s clock rate if \"Override Emulated CPU Clock Speed\" is enabled. + Speed Limit WARNING: Changing this from the default (100%) WILL break games and cause glitches. Please do not report bugs that occur with a non-default clock. GameCube Slot A Device GameCube Slot B Device From 5010dfde7ea2720b69fc0c462ba12590777b4e42 Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Mon, 12 Feb 2018 12:28:28 +0100 Subject: [PATCH 08/12] Android: Support WideScreen Hack --- .../dolphinemu/ui/settings/SettingsFragmentPresenter.java | 4 +++- .../java/org/dolphinemu/dolphinemu/utils/SettingsFile.java | 1 + Source/Android/app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) 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 cc9a17226e..a6e15e7f0d 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 @@ -343,7 +343,8 @@ public final class SettingsFragmentPresenter 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 force24BitColor = mSettings.get(SettingsFile.SETTINGS_GFX).get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_FORCE_24_BIT_COLOR); + 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)); @@ -364,6 +365,7 @@ public final class SettingsFragmentPresenter 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_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 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 3e8a32fdd7..f002b20acb 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 @@ -101,6 +101,7 @@ 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_WIDE_SCREEN_HACK = "wideScreenHack"; public static final String KEY_FORCE_24_BIT_COLOR = "ForceTrueColor"; public static final String KEY_STEREO_MODE = "StereoMode"; diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index d273ab4cdc..9584296fa1 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -171,6 +171,8 @@ Disables the blending of adjacent rows when copying the EFB. This is known in some games as \"deflickering\" or \"smoothing\". Disabling the filter is usually safe, and may result in a sharper image. Stereoscopy Stereoscopy allows you to get a better feeling of depth if you have the necessary hardware.\nHeavily decreases emulation speed and sometimes causes issues + Widescreen Hack + Forces the game to output graphics for any aspect ratio. Use with \"Aspect Ratio\" set to \"Force 16:9\" to force 4:3-only games to run at 16:9. Rarely produces good results and often partially breaks graphics and game UIs.\nUnnecessary (and detrimental) if using any AR/Gecko-code widescreen patches. If unsure, leave this unchecked. Stereoscopy Mode Select the stereoscopic 3D mode. Depth From d5a048a2bab17c8afed72f10e70a66ae82e440ce Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sun, 1 Jul 2018 19:49:31 +0200 Subject: [PATCH 09/12] Android: Create didcated sections for GameCube & Wii This align the Android UI with the desktop UI --- .../dolphinemu/ui/settings/MenuTag.java | 2 + .../settings/SettingsFragmentPresenter.java | 60 +++++++++++++++---- .../app/src/main/res/values/strings.xml | 2 + 3 files changed, 52 insertions(+), 12 deletions(-) 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 index ab417d16a0..9f1adf0aed 100644 --- 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 @@ -5,6 +5,8 @@ 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"), 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 a6e15e7f0d..029716cad9 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 @@ -131,6 +131,14 @@ public final class SettingsFragmentPresenter addInterfaceSettings(sl); break; + case CONFIG_GAME_CUBE: + addGameCubeSettings(sl); + break; + + case CONFIG_WII: + addWiiSettings(sl); + break; + case GRAPHICS: addGraphicsSettings(sl); break; @@ -189,6 +197,9 @@ public final class SettingsFragmentPresenter { 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 sl) @@ -198,10 +209,6 @@ public final class SettingsFragmentPresenter Setting overclockEnable = null; Setting overclock = null; Setting speedLimit = null; - Setting slotADevice = null; - Setting slotBDevice = null; - Setting continuousScan = null; - Setting wiimoteSpeaker = null; Setting audioStretch = null; if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) @@ -211,10 +218,6 @@ public final class SettingsFragmentPresenter 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); speedLimit = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_SPEED_LIMIT); - 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); audioStretch = mSettings.get(SettingsFile.SETTINGS_DOLPHIN).get(SettingsFile.SECTION_INI_CORE).getSetting(SettingsFile.KEY_AUDIO_STRETCH); } else @@ -248,10 +251,6 @@ public final class SettingsFragmentPresenter 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 SliderSetting(SettingsFile.KEY_SPEED_LIMIT, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.speed_limit, 0, 200, "%", 100, speedLimit)); - 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 CheckBoxSetting(SettingsFile.KEY_AUDIO_STRETCH, SettingsFile.SECTION_INI_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.audio_stretch, R.string.audio_stretch_description, false, audioStretch)); } @@ -269,6 +268,43 @@ 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 sl) + { + Setting slotADevice = null; + Setting slotBDevice = null; + if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) + { + + 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_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 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 sl) { if (!mSettings.get(SettingsFile.SETTINGS_DOLPHIN).isEmpty()) diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 9584296fa1..471912c75f 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -120,8 +120,10 @@ Adjusts the emulated CPU\'s clock rate if \"Override Emulated CPU Clock Speed\" is enabled. Speed Limit WARNING: Changing this from the default (100%) WILL break games and cause glitches. Please do not report bugs that occur with a non-default clock. + GameCube GameCube Slot A Device GameCube Slot B Device + Wii Wii Remote Continuous Scanning Leave this on if you are using a DolphinBar for real Wiimote support. Wii Remote Speaker From e7d295894a9166793edd18beeb93a182a0129368 Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sun, 1 Jul 2018 21:12:11 +0200 Subject: [PATCH 10/12] Android: Support GameCube System Language --- .../ui/settings/SettingsFragmentPresenter.java | 7 +++++++ .../dolphinemu/utils/SettingsFile.java | 2 ++ .../Android/app/src/main/res/values/arrays.xml | 18 ++++++++++++++++++ .../app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 29 insertions(+) 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 029716cad9..40c3ed3c1f 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 @@ -270,11 +270,16 @@ public final class SettingsFragmentPresenter private void addGameCubeSettings(ArrayList 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); } @@ -283,6 +288,8 @@ public final class SettingsFragmentPresenter 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)); } 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 f002b20acb..b53b2d4bcb 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 @@ -85,6 +85,8 @@ public final class SettingsFile 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"; diff --git a/Source/Android/app/src/main/res/values/arrays.xml b/Source/Android/app/src/main/res/values/arrays.xml index c9d6f9a414..21a5c4f7b3 100644 --- a/Source/Android/app/src/main/res/values/arrays.xml +++ b/Source/Android/app/src/main/res/values/arrays.xml @@ -33,6 +33,24 @@ 5 + + + English + German + French + Spanish + Italian + Dutch + + + 0 + 1 + 2 + 3 + 4 + 5 + + Nothing diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 471912c75f..285235db89 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -121,6 +121,8 @@ Speed Limit WARNING: Changing this from the default (100%) WILL break games and cause glitches. Please do not report bugs that occur with a non-default clock. GameCube + System Language + Override Language on NTSC games GameCube Slot A Device GameCube Slot B Device Wii From a639fa9a8157c60b9a851d170e5ef91dc848c277 Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sun, 1 Jul 2018 21:44:57 +0200 Subject: [PATCH 11/12] Android: Expose arbitrary mipmap detection toggle in UI --- .../dolphinemu/ui/settings/SettingsFragmentPresenter.java | 2 ++ .../main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java | 1 + Source/Android/app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 5 insertions(+) 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 40c3ed3c1f..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 @@ -386,6 +386,7 @@ public final class SettingsFragmentPresenter 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); @@ -408,6 +409,7 @@ public final class SettingsFragmentPresenter 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)); /* 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 b53b2d4bcb..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 @@ -103,6 +103,7 @@ 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"; diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 285235db89..6d1341edf4 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -173,6 +173,8 @@ Makes distant objects more visible by removing fog, thus increasing the overall detail. Disabling fog will break some games which rely on proper fog emulation. Disable Copy Filter Disables the blending of adjacent rows when copying the EFB. This is known in some games as \"deflickering\" or \"smoothing\". Disabling the filter is usually safe, and may result in a sharper image. + Arbitrary Mipmap Detection + Enables detection of arbitrary mipmaps, which some games use for special distance-based effects.\nMay have false positives that result in blurry textures at increased internal resolution, such as in games that use very low resolution mipmaps. Disabling this can also reduce stutter in games that frequently load new textures.\n\nIf unsure, leave this checked. Stereoscopy Stereoscopy allows you to get a better feeling of depth if you have the necessary hardware.\nHeavily decreases emulation speed and sometimes causes issues Widescreen Hack From 77e51ab5271f1d6db265feb1c41e1a14866d101c Mon Sep 17 00:00:00 2001 From: mahdihijazi Date: Sun, 1 Jul 2018 16:37:09 +0200 Subject: [PATCH 12/12] Android: Make the header focusable otherwise the settings list scrolling is not working properly on Android Oreo(Tv) --- .../app/src/main/res/layout/list_item_settings_header.xml | 1 + 1 file changed, 1 insertion(+) 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 index 3c72913c93..1c0cd336c3 100644 --- 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 @@ -2,6 +2,7 @@