From 59b8c43df23c184b95b493f22d318ffe64118cd2 Mon Sep 17 00:00:00 2001
From: Markus Kreft <129367085+markus-kreft@users.noreply.github.com>
Date: Wed, 4 Mar 2026 21:33:27 +0100
Subject: [PATCH 1/2] feat(note-list): add option to disable swipe actions
Add a toggle in the "Appearance and behavior" settings to enable or
disable swipe gestures (delete and favorite) in the note list.
The default value is set to enabled, preserving existing behavior while
allowing users who accidentally trigger these actions to disable them.
Changes:
- Add `swipe_actions` preference to `preferences.xml`
- Add `isSwipeEnabled` global state in `NotesApplication`
- Update `NotesListViewItemTouchHelper` to respect the setting
- Create `ic_swipe_grey600_24dp.xml` for the settings icon
---
.../owncloud/notes/NotesApplication.java | 10 ++++++++++
.../list/NotesListViewItemTouchHelper.java | 3 ++-
.../notes/preferences/PreferencesFragment.java | 13 +++++++++++++
.../main/res/drawable/ic_swipe_grey600_24dp.xml | 17 +++++++++++++++++
app/src/main/res/values/strings.xml | 3 +++
app/src/main/res/xml/preferences.xml | 8 ++++++++
6 files changed, 53 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/res/drawable/ic_swipe_grey600_24dp.xml
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java b/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java
index 423525fc6..f449402f4 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java
@@ -36,6 +36,7 @@ public class NotesApplication extends Application {
private static long lastInteraction = 0;
private static String PREF_KEY_THEME;
private static boolean isGridViewEnabled = false;
+ private static boolean isSwipeEnabled = true;
private static BrandingUtil brandingUtil;
@Override
@@ -45,6 +46,7 @@ public void onCreate() {
final var prefs = getDefaultSharedPreferences(getApplicationContext());
lockedPreference = prefs.getBoolean(getString(R.string.pref_key_lock), false);
isGridViewEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_gridview), false);
+ isSwipeEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_swipe_actions), true);
super.onCreate();
brandingUtil = BrandingUtil.getInstance(this);
if (BuildConfig.DEBUG) {
@@ -80,6 +82,14 @@ public static void updateGridViewEnabled(boolean gridView) {
isGridViewEnabled = gridView;
}
+ public static boolean isSwipeEnabled() {
+ return isSwipeEnabled;
+ }
+
+ public static void updateSwipeEnabled(boolean swipeEnabled) {
+ isSwipeEnabled = swipeEnabled;
+ }
+
public static DarkModeSetting getAppTheme(Context context) {
final var prefs = getDefaultSharedPreferences(context);
String mode;
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java
index f09841b69..a0b17e285 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NotesListViewItemTouchHelper.java
@@ -24,6 +24,7 @@
import com.google.android.material.snackbar.Snackbar;
import it.niedermann.owncloud.notes.R;
+import it.niedermann.owncloud.notes.NotesApplication;
import it.niedermann.owncloud.notes.branding.BrandedSnackbar;
import it.niedermann.owncloud.notes.main.MainViewModel;
import it.niedermann.owncloud.notes.main.items.ItemAdapter;
@@ -63,7 +64,7 @@ public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.
*/
@Override
public int getSwipeDirs(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
- if (gridView || viewHolder instanceof SectionViewHolder) return 0;
+ if (gridView || !NotesApplication.isSwipeEnabled() || viewHolder instanceof SectionViewHolder) return 0;
return super.getSwipeDirs(recyclerView, viewHolder);
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesFragment.java
index 3f67b9f7d..80dd8f111 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesFragment.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesFragment.java
@@ -37,6 +37,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Bra
private BrandedSwitchPreference lockPref;
private BrandedSwitchPreference wifiOnlyPref;
private BrandedSwitchPreference gridViewPref;
+ private BrandedSwitchPreference swipeActionsPref;
private BrandedSwitchPreference preventScreenCapturePref;
private BrandedSwitchPreference backgroundSyncPref;
private BrandedSwitchPreference keepScreenOnPref;
@@ -66,6 +67,17 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
Log.e(TAG, "Could not find preference with key: \"" + getString(R.string.pref_key_gridview) + "\"");
}
+ swipeActionsPref = findPreference(getString(R.string.pref_key_swipe_actions));
+ if (swipeActionsPref != null) {
+ swipeActionsPref.setOnPreferenceChangeListener((Preference preference, Object newValue) -> {
+ final Boolean swipeEnabled = (Boolean) newValue;
+ Log.v(TAG, "swipeEnabled: " + swipeEnabled);
+ viewModel.resultCode$.setValue(Activity.RESULT_OK);
+ NotesApplication.updateSwipeEnabled(swipeEnabled);
+ return true;
+ });
+ }
+
keepScreenOnPref = findPreference(getString(R.string.pref_key_keep_screen_on));
if (keepScreenOnPref != null) {
keepScreenOnPref.setOnPreferenceChangeListener((Preference preference, Object newValue) -> {
@@ -144,6 +156,7 @@ public void applyBrand(int color) {
lockPref.applyBrand(color);
wifiOnlyPref.applyBrand(color);
gridViewPref.applyBrand(color);
+ swipeActionsPref.applyBrand(color);
showEcosystemAppBarPref.applyBrand(color);
preventScreenCapturePref.applyBrand(color);
backgroundSyncPref.applyBrand(color);
diff --git a/app/src/main/res/drawable/ic_swipe_grey600_24dp.xml b/app/src/main/res/drawable/ic_swipe_grey600_24dp.xml
new file mode 100644
index 000000000..161c7c19a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_swipe_grey600_24dp.xml
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 683eea1e1..1d0c39640 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -190,6 +190,8 @@
When disabled, the advanced editor will be hidden.
Keep screen on
When viewing or editing a note
+ Swipe actions
+ Mark as favorite or delete notes with a swipe
Synchronization failed: %1$s
Synchronization failed
@@ -261,6 +263,7 @@
backgroundSync
directEditPreference
show_ecosystem_apps
+ swipe_actions
edit
directEdit
preview
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 8c87a05b0..6eabd3e14 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -74,6 +74,14 @@
android:layout="@layout/item_pref"
android:title="@string/settings_gridview" />
+
+
Date: Tue, 17 Mar 2026 17:12:59 +0100
Subject: [PATCH 2/2] style: Update swipe icon
Signed-off-by: Andy Scherzinger
---
app/src/main/res/drawable/ic_swipe_grey600_24dp.xml | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/src/main/res/drawable/ic_swipe_grey600_24dp.xml b/app/src/main/res/drawable/ic_swipe_grey600_24dp.xml
index 161c7c19a..24d401a94 100644
--- a/app/src/main/res/drawable/ic_swipe_grey600_24dp.xml
+++ b/app/src/main/res/drawable/ic_swipe_grey600_24dp.xml
@@ -1,17 +1,16 @@
+ android:pathData="M473,880Q449,880 427,871Q405,862 388,845L184,640L214,609Q230,593 251.5,587.5Q273,582 294,588L360,607L360,280Q360,263 371.5,251.5Q383,240 400,240Q417,240 428.5,251.5Q440,263 440,280L440,713L343,686L445,788Q450,793 457.5,796.5Q465,800 473,800L640,800Q673,800 696.5,776.5Q720,753 720,720L720,560Q720,543 731.5,531.5Q743,520 760,520Q777,520 788.5,531.5Q800,543 800,560L800,720Q800,786 753,833Q706,880 640,880L473,880ZM480,600L480,440Q480,423 491.5,411.5Q503,400 520,400Q537,400 548.5,411.5Q560,423 560,440L560,600L480,600ZM600,600L600,480Q600,463 611.5,451.5Q623,440 640,440Q657,440 668.5,451.5Q680,463 680,480L680,600L600,600ZM580,680L580,680L580,680Q580,680 580,680Q580,680 580,680L580,680Q580,680 580,680Q580,680 580,680L580,680L580,680ZM880,280L680,280L680,220L796,220Q730,162 649,131Q568,100 480,100Q392,100 311,131Q230,162 164,220L280,220L280,280L80,280L80,80L140,80L140,161Q212,102 299,71Q386,40 480,40Q574,40 661,71Q748,102 820,161L820,80L880,80L880,280Z"/>