diff options
| author | JosJuice <josjuice@gmail.com> | 2022-12-26 20:25:09 +0100 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2023-03-03 22:28:25 +0100 |
| commit | 42943672bbbed6c18aa2bc85c41102a0616547f7 (patch) | |
| tree | 9cbe15b847426058e33a0ba153183fe43bd10d0e /Source/Android | |
| parent | 1eeded23df829973065d51c2595bf743910bc07e (diff) | |
Android: Add selecting input profile per game
Diffstat (limited to 'Source/Android')
5 files changed, 91 insertions, 23 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.java index ae35aec46d..667cc9017c 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.java @@ -29,6 +29,13 @@ public final class ProfileDialogPresenter private final DialogFragment mDialog; private final MenuTag mMenuTag; + public ProfileDialogPresenter(MenuTag menuTag) + { + mContext = null; + mDialog = null; + mMenuTag = menuTag; + } + public ProfileDialogPresenter(DialogFragment dialog, MenuTag menuTag) { mContext = dialog.getContext(); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java index 70463f216b..1a9e237728 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java @@ -12,11 +12,12 @@ import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; public class StringSingleChoiceSetting extends SettingsItem { - private AbstractStringSetting mSetting; + private final AbstractStringSetting mSetting; protected String[] mChoices; protected String[] mValues; - private MenuTag mMenuTag; + private final MenuTag mMenuTag; + private int mNoChoicesAvailableString = 0; public StringSingleChoiceSetting(Context context, AbstractStringSetting setting, int titleId, int descriptionId, String[] choices, String[] values, MenuTag menuTag) @@ -35,6 +36,13 @@ public class StringSingleChoiceSetting extends SettingsItem } public StringSingleChoiceSetting(Context context, AbstractStringSetting setting, int titleId, + int descriptionId, String[] choices, String[] values, int noChoicesAvailableString) + { + this(context, setting, titleId, descriptionId, choices, values, null); + mNoChoicesAvailableString = noChoicesAvailableString; + } + + public StringSingleChoiceSetting(Context context, AbstractStringSetting setting, int titleId, int descriptionId, int choicesId, int valuesId, MenuTag menuTag) { super(context, titleId, descriptionId); @@ -115,6 +123,11 @@ public class StringSingleChoiceSetting extends SettingsItem return mMenuTag; } + public int getNoChoicesAvailableString() + { + return mNoChoicesAvailableString; + } + public void setSelectedValue(Settings settings, String selection) { mSetting.setString(settings, selection); 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 2cf2883fda..0a965b953e 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 @@ -255,11 +255,24 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde item.refreshChoicesAndValues(); - mDialog = new MaterialAlertDialogBuilder(mView.getActivity()) - .setTitle(item.getName()) - .setSingleChoiceItems(item.getChoices(), item.getSelectedValueIndex(getSettings()), - this) - .show(); + String[] choices = item.getChoices(); + int noChoicesAvailableString = item.getNoChoicesAvailableString(); + if (noChoicesAvailableString != 0 && choices.length == 0) + { + mDialog = new MaterialAlertDialogBuilder(mView.getActivity()) + .setTitle(item.getName()) + .setMessage(noChoicesAvailableString) + .setPositiveButton(R.string.ok, null) + .show(); + } + else + { + mDialog = new MaterialAlertDialogBuilder(mView.getActivity()) + .setTitle(item.getName()) + .setSingleChoiceItems(item.getChoices(), item.getSelectedValueIndex(getSettings()), + this) + .show(); + } } public void onSingleChoiceDynamicDescriptionsClick(SingleChoiceSettingDynamicDescriptions item, 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 3d33237439..20d4111b98 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 @@ -25,12 +25,14 @@ import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetti import org.dolphinemu.dolphinemu.features.input.model.view.InputDeviceSetting; import org.dolphinemu.dolphinemu.features.input.model.view.InputMappingControlSetting; import org.dolphinemu.dolphinemu.features.input.ui.ProfileDialog; +import org.dolphinemu.dolphinemu.features.input.ui.ProfileDialogPresenter; import org.dolphinemu.dolphinemu.features.settings.model.AbstractBooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting; import org.dolphinemu.dolphinemu.features.settings.model.AdHocBooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.FloatSetting; import org.dolphinemu.dolphinemu.features.settings.model.IntSetting; +import org.dolphinemu.dolphinemu.features.settings.model.LegacyStringSetting; import org.dolphinemu.dolphinemu.features.settings.model.PostProcessing; import org.dolphinemu.dolphinemu.features.settings.model.ScaledIntSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; @@ -1113,8 +1115,15 @@ public final class SettingsFragmentPresenter { EmulatedController gcPad = EmulatedController.getGcPad(gcPadNumber); - addControllerMetaSettings(sl, gcPad); - addControllerMappingSettings(sl, gcPad, null); + if (!TextUtils.isEmpty(mGameID)) + { + addControllerPerGameSettings(sl, "Pad", gcPadNumber); + } + else + { + addControllerMetaSettings(sl, gcPad); + addControllerMappingSettings(sl, gcPad, null); + } } else if (gcPadType == 12) // Adapter { @@ -1129,20 +1138,27 @@ public final class SettingsFragmentPresenter { EmulatedController wiimote = EmulatedController.getWiimote(wiimoteNumber); - addControllerMetaSettings(sl, wiimote); - - sl.add(new HeaderSetting(mContext, R.string.wiimote, 0)); - sl.add(new SubmenuSetting(mContext, R.string.wiimote_general, - MenuTag.getWiimoteGeneralMenuTag(wiimoteNumber))); - sl.add(new SubmenuSetting(mContext, R.string.wiimote_motion_simulation, - MenuTag.getWiimoteMotionSimulationMenuTag(wiimoteNumber))); - sl.add(new SubmenuSetting(mContext, R.string.wiimote_motion_input, - MenuTag.getWiimoteMotionInputMenuTag(wiimoteNumber))); - - // TYPE_OTHER is included here instead of in addWiimoteGeneralSubSettings so that touchscreen - // users won't have to dig into a submenu to find the Sideways Wii Remote setting - addControllerMappingSettings(sl, wiimote, - new ArraySet<>(Arrays.asList(ControlGroup.TYPE_ATTACHMENTS, ControlGroup.TYPE_OTHER))); + if (!TextUtils.isEmpty(mGameID)) + { + addControllerPerGameSettings(sl, "Wiimote", wiimoteNumber); + } + else + { + addControllerMetaSettings(sl, wiimote); + + sl.add(new HeaderSetting(mContext, R.string.wiimote, 0)); + sl.add(new SubmenuSetting(mContext, R.string.wiimote_general, + MenuTag.getWiimoteGeneralMenuTag(wiimoteNumber))); + sl.add(new SubmenuSetting(mContext, R.string.wiimote_motion_simulation, + MenuTag.getWiimoteMotionSimulationMenuTag(wiimoteNumber))); + sl.add(new SubmenuSetting(mContext, R.string.wiimote_motion_input, + MenuTag.getWiimoteMotionInputMenuTag(wiimoteNumber))); + + // TYPE_OTHER is included here instead of in addWiimoteGeneralSubSettings so that touchscreen + // users won't have to dig into a submenu to find the Sideways Wii Remote setting + addControllerMappingSettings(sl, wiimote, new ArraySet<>( + Arrays.asList(ControlGroup.TYPE_ATTACHMENTS, ControlGroup.TYPE_OTHER))); + } } private void addExtensionTypeSettings(ArrayList<SettingsItem> sl, int wiimoteNumber, @@ -1173,6 +1189,23 @@ public final class SettingsFragmentPresenter } /** + * Adds controller settings that can be set on a per-game basis. + * + * @param sl The list to place controller settings into. + * @param profileString The prefix used for the profile setting in game INI files. + * @param controllerNumber The index of the controller, 0-3. + */ + private void addControllerPerGameSettings(ArrayList<SettingsItem> sl, String profileString, + int controllerNumber) + { + String[] profiles = new ProfileDialogPresenter(mMenuTag).getProfileNames(false); + String profileKey = profileString + "Profile" + controllerNumber; + sl.add(new StringSingleChoiceSetting(mContext, + new LegacyStringSetting("", "Controls", profileKey, ""), + R.string.input_profile, 0, profiles, profiles, R.string.input_profiles_empty)); + } + + /** * Adds settings and actions that apply to a controller as a whole. * For instance, the device setting and the Clear action. * diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 0df89707ad..8d1a550962 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -30,6 +30,8 @@ <string name="input_device">Device</string> <string name="input_device_all_devices">Create Mappings for Other Devices</string> <string name="input_device_all_devices_description">Detects inputs from all devices, not just the selected device.</string> + <string name="input_profile">Profile</string> + <string name="input_profiles_empty">You haven\'t created any profiles yet.</string> <string name="input_profiles">Profiles</string> <string name="input_profile_new">(New Profile)</string> <string name="input_profile_load">Load</string> |
