From a685da21a978d27c00909dfa19557c4758c47adf Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 29 Sep 2019 13:42:25 +0200 Subject: [PATCH] Prevent flicker on marking expanded message read --- .../main/java/eu/faircode/email/DaoMessage.java | 15 ++++++++++----- .../java/eu/faircode/email/FragmentMessages.java | 10 +++++++++- .../java/eu/faircode/email/TupleMessageEx.java | 2 ++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 08d178bebc..4947457231 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -42,7 +42,8 @@ public interface DaoMessage { String is_outbox = "folder.type = '" + EntityFolder.OUTBOX + "'"; @Query("SELECT message.*" + - ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor, account.notify AS accountNotify" + + ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor" + + ", account.notify AS accountNotify, account.auto_seen AS accountAutoSeen" + ", folder.name AS folderName, folder.display AS folderDisplay, folder.type AS folderType, folder.read_only AS folderReadOnly" + ", identity.name AS identityName, identity.email AS identityEmail, identity.synchronize AS identitySynchronize" + ", '[' || group_concat(message.`from`, ',') || ']' AS senders" + @@ -90,7 +91,8 @@ public interface DaoMessage { boolean debug); @Query("SELECT message.*" + - ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor, account.notify AS accountNotify" + + ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor" + + ", account.notify AS accountNotify, account.auto_seen AS accountAutoSeen" + ", folder.name AS folderName, folder.display AS folderDisplay, folder.type AS folderType, folder.read_only AS folderReadOnly" + ", identity.name AS identityName, identity.email AS identityEmail, identity.synchronize AS identitySynchronize" + ", '[' || group_concat(message.`from`, ',') || ']' AS senders" + @@ -132,7 +134,8 @@ public interface DaoMessage { boolean debug); @Query("SELECT message.*" + - ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor, account.notify AS accountNotify" + + ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor" + + ", account.notify AS accountNotify, account.auto_seen AS accountAutoSeen" + ", folder.name AS folderName, folder.display AS folderDisplay, folder.type AS folderType, folder.read_only AS folderReadOnly" + ", identity.name AS identityName, identity.email AS identityEmail, identity.synchronize AS identitySynchronize" + ", message.`from` AS senders" + @@ -231,7 +234,8 @@ public interface DaoMessage { int countMessageByMsgId(long folder, String msgid); @Query("SELECT message.*" + - ", account.pop AS accountPop, account.name AS accountName, identity.color AS accountColor, account.notify AS accountNotify" + + ", account.pop AS accountPop, account.name AS accountName, identity.color AS accountColor" + + ", account.notify AS accountNotify, account.auto_seen AS accountAutoSeen" + ", folder.name AS folderName, folder.display AS folderDisplay, folder.type AS folderType, folder.read_only AS folderReadOnly" + ", identity.name AS identityName, identity.email AS identityEmail, identity.synchronize AS identitySynchronize" + ", message.`from` AS senders" + @@ -263,7 +267,8 @@ public interface DaoMessage { TupleMessageStats getUnseenWidget(); @Query("SELECT message.*" + - ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor, account.notify AS accountNotify" + + ", account.pop AS accountPop, account.name AS accountName, IFNULL(identity.color, account.color) AS accountColor" + + ", account.notify AS accountNotify, account.auto_seen AS accountAutoSeen" + ", folder.name AS folderName, folder.display AS folderDisplay, folder.type AS folderType, folder.read_only AS folderReadOnly" + ", identity.name AS identityName, identity.email AS identityEmail, identity.synchronize AS identitySynchronize" + ", message.`from` AS senders" + diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index db23242d5b..4a698da7c8 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -3099,8 +3099,16 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. expand = messages.get(0); if (expand != null && - (expand.content || unmetered || (expand.size != null && expand.size < download))) + (expand.content || unmetered || (expand.size != null && expand.size < download))) { + // Prevent flicker + if (expand.accountPop || + (expand.accountAutoSeen && !expand.ui_seen && !expand.folderReadOnly)) { + expand.unseen = 0; + expand.ui_seen = true; + } + iProperties.setValue("expanded", expand.id, true); + } } } else { if (autoCloseCount > 0 && (autoclose || onclose != null)) { diff --git a/app/src/main/java/eu/faircode/email/TupleMessageEx.java b/app/src/main/java/eu/faircode/email/TupleMessageEx.java index 006c114c8a..10844fb5ca 100644 --- a/app/src/main/java/eu/faircode/email/TupleMessageEx.java +++ b/app/src/main/java/eu/faircode/email/TupleMessageEx.java @@ -30,6 +30,7 @@ public class TupleMessageEx extends EntityMessage { public String accountName; public Integer accountColor; public boolean accountNotify; + public boolean accountAutoSeen; public String folderName; public String folderDisplay; public String folderType; @@ -57,6 +58,7 @@ public class TupleMessageEx extends EntityMessage { Objects.equals(this.accountName, other.accountName) && Objects.equals(this.accountColor, other.accountColor) && this.accountNotify == other.accountNotify && + this.accountAutoSeen == other.accountAutoSeen && this.folderName.equals(other.folderName) && Objects.equals(this.folderDisplay, other.folderDisplay) && this.folderType.equals(other.folderType) &&