From 8f4e488993384ce6eba280cbb0063b8bfd24e8db Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 14 Sep 2019 18:51:51 +0200 Subject: [PATCH] Expand only one message at a time --- .../java/eu/faircode/email/FragmentMessages.java | 14 ++++++++++++++ .../eu/faircode/email/FragmentOptionsBehavior.java | 12 +++++++++++- .../main/res/layout/fragment_options_behavior.xml | 13 ++++++++++++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 38 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 b1f2b12a93..56bda5c4b6 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1196,6 +1196,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. public void setValue(String name, long id, boolean enabled) { if (!values.containsKey(name)) values.put(name, new ArrayList()); + if (enabled) { if (!values.get(name).contains(id)) values.get(name).add(id); @@ -1203,6 +1204,19 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. values.get(name).remove(id); if ("expanded".equals(name)) { + // Collapse other messages + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean expand_one = prefs.getBoolean("expand_one", false); + if (expand_one) { + for (Long other : new ArrayList<>(values.get(name))) + if (!other.equals(id)) { + values.get(name).remove(other); + int pos = adapter.getPositionForKey(other); + if (pos != RecyclerView.NO_POSITION) + adapter.notifyItemChanged(pos); + } + } + updateExpanded(); if (enabled) handleExpand(id); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java index 1f8659fbea..11d494becc 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsBehavior.java @@ -47,6 +47,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe private SwitchCompat swDoubleTap; private SwitchCompat swExpandRead; private SwitchCompat swAutoExpand; + private SwitchCompat swExpandOne; private SwitchCompat swAutoClose; private Spinner spOnClose; private SwitchCompat swCollapse; @@ -56,7 +57,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe private SwitchCompat swDisableTracking; private final static String[] RESET_OPTIONS = new String[]{ - "pull", "autoscroll", "swipenav", "swipe_reversed", "doubletap", "expand_read", "autoexpand", "autoclose", "onclose", + "pull", "autoscroll", "swipenav", "swipe_reversed", "doubletap", "expand_read", "autoexpand", "expand_one", "autoclose", "onclose", "collapse", "autoread", "automove", "discard_delete", "disable_tracking" }; @@ -77,6 +78,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe swDoubleTap = view.findViewById(R.id.swDoubleTap); swExpandRead = view.findViewById(R.id.swExpandRead); swAutoExpand = view.findViewById(R.id.swAutoExpand); + swExpandOne = view.findViewById(R.id.swExpandOne); swAutoClose = view.findViewById(R.id.swAutoClose); spOnClose = view.findViewById(R.id.spOnClose); swCollapse = view.findViewById(R.id.swCollapse); @@ -141,6 +143,13 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe } }); + swExpandOne.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("expand_one", checked).apply(); + } + }); + swAutoClose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -255,6 +264,7 @@ public class FragmentOptionsBehavior extends FragmentBase implements SharedPrefe swDoubleTap.setChecked(prefs.getBoolean("doubletap", false)); swExpandRead.setChecked(prefs.getBoolean("expand_read", true)); swAutoExpand.setChecked(prefs.getBoolean("autoexpand", true)); + swExpandOne.setChecked(prefs.getBoolean("expand_one", false)); swAutoClose.setChecked(prefs.getBoolean("autoclose", true)); String onClose = prefs.getString("onclose", ""); diff --git a/app/src/main/res/layout/fragment_options_behavior.xml b/app/src/main/res/layout/fragment_options_behavior.xml index 17f2d6a367..838d345cc8 100644 --- a/app/src/main/res/layout/fragment_options_behavior.xml +++ b/app/src/main/res/layout/fragment_options_behavior.xml @@ -105,6 +105,17 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swAutoExpand" /> + + Double tap to mark message read/unread Mark messages read on expanding Automatically expand messages + Expand only one message at a time Collapse messages in conversations on \'back\' Automatically close conversations On closing a conversation