From 1e2d0be945e1cea66540dfe8c6341ae4537af228 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 9 Mar 2020 09:51:09 +0100 Subject: [PATCH] Scroll to top after recreate --- app/src/main/java/eu/faircode/email/Core.java | 6 +++++ .../eu/faircode/email/FragmentMessages.java | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 9889f43a4b..7667f84579 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -124,6 +124,8 @@ import static androidx.core.app.NotificationCompat.DEFAULT_SOUND; import static javax.mail.Folder.READ_WRITE; class Core { + static final Map newMessages = new HashMap<>(); + private static final int MAX_NOTIFICATION_COUNT = 25; // per group private static final long AFTER_SEND_DELAY = 15 * 1000L; // milliseconds private static final int SYNC_CHUNCK_SIZE = 200; @@ -2301,6 +2303,10 @@ class Core { // Prepare scroll to top if (!message.ui_seen && message.received > account.created) { + synchronized (newMessages) { + newMessages.put(folder.id, folder); + } + Intent report = new Intent(FragmentMessages.ACTION_NEW_MESSAGE); report.putExtra("folder", folder.id); report.putExtra("unified", folder.unified); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index ddc669d22d..0e6fddf637 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -3751,6 +3751,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (handleThreadActions(messages)) return; + checkNewMessages(); + Log.i("Submit messages=" + messages.size()); adapter.submitList(messages); @@ -4476,6 +4478,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. long fid = intent.getLongExtra("folder", -1); boolean unified = intent.getBooleanExtra("unified", false); + synchronized (Core.newMessages) { + Core.newMessages.remove(fid); + } + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); boolean autoscroll = prefs.getBoolean("autoscroll", true); @@ -4485,6 +4491,27 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. adapter.gotoTop(); } + private void checkNewMessages() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean autoscroll = prefs.getBoolean("autoscroll", true); + + boolean newMessages = false; + synchronized (Core.newMessages) { + for (long fid : new ArrayList<>(Core.newMessages.keySet())) { + EntityFolder f = Core.newMessages.get(fid); + if (f != null && + ((viewType == AdapterMessage.ViewType.UNIFIED && f.unified) || + (viewType == AdapterMessage.ViewType.FOLDER && folder == f.id))) { + newMessages = true; + Core.newMessages.remove(fid); + } + } + } + + if (autoscroll && newMessages) + adapter.gotoTop(); + } + private void onStoreRaw(Intent intent) { message = intent.getLongExtra("id", -1); Intent create = new Intent(Intent.ACTION_CREATE_DOCUMENT);