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)