diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java
index c0855afb92..e11009b68e 100644
--- a/app/src/main/java/eu/faircode/email/FragmentMessages.java
+++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java
@@ -75,6 +75,7 @@ import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.SubMenu;
import android.view.View;
+import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
@@ -503,6 +504,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
rvMessage.setHasFixedSize(false);
//rvMessage.setItemViewCacheSize(10);
//rvMessage.getRecycledViewPool().setMaxRecycledViews(0, 10);
+
+ final int minOverscroll = Helper.dp2pixels(getContext(),
+ ViewConfiguration.get(getContext()).getScaledPagingTouchSlop());
+
final LinearLayoutManager llm = new LinearLayoutManager(getContext()) {
private Rect parentRect = new Rect();
private Rect childRect = new Rect();
@@ -578,6 +583,19 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
Log.w(ex);
}
}
+
+ @Override
+ public int scrollVerticallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
+ int scrollRange = super.scrollVerticallyBy(dx, recycler, state);
+ boolean swipe_close = prefs.getBoolean("swipe_close", false);
+ if (swipe_close && viewType == AdapterMessage.ViewType.THREAD) {
+ int overscroll = dx - scrollRange;
+ Log.i("Overscroll=" + overscroll + "/" + minOverscroll);
+ if (overscroll < -minOverscroll)
+ handleAutoClose();
+ }
+ return scrollRange;
+ }
};
rvMessage.setLayoutManager(llm);
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
index ddd910bbf3..0841533642 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java
@@ -68,6 +68,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
private SwitchCompat swSwipeNav;
private SwitchCompat swVolumeNav;
private SwitchCompat swReversed;
+ private SwitchCompat swSwipeClose;
private SwitchCompat swAutoExpand;
private SwitchCompat swExpandAll;
private SwitchCompat swExpandOne;
@@ -86,7 +87,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
"double_back", "conversation_actions", "conversation_actions_replies", "language_detection",
"default_snooze",
"pull", "autoscroll", "quick_filter", "quick_scroll",
- "doubletap", "swipenav", "volumenav", "reversed",
+ "doubletap", "swipenav", "volumenav", "reversed", "swipe_close",
"autoexpand", "expand_all", "expand_one", "collapse_multiple",
"autoclose", "onclose", "undo_timeout",
"autoread", "flag_snoozed", "autounflag", "auto_important", "reset_importance"
@@ -116,6 +117,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
swSwipeNav = view.findViewById(R.id.swSwipeNav);
swVolumeNav = view.findViewById(R.id.swVolumeNav);
swReversed = view.findViewById(R.id.swReversed);
+ swSwipeClose = view.findViewById(R.id.swSwipeClose);
swAutoExpand = view.findViewById(R.id.swAutoExpand);
swExpandAll = view.findViewById(R.id.swExpandAll);
swExpandOne = view.findViewById(R.id.swExpandOne);
@@ -253,6 +255,13 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
}
});
+ swSwipeClose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("swipe_close", checked).apply();
+ }
+ });
+
swAutoExpand.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@@ -426,6 +435,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe
swSwipeNav.setChecked(prefs.getBoolean("swipenav", true));
swVolumeNav.setChecked(prefs.getBoolean("volumenav", false));
swReversed.setChecked(prefs.getBoolean("reversed", false));
+ swSwipeClose.setChecked(prefs.getBoolean("swipe_close", false));
swAutoExpand.setChecked(prefs.getBoolean("autoexpand", true));
swExpandAll.setChecked(prefs.getBoolean("expand_all", false));
diff --git a/app/src/main/res/layout/fragment_options_behavior.xml b/app/src/main/res/layout/fragment_options_behavior.xml
index e28101869b..8391e2c064 100644
--- a/app/src/main/res/layout/fragment_options_behavior.xml
+++ b/app/src/main/res/layout/fragment_options_behavior.xml
@@ -251,6 +251,17 @@
app:layout_constraintTop_toBottomOf="@id/swVolumeNav"
app:switchPadding="12dp" />
+
+
Swipe left/right to go to next/previous conversation
Volume up/down to go to next/previous conversation
Reverse navigation direction
+ Swipe down to close conversation
Automatically expand messages
Automatically expand all read messages
Expand only one message at a time