diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index 7fc90aa95f..2c8f04f1af 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -792,4 +792,6 @@
Show web suggestion provider icon in search bar
Match dock search bar actions
Clicking the dock search bar will now open the app drawer search UI
+ Icon swipe gestures
+ Perform acttions when swiping left or right on icons instead of moving the home screen
diff --git a/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt b/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt
index 834f22103b..b6b8003707 100644
--- a/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt
+++ b/lawnchair/src/app/lawnchair/override/CustomizeDialog.kt
@@ -172,7 +172,7 @@ fun CustomizeAppDialog(
)
}
- if (context.launcher.stateManager.state != LauncherState.ALL_APPS) {
+ if (preferenceManager2.iconSwipeGestures.asState().value && context.launcher.stateManager.state != LauncherState.ALL_APPS) {
PreferenceGroup(heading = stringResource(R.string.gestures_label)) {
listOf(
GestureType.SWIPE_LEFT,
diff --git a/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt b/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt
index 66af0600f5..7518ca0f16 100644
--- a/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt
+++ b/lawnchair/src/app/lawnchair/preferences2/PreferenceManager2.kt
@@ -670,6 +670,11 @@ class PreferenceManager2 private constructor(private val context: Context) :
onSet = { reloadHelper.reloadGrid() },
)
+ val iconSwipeGestures = preference(
+ key = booleanPreferencesKey(name = "icon_swipe_gestures"),
+ defaultValue = false,
+ )
+
val doubleTapGestureHandler = serializablePreference(
key = stringPreferencesKey("double_tap_gesture_handler"),
defaultValue = GestureHandlerConfig.Sleep,
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt
index 0e09d5d790..d2c7001597 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/destinations/ExperimentalFeaturesPreferences.kt
@@ -46,6 +46,11 @@ fun ExperimentalFeaturesPreferences(
label = stringResource(id = R.string.always_reload_icons_label),
description = stringResource(id = R.string.always_reload_icons_description),
)
+ SwitchPreference(
+ adapter = prefs2.iconSwipeGestures.getAdapter(),
+ label = stringResource(R.string.icon_swipe_gestures),
+ description = stringResource(R.string.icon_swipe_gestures_description),
+ )
val enableWallpaperBlur = prefs.enableWallpaperBlur.getAdapter()
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 523f99dfeb..534e8e05b3 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -1208,7 +1208,9 @@ public class Workspace extends PagedView
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View touchedView = findViewAtPosition(ev.getX(), ev.getY());
- if (touchedView instanceof ShortcutAndWidgetContainer container) {
+ Boolean iconSwipeGestures = PreferenceExtensionsKt.firstBlocking(mPreferenceManager2.getIconSwipeGestures());
+
+ if (iconSwipeGestures && touchedView instanceof ShortcutAndWidgetContainer container) {
container.onTouchEvent(ev);
return false;
}