summaryrefslogtreecommitdiff
path: root/Source/Android
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2022-12-26 20:25:09 +0100
committerJosJuice <josjuice@gmail.com>2023-03-03 22:28:25 +0100
commit42943672bbbed6c18aa2bc85c41102a0616547f7 (patch)
tree9cbe15b847426058e33a0ba153183fe43bd10d0e /Source/Android
parent1eeded23df829973065d51c2595bf743910bc07e (diff)
Android: Add selecting input profile per game
Diffstat (limited to 'Source/Android')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/ui/ProfileDialogPresenter.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/StringSingleChoiceSetting.java17
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java23
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java65
-rw-r--r--Source/Android/app/src/main/res/values/strings.xml2
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>