diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 822391084..1fcc4b03c 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -5,6 +5,7 @@ The following people have contributed to the project in some way, and are credit
- Connor McLaughlin - @stenzek
- @ggrtk
- @CookiePLMonster
+- @PookaMustard
## Translators
- Anderson Cardoso - Portuguese (Br)
diff --git a/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java b/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java
index fdf97c557..3e55b867e 100644
--- a/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java
+++ b/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java
@@ -669,6 +669,7 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
final String controllerType = getStringSetting("Controller1/Type", "DigitalController");
final String viewType = getStringSetting("Controller1/TouchscreenControllerView", "digital");
final boolean autoHideTouchscreenController = getBooleanSetting("Controller1/AutoHideTouchscreenController", false);
+ final boolean touchGliding = getBooleanSetting("Controller1/TouchGliding", false);
final boolean hapticFeedback = getBooleanSetting("Controller1/HapticFeedback", false);
final boolean vibration = getBooleanSetting("Controller1/Vibration", false);
final FrameLayout activityLayout = findViewById(R.id.frameLayout);
@@ -689,7 +690,7 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde
activityLayout.addView(mTouchscreenController);
}
- mTouchscreenController.init(0, controllerType, viewType, hapticFeedback);
+ mTouchscreenController.init(0, controllerType, viewType, hapticFeedback, touchGliding);
}
if (vibration)
diff --git a/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java b/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java
index 0cc3c72c8..0f868e822 100644
--- a/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java
+++ b/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java
@@ -186,7 +186,7 @@ public class TouchscreenControllerView extends FrameLayout {
requestLayout();
}
- public void init(int controllerIndex, String controllerType, String viewType, boolean hapticFeedback) {
+ public void init(int controllerIndex, String controllerType, String viewType, boolean hapticFeedback, boolean gliding) {
mControllerIndex = controllerIndex;
mControllerType = controllerType;
mViewType = viewType;
@@ -236,16 +236,16 @@ public class TouchscreenControllerView extends FrameLayout {
linkButton(mMainView, R.id.controller_button_right, "RightButton", "Right", true, false);
linkButton(mMainView, R.id.controller_button_down, "DownButton", "Down", true, false);
linkButton(mMainView, R.id.controller_button_left, "LeftButton", "Left", true, false);
- linkButton(mMainView, R.id.controller_button_l1, "L1Button", "L1", true, true);
- linkButton(mMainView, R.id.controller_button_l2, "L2Button", "L2", true, true);
- linkButton(mMainView, R.id.controller_button_select, "SelectButton", "Select", true, true);
- linkButton(mMainView, R.id.controller_button_start, "StartButton", "Start", true, true);
- linkButton(mMainView, R.id.controller_button_triangle, "TriangleButton", "Triangle", true, true);
- linkButton(mMainView, R.id.controller_button_circle, "CircleButton", "Circle", true, true);
- linkButton(mMainView, R.id.controller_button_cross, "CrossButton", "Cross", true, true);
- linkButton(mMainView, R.id.controller_button_square, "SquareButton", "Square", true, true);
- linkButton(mMainView, R.id.controller_button_r1, "R1Button", "R1", true, true);
- linkButton(mMainView, R.id.controller_button_r2, "R2Button", "R2", true, true);
+ linkButton(mMainView, R.id.controller_button_l1, "L1Button", "L1", true, gliding);
+ linkButton(mMainView, R.id.controller_button_l2, "L2Button", "L2", true, gliding);
+ linkButton(mMainView, R.id.controller_button_select, "SelectButton", "Select", true, gliding);
+ linkButton(mMainView, R.id.controller_button_start, "StartButton", "Start", true, gliding);
+ linkButton(mMainView, R.id.controller_button_triangle, "TriangleButton", "Triangle", true, gliding);
+ linkButton(mMainView, R.id.controller_button_circle, "CircleButton", "Circle", true, gliding);
+ linkButton(mMainView, R.id.controller_button_cross, "CrossButton", "Cross", true, gliding);
+ linkButton(mMainView, R.id.controller_button_square, "SquareButton", "Square", true, gliding);
+ linkButton(mMainView, R.id.controller_button_r1, "R1Button", "R1", true, gliding);
+ linkButton(mMainView, R.id.controller_button_r2, "R2Button", "R2", true, gliding);
if (!linkAxis(mMainView, R.id.controller_axis_left, "LeftAxis", "Left", true))
linkAxisToButtons(mMainView, R.id.controller_axis_left, "LeftAxis", "");
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index dd1dc3f18..e7be72006 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -229,4 +229,6 @@
Logs debug messages printed by games.
List View
Grid View
+ Touch Gliding
+ Allows you to press multiple controller face buttons by dragging your finger along the screen.
diff --git a/android/app/src/main/res/xml/controllers_preferences.xml b/android/app/src/main/res/xml/controllers_preferences.xml
index 17a4d8afb..77953e447 100644
--- a/android/app/src/main/res/xml/controllers_preferences.xml
+++ b/android/app/src/main/res/xml/controllers_preferences.xml
@@ -74,6 +74,13 @@
app:summary="@string/settings_summary_enable_vibration"
app:iconSpaceReserved="false" />
+
+