diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/InputMappingIntSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/InputMappingIntSetting.java new file mode 100644 index 0000000000..989f2b7cde --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/InputMappingIntSetting.java @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.input.model; + +import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting; +import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting; +import org.dolphinemu.dolphinemu.features.settings.model.Settings; + +public class InputMappingIntSetting implements AbstractIntSetting +{ + private final NumericSetting mNumericSetting; + + public InputMappingIntSetting(NumericSetting numericSetting) + { + mNumericSetting = numericSetting; + } + + @Override + public int getInt(Settings settings) + { + return mNumericSetting.getIntValue(); + } + + @Override + public void setInt(Settings settings, int newValue) + { + mNumericSetting.setIntValue(newValue); + } + + @Override + public boolean isOverridden(Settings settings) + { + return false; + } + + @Override + public boolean isRuntimeEditable() + { + return true; + } + + @Override + public boolean delete(Settings settings) + { + mNumericSetting.setIntValue(mNumericSetting.getIntDefaultValue()); + return true; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/ControlGroup.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/ControlGroup.java index 19423d5f14..0a7681af6d 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/ControlGroup.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/ControlGroup.java @@ -12,6 +12,21 @@ import androidx.annotation.Keep; */ public class ControlGroup { + public static final int TYPE_OTHER = 0; + public static final int TYPE_STICK = 1; + public static final int TYPE_MIXED_TRIGGERS = 2; + public static final int TYPE_BUTTONS = 3; + public static final int TYPE_FORCE = 4; + public static final int TYPE_ATTACHMENTS = 5; + public static final int TYPE_TILT = 6; + public static final int TYPE_CURSOR = 7; + public static final int TYPE_TRIGGERS = 8; + public static final int TYPE_SLIDER = 9; + public static final int TYPE_SHAKE = 10; + public static final int TYPE_IMU_ACCELEROMETER = 11; + public static final int TYPE_IMU_GYROSCOPE = 12; + public static final int TYPE_IMU_CURSOR = 13; + @Keep private final long mPointer; @@ -23,6 +38,8 @@ public class ControlGroup public native String getUiName(); + public native int getGroupType(); + public native int getControlCount(); public native Control getControl(int i); @@ -30,4 +47,10 @@ public class ControlGroup public native int getNumericSettingCount(); public native NumericSetting getNumericSetting(int i); + + /** + * If getGroupType returns TYPE_ATTACHMENTS, this returns the attachment selection setting. + * Otherwise, undefined behavior! + */ + public native NumericSetting getAttachmentSetting(); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/NumericSetting.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/NumericSetting.java index 9baa2c41d7..bcb9dce181 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/NumericSetting.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/input/model/controlleremu/NumericSetting.java @@ -47,6 +47,21 @@ public class NumericSetting public native ControlReference getControlReference(); + /** + * If the type is TYPE_INT, gets the current value. Otherwise, undefined behavior! + */ + public native int getIntValue(); + + /** + * If the type is TYPE_INT, sets the current value. Otherwise, undefined behavior! + */ + public native void setIntValue(int value); + + /** + * If the type is TYPE_INT, gets the default value. Otherwise, undefined behavior! + */ + public native int getIntDefaultValue(); + /** * If the type is TYPE_DOUBLE, gets the current value. Otherwise, undefined behavior! */ 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 775c9b3f8a..fded8e56de 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 @@ -16,6 +16,7 @@ import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.UserDataActivity; import org.dolphinemu.dolphinemu.features.input.model.InputMappingBooleanSetting; import org.dolphinemu.dolphinemu.features.input.model.InputMappingDoubleSetting; +import org.dolphinemu.dolphinemu.features.input.model.InputMappingIntSetting; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.ControlGroup; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.EmulatedController; import org.dolphinemu.dolphinemu.features.input.model.controlleremu.NumericSetting; @@ -1117,6 +1118,15 @@ public final class SettingsFragmentPresenter sl.add(new InputMappingControlSetting(group.getControl(j), controller)); } + if (group.getGroupType() == ControlGroup.TYPE_ATTACHMENTS) + { + NumericSetting attachmentSetting = group.getAttachmentSetting(); + sl.add(new SingleChoiceSetting(mContext, new InputMappingIntSetting(attachmentSetting), + R.string.wiimote_extensions, 0, R.array.wiimoteExtensionsEntries, + R.array.wiimoteExtensionsValues, + MenuTag.getWiimoteExtensionMenuTag(mControllerNumber))); + } + int numericSettingCount = group.getNumericSettingCount(); for (int j = 0; j < numericSettingCount; j++) { diff --git a/Source/Android/app/src/main/res/values/arrays.xml b/Source/Android/app/src/main/res/values/arrays.xml index 4e27b8ade3..5afaf8ba2c 100644 --- a/Source/Android/app/src/main/res/values/arrays.xml +++ b/Source/Android/app/src/main/res/values/arrays.xml @@ -210,14 +210,14 @@ @string/extension_drums @string/extension_turntable - - None - Nunchuk - Classic - Guitar - Drums - Turntable - + + 0 + 1 + 2 + 3 + 4 + 5 + diff --git a/Source/Android/jni/Input/ControlGroup.cpp b/Source/Android/jni/Input/ControlGroup.cpp index 01405a0e8b..0b69145b36 100644 --- a/Source/Android/jni/Input/ControlGroup.cpp +++ b/Source/Android/jni/Input/ControlGroup.cpp @@ -6,6 +6,7 @@ #include #include "Common/MsgHandler.h" +#include "InputCommon/ControllerEmu/ControlGroup/Attachments.h" #include "InputCommon/ControllerEmu/ControlGroup/ControlGroup.h" #include "jni/AndroidCommon/AndroidCommon.h" #include "jni/AndroidCommon/IDCache.h" @@ -36,6 +37,13 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_g return ToJString(env, Common::GetStringT(GetPointer(env, obj)->ui_name.c_str())); } +JNIEXPORT jint JNICALL +Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_getGroupType( + JNIEnv* env, jobject obj) +{ + return static_cast(GetPointer(env, obj)->type); +} + JNIEXPORT jint JNICALL Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_getControlCount( JNIEnv* env, jobject obj) @@ -63,4 +71,12 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_g { return NumericSettingToJava(env, GetPointer(env, obj)->numeric_settings[i].get()); } + +JNIEXPORT jobject JNICALL +Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_getAttachmentSetting( + JNIEnv* env, jobject obj) +{ + auto* group = reinterpret_cast(GetPointer(env, obj)); + return NumericSettingToJava(env, &group->GetSelectionSetting()); +} } diff --git a/Source/Android/jni/Input/NumericSetting.cpp b/Source/Android/jni/Input/NumericSetting.cpp index 32805d15f8..1625d172ae 100644 --- a/Source/Android/jni/Input/NumericSetting.cpp +++ b/Source/Android/jni/Input/NumericSetting.cpp @@ -81,6 +81,27 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_NumericSetting return ControlReferenceToJava(env, &GetPointer(env, obj)->GetInputReference()); } +JNIEXPORT jint JNICALL +Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_NumericSetting_getIntValue( + JNIEnv* env, jobject obj) +{ + return GetPointer(env, obj)->GetValue(); +} + +JNIEXPORT void JNICALL +Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_NumericSetting_setIntValue( + JNIEnv* env, jobject obj, jint value) +{ + GetPointer(env, obj)->SetValue(value); +} + +JNIEXPORT jint JNICALL +Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_NumericSetting_getIntDefaultValue( + JNIEnv* env, jobject obj) +{ + return GetPointer(env, obj)->GetDefaultValue(); +} + JNIEXPORT jdouble JNICALL Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_NumericSetting_getDoubleValue( JNIEnv* env, jobject obj)