diff options
Diffstat (limited to 'Source/Android/app/src/main/java')
12 files changed, 497 insertions, 278 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java index 3536a17776..933ba04285 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java @@ -248,6 +248,9 @@ public final class NativeLibrary public static native void SetUserSetting(String gameID, String Section, String Key, String Value); + public static native void SetProfileSetting(String profile, String Section, String Key, + String Value); + public static native void InitGameIni(String gameID); /** 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 67b6b77e7a..52312b29f9 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 @@ -12,10 +12,12 @@ import android.widget.Toast; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; +import org.dolphinemu.dolphinemu.dialogs.GameSettingsDialog; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; import org.dolphinemu.dolphinemu.model.GameFile; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; +import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.utils.PicassoUtils; import org.dolphinemu.dolphinemu.viewholders.GameViewHolder; @@ -147,49 +149,10 @@ public final class GameAdapter extends RecyclerView.Adapter<GameViewHolder> impl return true; } - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Game Settings") - .setItems(R.array.gameSettingsMenus, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int which) - { - switch (which) - { - case 0: - SettingsActivity.launch(activity, MenuTag.CONFIG, gameId); - break; - case 1: - SettingsActivity.launch(activity, MenuTag.GRAPHICS, gameId); - break; - case 2: - String path = - DirectoryInitialization.getUserDirectory() + "/GameSettings/" + - gameId + ".ini"; - File gameSettingsFile = new File(path); - if (gameSettingsFile.exists()) - { - if (gameSettingsFile.delete()) - { - Toast.makeText(view.getContext(), "Cleared settings for " + gameId, - Toast.LENGTH_SHORT).show(); - } - else - { - Toast.makeText(view.getContext(), "Unable to clear settings for " + gameId, - Toast.LENGTH_SHORT).show(); - } - } - else - { - Toast.makeText(view.getContext(), "No game settings to delete", - Toast.LENGTH_SHORT).show(); - } - break; - } - } - }); - - builder.show(); + GameSettingsDialog fragment = + GameSettingsDialog.newInstance(gameId, holder.gameFile.getPlatform()); + ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction() + .add(fragment, GameSettingsDialog.TAG).commit(); return true; } 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 2cf23080b1..8047a438e8 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 @@ -14,6 +14,7 @@ import android.widget.ImageView; import android.widget.Toast; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.dialogs.GameSettingsDialog; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; import org.dolphinemu.dolphinemu.model.GameFile; @@ -80,73 +81,30 @@ public final class GameRowPresenter extends Presenter Context context = holder.cardParent.getContext(); Drawable background = ContextCompat.getDrawable(context, backgroundId); holder.cardParent.setInfoAreaBackground(background); - holder.cardParent.setOnLongClickListener(new View.OnLongClickListener() + holder.cardParent.setOnLongClickListener((view) -> { - @Override - public boolean onLongClick(View view) - { - FragmentActivity activity = (FragmentActivity) view.getContext(); - String gameId = gameFile.getGameId(); - - if (gameId.isEmpty()) - { - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Game Settings"); - builder.setMessage("Files without game IDs don't support game-specific settings."); - - builder.show(); - return true; - } + FragmentActivity activity = (FragmentActivity) view.getContext(); + String gameId = gameFile.getGameId(); + if (gameId.isEmpty()) + { AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setTitle("Game Settings") - .setItems(R.array.gameSettingsMenus, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int which) - { - switch (which) - { - case 0: - SettingsActivity.launch(activity, MenuTag.CONFIG, gameId); - break; - case 1: - SettingsActivity.launch(activity, MenuTag.GRAPHICS, gameId); - break; - case 2: - String path = DirectoryInitialization.getUserDirectory() + - "/GameSettings/" + gameId + ".ini"; - File gameSettingsFile = new File(path); - if (gameSettingsFile.exists()) - { - if (gameSettingsFile.delete()) - { - Toast.makeText(view.getContext(), "Cleared settings for " + gameId, - Toast.LENGTH_SHORT).show(); - } - else - { - Toast.makeText(view.getContext(), - "Unable to clear settings for " + gameId, Toast.LENGTH_SHORT) - .show(); - } - } - else - { - Toast.makeText(view.getContext(), "No game settings to delete", - Toast.LENGTH_SHORT).show(); - } - break; - } - } - }); + builder.setTitle("Game Settings"); + builder.setMessage("Files without game IDs don't support game-specific settings."); builder.show(); return true; } + + GameSettingsDialog fragment = + GameSettingsDialog.newInstance(gameId, holder.gameFile.getPlatform()); + ((FragmentActivity) view.getContext()).getSupportFragmentManager().beginTransaction() + .add(fragment, GameSettingsDialog.TAG).commit(); + + return true; }); } - @Override public void onUnbindViewHolder(ViewHolder viewHolder) { diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java new file mode 100644 index 0000000000..5639897d62 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/dialogs/GameSettingsDialog.java @@ -0,0 +1,98 @@ +package org.dolphinemu.dolphinemu.dialogs; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; +import android.widget.Toast; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; +import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; +import org.dolphinemu.dolphinemu.ui.platform.Platform; +import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; + +import java.io.File; + +public class GameSettingsDialog extends DialogFragment +{ + public static final String TAG = "GameSettingsDialog"; + public static final String ARG_GAMEID = "game_id"; + public static final String ARG_PLATFORM = "platform"; + + public static GameSettingsDialog newInstance(String gameId, int platform) + { + GameSettingsDialog fragment = new GameSettingsDialog(); + + Bundle arguments = new Bundle(); + arguments.putString(ARG_GAMEID, gameId); + arguments.putInt(ARG_PLATFORM, platform); + fragment.setArguments(arguments); + + return fragment; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) + { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + + String gameId = getArguments().getString(ARG_GAMEID); + int platform = getArguments().getInt(ARG_PLATFORM); + + builder.setTitle(getActivity().getString(R.string.preferences_game_settings)) + .setItems(platform == Platform.GAMECUBE.toInt() ? + R.array.gameSettingsMenusGC : + R.array.gameSettingsMenusWii, (dialog, which) -> + { + switch (which) + { + case 0: + SettingsActivity.launch(getContext(), MenuTag.CONFIG, gameId); + break; + case 1: + SettingsActivity.launch(getContext(), MenuTag.GRAPHICS, gameId); + break; + case 2: + SettingsActivity.launch(getContext(), MenuTag.GCPAD_TYPE, gameId); + break; + case 3: + // Clear option for GC, Wii controls for else + if (platform == Platform.GAMECUBE.toInt()) + clearGameSettings(gameId); + else + SettingsActivity.launch(getActivity(), MenuTag.WIIMOTE, gameId); + break; + case 4: + clearGameSettings(gameId); + break; + } + }); + return builder.create(); + } + + + private void clearGameSettings(String gameId) + { + String path = + DirectoryInitialization.getUserDirectory() + "/GameSettings/" + gameId + ".ini"; + File gameSettingsFile = new File(path); + if (gameSettingsFile.exists()) + { + if (gameSettingsFile.delete()) + { + Toast.makeText(getContext(), "Cleared settings for " + gameId, Toast.LENGTH_SHORT) + .show(); + } + else + { + Toast.makeText(getContext(), "Unable to clear settings for " + gameId, + Toast.LENGTH_SHORT).show(); + } + } + else + { + Toast.makeText(getContext(), "No game settings to delete", Toast.LENGTH_SHORT).show(); + } + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java index d945512069..0f3ff9d717 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java @@ -26,6 +26,8 @@ public class Settings public static final String SECTION_WIIMOTE = "Wiimote"; public static final String SECTION_BINDINGS = "Android"; + public static final String SECTION_CONTROLS = "Controls"; + public static final String SECTION_PROFILE = "Profile"; public static final String SECTION_ANALYTICS = "Analytics"; @@ -134,6 +136,11 @@ public class Settings mergeSections(SettingsFile.readCustomGameSettings(gameId, view)); } + public void loadWiimoteProfile(String gameId, String padId) + { + mergeSections(SettingsFile.readWiimoteProfile(gameId, padId)); + } + private void mergeSections(HashMap<String, SettingSection> updatedSections) { for (Map.Entry<String, SettingSection> entry : updatedSections.entrySet()) @@ -182,6 +189,5 @@ public class Settings view.showToastMessage("Saved settings for " + gameId); SettingsFile.saveCustomGameSettings(gameId, sections); } - } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java index e3850cb447..0c6a3bc314 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/InputBindingSetting.java @@ -11,9 +11,13 @@ import org.dolphinemu.dolphinemu.features.settings.model.StringSetting; public class InputBindingSetting extends SettingsItem { - public InputBindingSetting(String key, String section, int titleId, Setting setting) + private String gameId; + + public InputBindingSetting(String key, String section, int titleId, Setting setting, + String gameId) { super(key, section, setting, titleId, 0); + this.gameId = gameId; } public String getValue() @@ -98,4 +102,9 @@ public class InputBindingSetting extends SettingsItem { return TYPE_INPUT_BINDING; } + + public String getGameId() + { + return gameId; + } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java index e3c798521f..48df22fc45 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java @@ -1,7 +1,7 @@ package org.dolphinemu.dolphinemu.features.settings.model.view; -import org.dolphinemu.dolphinemu.features.settings.model.Setting; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter; +import org.dolphinemu.dolphinemu.features.settings.model.Setting; /** * ViewModel abstraction for an Item in the RecyclerView powering SettingsFragments. @@ -39,6 +39,7 @@ public abstract class SettingsItem * @param nameId Resource ID for a text string to be displayed as this setting's name. * @param descriptionId Resource ID for a text string to be displayed as this setting's description. */ + public SettingsItem(String key, String section, Setting setting, int nameId, int descriptionId) { mKey = key; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java index a2392caefc..7d903ddd0a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java @@ -292,7 +292,14 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde else if (scSetting.getKey().equals(SettingsFile.KEY_WIIMOTE_EXTENSION)) { putExtensionSetting(which, Character.getNumericValue( - scSetting.getSection().charAt(scSetting.getSection().length() - 1))); + scSetting.getSection().charAt(scSetting.getSection().length() - 1)), false); + } + else if (scSetting.getKey().contains(SettingsFile.KEY_WIIMOTE_EXTENSION) && + scSetting.getSection().equals(Settings.SECTION_CONTROLS)) + { + putExtensionSetting(which, Character + .getNumericValue(scSetting.getKey().charAt(scSetting.getKey().length() - 1)), + true); } } @@ -443,11 +450,22 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde mView.putSetting(gfxBackend); } - private void putExtensionSetting(int which, int wiimoteNumber) + private void putExtensionSetting(int which, int wiimoteNumber, boolean isGame) { - StringSetting extension = new StringSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, - Settings.SECTION_WIIMOTE + wiimoteNumber, - mContext.getResources().getStringArray(R.array.wiimoteExtensionsEntries)[which]); - mView.putSetting(extension); + if (!isGame) + { + StringSetting extension = new StringSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, + Settings.SECTION_WIIMOTE + wiimoteNumber, + mContext.getResources().getStringArray(R.array.wiimoteExtensionsEntries)[which]); + mView.putSetting(extension); + } + else + { + StringSetting extension = + new StringSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + wiimoteNumber, + Settings.SECTION_CONTROLS, mContext.getResources() + .getStringArray(R.array.wiimoteExtensionsEntries)[which]); + mView.putSetting(extension); + } } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java index a7759be7f3..6359c340e2 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java @@ -336,12 +336,23 @@ public final class SettingsFragmentPresenter { for (int i = 0; i < 4; i++) { - // 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.getSection(Settings.SECTION_INI_CORE) - .getSetting(SettingsFile.KEY_GCPAD_TYPE + i); - sl.add(new SingleChoiceSetting(SettingsFile.KEY_GCPAD_TYPE + i, Settings.SECTION_INI_CORE, - R.string.controller_0 + i, 0, R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, - gcPadSetting, MenuTag.getGCPadMenuTag(i))); + if (mGameID.equals("")) + { + // 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.getSection(Settings.SECTION_INI_CORE) + .getSetting(SettingsFile.KEY_GCPAD_TYPE + i); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_GCPAD_TYPE + i, Settings.SECTION_INI_CORE, + R.string.controller_0 + i, 0, R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, + gcPadSetting, MenuTag.getGCPadMenuTag(i))); + } + else + { + Setting gcPadSetting = mSettings.getSection(Settings.SECTION_CONTROLS) + .getSetting(SettingsFile.KEY_GCPAD_G_TYPE + i); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_GCPAD_G_TYPE + i, Settings.SECTION_CONTROLS, + R.string.controller_0 + i, 0, R.array.gcpadTypeEntries, R.array.gcpadTypeValues, 0, + gcPadSetting, MenuTag.getGCPadMenuTag(i))); + } } } @@ -350,11 +361,23 @@ public final class SettingsFragmentPresenter for (int i = 0; i < 4; i++) { // 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.getSection(Settings.SECTION_WIIMOTE + (i + 1)) - .getSetting(SettingsFile.KEY_WIIMOTE_TYPE); - sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_TYPE, Settings.SECTION_WIIMOTE + i, - R.string.wiimote_4 + i, 0, R.array.wiimoteTypeEntries, R.array.wiimoteTypeValues, 0, - wiimoteSetting, MenuTag.getWiimoteMenuTag(i + 4))); + if (mGameID.equals("")) + { + Setting wiimoteSetting = mSettings.getSection(Settings.SECTION_WIIMOTE + (i + 1)) + .getSetting(SettingsFile.KEY_WIIMOTE_TYPE); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_TYPE, + Settings.SECTION_WIIMOTE + (i + 1), R.string.wiimote_4 + i, 0, + R.array.wiimoteTypeEntries, R.array.wiimoteTypeValues, 0, wiimoteSetting, + MenuTag.getWiimoteMenuTag(i + 4))); + } + else + { + Setting wiimoteSetting = mSettings.getSection(Settings.SECTION_CONTROLS) + .getSetting(SettingsFile.KEY_WIIMOTE_G_TYPE + i); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_G_TYPE + i, + Settings.SECTION_CONTROLS, R.string.wiimote_4 + i, 0, R.array.wiimoteTypeEntries, + R.array.wiimoteTypeValues, 0, wiimoteSetting, MenuTag.getWiimoteMenuTag(i + 4))); + } } } @@ -638,53 +661,53 @@ public final class SettingsFragmentPresenter sl.add(new HeaderSetting(null, null, R.string.generic_buttons, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_A + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.button_a, bindA)); + Settings.SECTION_BINDINGS, R.string.button_a, bindA, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_B + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.button_b, bindB)); + Settings.SECTION_BINDINGS, R.string.button_b, bindB, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_X + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.button_x, bindX)); + Settings.SECTION_BINDINGS, R.string.button_x, bindX, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_Y + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.button_y, bindY)); + Settings.SECTION_BINDINGS, R.string.button_y, bindY, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_Z + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.button_z, bindZ)); + Settings.SECTION_BINDINGS, R.string.button_z, bindZ, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_START + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.button_start, bindStart)); + Settings.SECTION_BINDINGS, R.string.button_start, bindStart, mGameID)); sl.add(new HeaderSetting(null, null, R.string.controller_control, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_CONTROL_UP + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindControlUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindControlUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_CONTROL_DOWN + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindControlDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindControlDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_CONTROL_LEFT + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindControlLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindControlLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_CONTROL_RIGHT + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindControlRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindControlRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.controller_c, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_C_UP + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindCUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindCUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_C_DOWN + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindCDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindCDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_C_LEFT + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindCLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindCLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_C_RIGHT + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindCRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindCRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.controller_trig, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_TRIGGER_L + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.trigger_left, bindTriggerL)); + Settings.SECTION_BINDINGS, R.string.trigger_left, bindTriggerL, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_TRIGGER_R + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.trigger_right, bindTriggerR)); + Settings.SECTION_BINDINGS, R.string.trigger_right, bindTriggerR, mGameID)); sl.add(new HeaderSetting(null, null, R.string.controller_dpad, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_DPAD_UP + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindDPadUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindDPadUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_DPAD_DOWN + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindDPadDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindDPadDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_DPAD_LEFT + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindDPadLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindDPadLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_GCBIND_DPAD_RIGHT + gcPadNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindDPadRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindDPadRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.emulation_control_rumble, 0)); @@ -709,10 +732,7 @@ public final class SettingsFragmentPresenter { SettingSection bindingsSection = mSettings.getSection(Settings.SECTION_BINDINGS); - // 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, - Settings.SECTION_WIIMOTE + wiimoteNumber, getExtensionValue(wiimoteNumber - 3), - MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber)); + Setting bindA = bindingsSection.getSetting(SettingsFile.KEY_WIIBIND_A + wiimoteNumber); Setting bindB = bindingsSection.getSetting(SettingsFile.KEY_WIIBIND_B + wiimoteNumber); Setting bind1 = bindingsSection.getSetting(SettingsFile.KEY_WIIBIND_1 + wiimoteNumber); @@ -772,87 +792,110 @@ public final class SettingsFragmentPresenter Setting wiiEmuRumble = bindingsSection.getSetting(SettingsFile.KEY_EMU_RUMBLE + wiimoteNumber); - sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, - Settings.SECTION_WIIMOTE + (wiimoteNumber - 3), R.string.wiimote_extensions, - R.string.wiimote_extensions_description, R.array.wiimoteExtensionsEntries, - R.array.wiimoteExtensionsValues, 0, extension, - MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber))); + // Bindings use controller numbers 4-7 (0-3 are GameCube), but the extension setting uses 1-4. + // But game game specific extension settings are saved in their own profile. These profiles + // do not have any way to specify the controller that is loaded outside of knowing the filename + // of the profile that was loaded. + IntSetting extension; + if (mGameID.equals("")) + { + extension = new IntSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, + Settings.SECTION_WIIMOTE + wiimoteNumber, getExtensionValue(wiimoteNumber - 3), + MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION, + Settings.SECTION_WIIMOTE + (wiimoteNumber - 3), R.string.wiimote_extensions, + R.string.wiimote_extensions_description, R.array.wiimoteExtensionsEntries, + R.array.wiimoteExtensionsValues, 0, extension, + MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber))); + } + else + { + mSettings.loadWiimoteProfile(mGameID, String.valueOf(wiimoteNumber - 4)); + extension = new IntSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4), + Settings.SECTION_CONTROLS, getExtensionValue(wiimoteNumber - 4), + MenuTag.getWiimoteExtensionMenuTag(wiimoteNumber)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_WIIMOTE_EXTENSION + (wiimoteNumber - 4), + Settings.SECTION_CONTROLS, 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, - Settings.SECTION_BINDINGS, R.string.button_a, bindA)); + Settings.SECTION_BINDINGS, R.string.button_a, bindA, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_B + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_b, bindB)); + Settings.SECTION_BINDINGS, R.string.button_b, bindB, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_1 + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_one, bind1)); + Settings.SECTION_BINDINGS, R.string.button_one, bind1, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_2 + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_two, bind2)); + Settings.SECTION_BINDINGS, R.string.button_two, bind2, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_MINUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_minus, bindMinus)); + Settings.SECTION_BINDINGS, R.string.button_minus, bindMinus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_PLUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_plus, bindPlus)); + Settings.SECTION_BINDINGS, R.string.button_plus, bindPlus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_HOME + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_home, bindHome)); + Settings.SECTION_BINDINGS, R.string.button_home, bindHome, mGameID)); sl.add(new HeaderSetting(null, null, R.string.wiimote_ir, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_IR_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindIRUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindIRUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_IR_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindIRDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindIRDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_IR_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindIRLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindIRLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_IR_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindIRRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindIRRight, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_IR_FORWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_forward, bindIRForward)); + Settings.SECTION_BINDINGS, R.string.generic_forward, bindIRForward, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_IR_BACKWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_backward, bindIRBackward)); + Settings.SECTION_BINDINGS, R.string.generic_backward, bindIRBackward, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_IR_HIDE + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.ir_hide, bindIRHide)); + Settings.SECTION_BINDINGS, R.string.ir_hide, bindIRHide, mGameID)); sl.add(new HeaderSetting(null, null, R.string.wiimote_swing, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SWING_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindSwingUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindSwingUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SWING_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindSwingDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindSwingDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SWING_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindSwingLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindSwingLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SWING_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindSwingRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindSwingRight, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SWING_FORWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_forward, bindSwingForward)); + Settings.SECTION_BINDINGS, R.string.generic_forward, bindSwingForward, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SWING_BACKWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_backward, bindSwingBackward)); + Settings.SECTION_BINDINGS, R.string.generic_backward, bindSwingBackward, mGameID)); sl.add(new HeaderSetting(null, null, R.string.wiimote_tilt, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TILT_FORWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_forward, bindTiltForward)); + Settings.SECTION_BINDINGS, R.string.generic_forward, bindTiltForward, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TILT_BACKWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_backward, bindTiltBackward)); + Settings.SECTION_BINDINGS, R.string.generic_backward, bindTiltBackward, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TILT_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindTiltLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindTiltLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TILT_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindTiltRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindTiltRight, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TILT_MODIFIER + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.tilt_modifier, bindTiltModifier)); + Settings.SECTION_BINDINGS, R.string.tilt_modifier, bindTiltModifier, mGameID)); sl.add(new HeaderSetting(null, null, R.string.wiimote_shake, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SHAKE_X + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.shake_x, bindShakeX)); + Settings.SECTION_BINDINGS, R.string.shake_x, bindShakeX, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SHAKE_Y + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.shake_y, bindShakeY)); + Settings.SECTION_BINDINGS, R.string.shake_y, bindShakeY, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_SHAKE_Z + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.shake_z, bindShakeZ)); + Settings.SECTION_BINDINGS, R.string.shake_z, bindShakeZ, mGameID)); sl.add(new HeaderSetting(null, null, R.string.controller_dpad, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DPAD_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindDPadUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindDPadUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DPAD_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindDPadDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindDPadDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DPAD_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindDPadLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindDPadLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DPAD_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindDPadRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindDPadRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.emulation_control_rumble, 0)); @@ -911,58 +954,58 @@ public final class SettingsFragmentPresenter sl.add(new HeaderSetting(null, null, R.string.generic_buttons, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_C + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.nunchuk_button_c, bindC)); + Settings.SECTION_BINDINGS, R.string.nunchuk_button_c, bindC, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_Z + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_z, bindZ)); + Settings.SECTION_BINDINGS, R.string.button_z, bindZ, mGameID)); sl.add(new HeaderSetting(null, null, R.string.generic_stick, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.wiimote_swing, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindSwingUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindSwingUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindSwingDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindSwingDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindSwingLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindSwingLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindSwingRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindSwingRight, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_FORWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_forward, bindSwingForward)); + Settings.SECTION_BINDINGS, R.string.generic_forward, bindSwingForward, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_NUNCHUK_SWING_BACKWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_backward, bindSwingBackward)); + Settings.SECTION_BINDINGS, R.string.generic_backward, bindSwingBackward, mGameID)); sl.add(new HeaderSetting(null, null, R.string.wiimote_tilt, 0)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_FORWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_forward, bindTiltForward)); + Settings.SECTION_BINDINGS, R.string.generic_forward, bindTiltForward, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_BACKWARD + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_backward, bindTiltBackward)); + Settings.SECTION_BINDINGS, R.string.generic_backward, bindTiltBackward, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindTiltLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindTiltLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindTiltRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindTiltRight, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_NUNCHUK_TILT_MODIFIER + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.tilt_modifier, bindTiltModifier)); + Settings.SECTION_BINDINGS, R.string.tilt_modifier, bindTiltModifier, mGameID)); sl.add(new HeaderSetting(null, null, R.string.wiimote_shake, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_SHAKE_X + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.shake_x, bindShakeX)); + Settings.SECTION_BINDINGS, R.string.shake_x, bindShakeX, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_SHAKE_Y + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.shake_y, bindShakeY)); + Settings.SECTION_BINDINGS, R.string.shake_y, bindShakeY, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_NUNCHUK_SHAKE_Z + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.shake_z, bindShakeZ)); + Settings.SECTION_BINDINGS, R.string.shake_z, bindShakeZ, mGameID)); break; case 2: // Classic Setting bindA = @@ -1014,59 +1057,59 @@ public final class SettingsFragmentPresenter sl.add(new HeaderSetting(null, null, R.string.generic_buttons, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_A + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_a, bindA)); + Settings.SECTION_BINDINGS, R.string.button_a, bindA, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_B + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_b, bindB)); + Settings.SECTION_BINDINGS, R.string.button_b, bindB, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_X + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_x, bindX)); + Settings.SECTION_BINDINGS, R.string.button_x, bindX, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_Y + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_y, bindY)); + Settings.SECTION_BINDINGS, R.string.button_y, bindY, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_ZL + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.classic_button_zl, bindZL)); + Settings.SECTION_BINDINGS, R.string.classic_button_zl, bindZL, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_ZR + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.classic_button_zr, bindZR)); + Settings.SECTION_BINDINGS, R.string.classic_button_zr, bindZR, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_MINUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_minus, bindMinus)); + Settings.SECTION_BINDINGS, R.string.button_minus, bindMinus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_PLUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_plus, bindPlus)); + Settings.SECTION_BINDINGS, R.string.button_plus, bindPlus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_HOME + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_home, bindHome)); + Settings.SECTION_BINDINGS, R.string.button_home, bindHome, mGameID)); sl.add(new HeaderSetting(null, null, R.string.classic_leftstick, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindLeftUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindLeftUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindLeftDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindLeftDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindLeftLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindLeftLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_LEFT_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindLeftRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindLeftRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.classic_rightstick, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindRightUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindRightUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindRightDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindRightDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindRightLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindRightLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_RIGHT_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindRightRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindRightRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.controller_trig, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_TRIGGER_L + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.trigger_left, bindR)); + Settings.SECTION_BINDINGS, R.string.trigger_left, bindR, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_TRIGGER_R + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.trigger_right, bindL)); + Settings.SECTION_BINDINGS, R.string.trigger_right, bindL, mGameID)); sl.add(new HeaderSetting(null, null, R.string.controller_dpad, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindDpadUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindDpadUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindDpadDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindDpadDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindDpadLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindDpadLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_CLASSIC_DPAD_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindDpadRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindDpadRight, mGameID)); break; case 3: // Guitar Setting bindFretGreen = bindingsSection @@ -1100,41 +1143,41 @@ public final class SettingsFragmentPresenter sl.add(new HeaderSetting(null, null, R.string.guitar_frets, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_FRET_GREEN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_green, bindFretGreen)); + Settings.SECTION_BINDINGS, R.string.generic_green, bindFretGreen, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_FRET_RED + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_red, bindFretRed)); + Settings.SECTION_BINDINGS, R.string.generic_red, bindFretRed, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_FRET_YELLOW + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_yellow, bindFretYellow)); + Settings.SECTION_BINDINGS, R.string.generic_yellow, bindFretYellow, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_FRET_BLUE + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_blue, bindFretBlue)); + Settings.SECTION_BINDINGS, R.string.generic_blue, bindFretBlue, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_FRET_ORANGE + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_orange, bindFretOrange)); + Settings.SECTION_BINDINGS, R.string.generic_orange, bindFretOrange, mGameID)); sl.add(new HeaderSetting(null, null, R.string.guitar_strum, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_STRUM_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindStrumUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindStrumUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_STRUM_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindStrumDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindStrumDown, mGameID)); sl.add(new HeaderSetting(null, null, R.string.generic_buttons, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_MINUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_minus, bindGuitarMinus)); + Settings.SECTION_BINDINGS, R.string.button_minus, bindGuitarMinus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_PLUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_plus, bindGuitarPlus)); + Settings.SECTION_BINDINGS, R.string.button_plus, bindGuitarPlus, mGameID)); sl.add(new HeaderSetting(null, null, R.string.generic_stick, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_STICK_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindGuitarUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindGuitarUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_STICK_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindGuitarDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindGuitarDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_STICK_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindGuitarLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindGuitarLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_STICK_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindGuitarRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindGuitarRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.guitar_whammy, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_GUITAR_WHAMMY_BAR + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindWhammyBar)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindWhammyBar, mGameID)); break; case 4: // Drums Setting bindPadRed = @@ -1164,33 +1207,33 @@ public final class SettingsFragmentPresenter sl.add(new HeaderSetting(null, null, R.string.drums_pads, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_PAD_RED + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_red, bindPadRed)); + Settings.SECTION_BINDINGS, R.string.generic_red, bindPadRed, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_PAD_YELLOW + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_yellow, bindPadYellow)); + Settings.SECTION_BINDINGS, R.string.generic_yellow, bindPadYellow, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_PAD_BLUE + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_blue, bindPadBlue)); + Settings.SECTION_BINDINGS, R.string.generic_blue, bindPadBlue, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_PAD_GREEN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_green, bindPadGreen)); + Settings.SECTION_BINDINGS, R.string.generic_green, bindPadGreen, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_PAD_ORANGE + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_orange, bindPadOrange)); + Settings.SECTION_BINDINGS, R.string.generic_orange, bindPadOrange, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_PAD_BASS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.drums_pad_bass, bindPadBass)); + Settings.SECTION_BINDINGS, R.string.drums_pad_bass, bindPadBass, mGameID)); sl.add(new HeaderSetting(null, null, R.string.generic_stick, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_STICK_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindDrumsUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindDrumsUp, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_STICK_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindDrumsDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindDrumsDown, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_STICK_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindDrumsLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindDrumsLeft, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_STICK_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindDrumsRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindDrumsRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.generic_buttons, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_MINUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_minus, bindDrumsMinus)); + Settings.SECTION_BINDINGS, R.string.button_minus, bindDrumsMinus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_DRUMS_PLUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_plus, bindDrumsPlus)); + Settings.SECTION_BINDINGS, R.string.button_plus, bindDrumsPlus, mGameID)); break; case 5: // Turntable Setting bindGreenLeft = bindingsSection @@ -1237,66 +1280,76 @@ public final class SettingsFragmentPresenter sl.add(new HeaderSetting(null, null, R.string.generic_buttons, 0)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_GREEN_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_button_green_left, bindGreenLeft)); + Settings.SECTION_BINDINGS, R.string.turntable_button_green_left, bindGreenLeft, + mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_RED_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_button_red_left, bindRedLeft)); + Settings.SECTION_BINDINGS, R.string.turntable_button_red_left, bindRedLeft, + mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_BLUE_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_button_blue_left, bindBlueLeft)); + Settings.SECTION_BINDINGS, R.string.turntable_button_blue_left, bindBlueLeft, + mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_GREEN_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_button_green_right, bindGreenRight)); + Settings.SECTION_BINDINGS, R.string.turntable_button_green_right, bindGreenRight, + mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_RED_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_button_red_right, bindRedRight)); + Settings.SECTION_BINDINGS, R.string.turntable_button_red_right, bindRedRight, + mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_BLUE_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_button_blue_right, bindBlueRight)); + Settings.SECTION_BINDINGS, R.string.turntable_button_blue_right, bindBlueRight, + mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_MINUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_minus, bindTurntableMinus)); + Settings.SECTION_BINDINGS, R.string.button_minus, bindTurntableMinus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_PLUS + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.button_plus, bindTurntablePlus)); + Settings.SECTION_BINDINGS, R.string.button_plus, bindTurntablePlus, mGameID)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_EUPHORIA + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_button_euphoria, bindEuphoria)); + Settings.SECTION_BINDINGS, R.string.turntable_button_euphoria, bindEuphoria, + mGameID)); sl.add(new HeaderSetting(null, null, R.string.turntable_table_left, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_LEFT_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindTurntableLeftLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindTurntableLeftLeft, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_LEFT_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindTurntableLeftRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindTurntableLeftRight, + mGameID)); sl.add(new HeaderSetting(null, null, R.string.turntable_table_right, 0)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_RIGHT_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindTurntableRightLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindTurntableRightLeft, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_RIGHT_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindTurntableRightRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindTurntableRightRight, + mGameID)); sl.add(new HeaderSetting(null, null, R.string.generic_stick, 0)); sl.add(new InputBindingSetting(SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_UP + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_up, bindTurntableUp)); + Settings.SECTION_BINDINGS, R.string.generic_up, bindTurntableUp, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_DOWN + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_down, bindTurntableDown)); + Settings.SECTION_BINDINGS, R.string.generic_down, bindTurntableDown, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindTurntableLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindTurntableLeft, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_STICK_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindTurntableRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindTurntableRight, mGameID)); sl.add(new HeaderSetting(null, null, R.string.turntable_effect, 0)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_EFFECT_DIAL + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.turntable_effect_dial, bindEffectDial)); + Settings.SECTION_BINDINGS, R.string.turntable_effect_dial, bindEffectDial, + mGameID)); sl.add(new HeaderSetting(null, null, R.string.turntable_crossfade, 0)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_CROSSFADE_LEFT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_left, bindCrossfadeLeft)); + Settings.SECTION_BINDINGS, R.string.generic_left, bindCrossfadeLeft, mGameID)); sl.add(new InputBindingSetting( SettingsFile.KEY_WIIBIND_TURNTABLE_CROSSFADE_RIGHT + wiimoteNumber, - Settings.SECTION_BINDINGS, R.string.generic_right, bindCrossfadeRight)); + Settings.SECTION_BINDINGS, R.string.generic_right, bindCrossfadeRight, mGameID)); break; } } @@ -1358,9 +1411,19 @@ public final class SettingsFragmentPresenter try { - String extension = - ((StringSetting) mSettings.getSection(Settings.SECTION_WIIMOTE + wiimoteNumber) - .getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION)).getValue(); + String extension; + if (mGameID.equals("")) // Main settings + { + extension = + ((StringSetting) mSettings.getSection(Settings.SECTION_WIIMOTE + wiimoteNumber) + .getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION)).getValue(); + } + else // Game settings + { + extension = ((StringSetting) mSettings.getSection(Settings.SECTION_PROFILE) + .getSetting(SettingsFile.KEY_WIIMOTE_EXTENSION)).getValue(); + } + if (extension.equals("None")) { extensionValue = 0; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java index 0b585b2e50..d2afd88731 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/InputBindingSettingViewHolder.java @@ -41,8 +41,9 @@ public final class InputBindingSettingViewHolder extends SettingViewHolder mItem = (InputBindingSetting) item; - mTextSettingName.setText(item.getNameId()); - mTextSettingDescription.setText(sharedPreferences.getString(mItem.getKey(), "")); + mTextSettingName.setText(mItem.getNameId()); + mTextSettingDescription + .setText(sharedPreferences.getString(mItem.getKey() + mItem.getGameId(), "")); } @Override diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java index 0ccf700b0e..4592011443 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java @@ -90,6 +90,7 @@ public final class SettingsFile public static final String KEY_WAIT_FOR_SHADERS = "WaitForShadersBeforeStarting"; public static final String KEY_GCPAD_TYPE = "SIDevice"; + public static final String KEY_GCPAD_G_TYPE = "PadType"; public static final String KEY_GCBIND_A = "InputA_"; public static final String KEY_GCBIND_B = "InputB_"; @@ -120,6 +121,10 @@ public final class SettingsFile public static final String KEY_WIIMOTE_TYPE = "Source"; public static final String KEY_WIIMOTE_EXTENSION = "Extension"; + // Controller keys for game specific settings + public static final String KEY_WIIMOTE_G_TYPE = "WiimoteSource"; + public static final String KEY_WIIMOTE_PROFILE = "WiimoteProfile"; + public static final String KEY_WIIBIND_A = "WiimoteA_"; public static final String KEY_WIIBIND_B = "WiimoteB_"; public static final String KEY_WIIBIND_1 = "Wiimote1_"; @@ -370,6 +375,12 @@ public final class SettingsFile return readFile(getGenericGameSettingsForAllRegions(gameId), true, view); } + public static HashMap<String, SettingSection> readWiimoteProfile(final String gameId, + final String padId) + { + String profile = gameId + "_Wii" + padId; + return readFile(getWiiProfile(profile, padId), true, null); + } /** * Saves a Settings HashMap to a given .ini file on disk. If unsuccessful, outputs an error @@ -435,13 +446,43 @@ public final class SettingsFile for (String settingKey : sortedKeySet) { Setting setting = settings.get(settingKey); - NativeLibrary - .SetUserSetting(gameId, mapSectionNameFromIni(section.getName()), setting.getKey(), - setting.getValueAsString()); + // Special case. Extension gets saved into a controller profile + if (settingKey.contains(SettingsFile.KEY_WIIMOTE_EXTENSION)) + { + saveCustomWiimoteSetting(gameId, setting); + } + else + { + NativeLibrary.SetUserSetting(gameId, mapSectionNameFromIni(section.getName()), + setting.getKey(), setting.getValueAsString()); + } } } } + /** + * Saves the extension value in a profile and enables that profile. Extension is the only + * controller setting that is not saved in the main config. + * + * @param gameId + * @param setting + */ + public static void saveCustomWiimoteSetting(final String gameId, final Setting setting) + { + if (setting.getSection().equals(Settings.SECTION_PROFILE)) + return; + String padId = + setting.getKey().substring(setting.getKey().length() - 1, setting.getKey().length()); + String profile = gameId + "_Wii" + padId; + + NativeLibrary.SetProfileSetting(profile, Settings.SECTION_PROFILE, KEY_WIIMOTE_EXTENSION, + setting.getValueAsString()); + + // Enable the profile + NativeLibrary.SetUserSetting(gameId, Settings.SECTION_CONTROLS, + KEY_WIIMOTE_PROFILE + (Integer.valueOf(padId) + 1), profile); + } + private static String mapSectionNameFromIni(String generalSectionName) { if (sectionsMap.getForward(generalSectionName) != null) @@ -487,10 +528,32 @@ public final class SettingsFile private static File getCustomGameSettingsFile(String gameId) { + return new File( DirectoryInitialization.getUserDirectory() + "/GameSettings/" + gameId + ".ini"); } + private static File getWiiProfile(String profile, String padId) + { + String wiiConfigPath = + DirectoryInitialization.getUserDirectory() + "/Config/Profiles/Wiimote/" + + profile + ".ini"; + + File wiiProfile = new File(wiiConfigPath); + // If it doesn't exist, create it + if (!wiiProfile.exists()) + { + String defautlWiiProfilePath = + DirectoryInitialization.getUserDirectory() + + "/Config/Profiles/Wiimote/WiimoteProfile.ini"; + DirectoryInitialization.copyFile(defautlWiiProfilePath, wiiConfigPath); + + NativeLibrary.SetProfileSetting(profile, Settings.SECTION_PROFILE, "Device", + "Android/" + (Integer.valueOf(padId) + 4) + "/Touchscreen"); + } + return wiiProfile; + } + private static SettingSection sectionFromLine(String line, boolean isCustomGame) { String sectionName = line.substring(1, line.length() - 1); @@ -626,4 +689,10 @@ public final class SettingsFile { return setting.getKey() + " = " + setting.getValueAsString(); } + + private static String customWiimoteExtSettingAsString(Setting setting) + { + return setting.getKey().substring(0, setting.getKey().length() - 1) + " = " + + setting.getValueAsString(); + } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java index b0132c215f..c8b54b36f0 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java @@ -16,6 +16,7 @@ import android.support.v4.content.LocalBroadcastManager; import org.dolphinemu.dolphinemu.NativeLibrary; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -139,8 +140,14 @@ public final class DirectoryInitialization // // TODO: Redo the Android controller system so that we don't have to extract these INIs. String configDirectory = NativeLibrary.GetUserDirectory() + File.separator + "Config"; + String profileDirectory = + NativeLibrary.GetUserDirectory() + File.separator + "Config/Profiles/Wiimote/"; + createWiimoteProfileDirectory(profileDirectory); + copyAsset("GCPadNew.ini", new File(configDirectory, "GCPadNew.ini"), true, context); copyAsset("WiimoteNew.ini", new File(configDirectory, "WiimoteNew.ini"), false, context); + copyAsset("WiimoteProfile.ini", new File(profileDirectory, "WiimoteProfile.ini"), true, + context); } private static void deleteDirectoryRecursively(File file) @@ -247,6 +254,20 @@ public final class DirectoryInitialization } } + public static void copyFile(String from, String to) + { + try + { + InputStream in = new FileInputStream(from); + OutputStream out = new FileOutputStream(to); + copyFile(in, out); + } + catch (IOException e) + { + + } + } + private static void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; @@ -258,6 +279,15 @@ public final class DirectoryInitialization } } + private static void createWiimoteProfileDirectory(String directory) + { + File wiiPath = new File(directory); + if (!wiiPath.isDirectory()) + { + wiiPath.mkdirs(); + } + } + private static native void CreateUserDirectories(); private static native void SetSysDirectory(String path); |
