From cf7163b8149d024ee15506562a803ffd9e99bc71 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 20 Jul 2020 16:16:32 +0200 Subject: [PATCH] Added swipe down to close conversation --- .../eu/faircode/email/FragmentMessages.java | 18 ++++++++++++++++++ .../email/FragmentOptionsBehavior.java | 12 +++++++++++- .../res/layout/fragment_options_behavior.xml | 13 ++++++++++++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 42 insertions(+), 2 deletions(-) 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