From c1bd4968ace0f4c2c28ea063b3d7e100941b97c2 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 17 Nov 2019 14:47:13 +0100 Subject: [PATCH] Simplified/fixed scroll to top --- .../eu/faircode/email/AdapterMessage.java | 24 +------------------ .../eu/faircode/email/FragmentMessages.java | 23 ++++++++++++++++++ 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index d4d8561601..3aa53d7bc8 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -3658,29 +3658,7 @@ public class AdapterMessage extends RecyclerView.Adapter() { @Override public void onCurrentListChanged(@Nullable PagedList previousList, @Nullable PagedList currentList) { - boolean autoscroll = - (viewType == AdapterMessage.ViewType.THREAD || - (viewType != ViewType.SEARCH && - prefs.getBoolean("autoscroll", true))); - - int prev = 0; - if (autoscroll && previousList != null) - for (int i = 0; i < previousList.size(); i++) { - TupleMessageEx message = previousList.get(i); - if (message != null && !message.ui_seen && !message.ui_ignored && !message.duplicate) - prev++; - } - - int cur = 0; - if (autoscroll && currentList != null) - for (int i = 0; i < currentList.size(); i++) { - TupleMessageEx message = currentList.get(i); - if (message != null && !message.ui_seen && !message.ui_ignored && !message.duplicate) - cur++; - } - - if (gotoTop || - (previousList != null && currentList != null && cur > prev)) { + if (gotoTop) { gotoTop = false; properties.scrollTo(0); } diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 94a8a8d9d1..b64e61bcca 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -3175,6 +3175,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. }; private Observer> observer = new Observer>() { + private List ids = new ArrayList<>(); + @Override public void onChanged(@Nullable PagedList messages) { if (messages == null) @@ -3184,6 +3186,27 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (handleThreadActions(messages)) return; + if (viewType == AdapterMessage.ViewType.THREAD) + adapter.gotoTop(); + else if (viewType != AdapterMessage.ViewType.SEARCH) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean autoscroll = prefs.getBoolean("autoscroll", true); + if (autoscroll) { + boolean gotoTop = false; + for (int i = 0; i < messages.size(); i++) { + TupleMessageEx message = messages.get(i); + if (message != null && !ids.contains(message.id)) { + ids.add(message.id); + if (!message.ui_seen) + gotoTop = true; + } + } + + if (gotoTop) + adapter.gotoTop(); + } + } + Log.i("Submit messages=" + messages.size()); adapter.submitList(messages);