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.
This commit is contained in:
mahdihijazi 2018-02-06 09:42:54 +01:00
parent 9cfcbfacbe
commit 87534f1b2f
17 changed files with 277 additions and 130 deletions

View File

@ -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";

View File

@ -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";

View File

@ -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;
}
}

View File

@ -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.

View File

@ -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;
}

View File

@ -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, "");
}

View File

@ -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:

View File

@ -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();

View File

@ -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, "");
}

View File

@ -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");
}
}

View File

@ -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()

View File

@ -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);
}
}
}

View File

@ -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

View File

@ -234,20 +234,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)

View File

@ -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);
}
}

View File

@ -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;
@ -26,7 +28,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 +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<HashMap<String, SettingSection>> 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<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));
}
private void addGeneralSettings(ArrayList<SettingsItem> 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<SettingsItem> 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<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 +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));

View File

@ -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);
}