diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index b2fa4b13c8..97963c1d91 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -94,8 +94,9 @@ public class AdapterFolder extends RecyclerView.Adapter 0 && folder.unified ? View.VISIBLE : View.GONE); - ivNotify.setVisibility(folder.notify ? View.VISIBLE : View.GONE); ivSubscribed.setVisibility(subscriptions && folder.subscribed != null && folder.subscribed ? View.VISIBLE : View.GONE); + ivRule.setVisibility(folder.rules > 0 ? View.VISIBLE : View.GONE); + ivNotify.setVisibility(folder.notify ? View.VISIBLE : View.GONE); } if (folder.unseen > 0) diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index a3f7133c2b..c10152c71c 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -33,13 +33,16 @@ public interface DaoFolder { @Query("SELECT folder.*" + ", account.id AS accountId, account.`order` AS accountOrder, account.name AS accountName, account.color AS accountColor, account.state AS accountState" + + ", COUNT(rule.id) AS rules" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + - ", (SELECT COUNT(operation.id) FROM operation WHERE operation.folder = folder.id AND operation.state = 'executing') AS executing" + + ", COUNT(operation.id) AS executing" + " FROM folder" + " LEFT JOIN account ON account.id = folder.account" + + " LEFT JOIN rule ON rule.folder = folder.id AND rule.enabled" + " LEFT JOIN message ON message.folder = folder.id AND NOT message.ui_hide" + + " LEFT JOIN operation ON operation.folder = folder.id AND operation.state = 'executing'" + " WHERE folder.account = :account AND account.synchronize" + " GROUP BY folder.id") List getFoldersEx(long account); @@ -65,13 +68,16 @@ public interface DaoFolder { @Query("SELECT folder.*" + ", account.id AS accountId, account.`order` AS accountOrder, account.name AS accountName, account.color AS accountColor, account.state AS accountState" + + ", COUNT(rule.id) AS rules" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + - ", (SELECT COUNT(operation.id) FROM operation WHERE operation.folder = folder.id AND operation.state = 'executing') AS executing" + + ", COUNT(operation.id) AS executing" + " FROM folder" + " LEFT JOIN account ON account.id = folder.account" + + " LEFT JOIN rule ON rule.folder = folder.id AND rule.enabled" + " LEFT JOIN message ON message.folder = folder.id AND NOT message.ui_hide" + + " LEFT JOIN operation ON operation.folder = folder.id AND operation.state = 'executing'" + " WHERE CASE WHEN :account IS NULL" + " THEN folder.unified AND account.synchronize" + " ELSE folder.account = :account AND account.synchronize" + @@ -81,13 +87,16 @@ public interface DaoFolder { @Query("SELECT folder.*" + ", account.id AS accountId, account.`order` AS accountOrder, account.name AS accountName, account.color AS accountColor, account.state AS accountState" + + ", COUNT(rule.id) AS rules" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + - ", (SELECT COUNT(operation.id) FROM operation WHERE operation.folder = folder.id AND operation.state = 'executing') AS executing" + + ", COUNT(operation.id) AS executing" + " FROM folder" + " JOIN account ON account.id = folder.account" + + " LEFT JOIN rule ON rule.folder = folder.id AND rule.enabled" + " LEFT JOIN message ON message.folder = folder.id AND NOT message.ui_hide" + + " LEFT JOIN operation ON operation.folder = folder.id AND operation.state = 'executing'" + " WHERE account.`synchronize`" + " AND folder.unified" + " GROUP BY folder.id") @@ -120,14 +129,18 @@ public interface DaoFolder { @Query("SELECT folder.*" + ", account.id AS accountId, account.`order` AS accountOrder, account.name AS accountName, account.color AS accountColor, account.state AS accountState" + + ", COUNT(rule.id) AS rules" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + - ", (SELECT COUNT(operation.id) FROM operation WHERE operation.folder = folder.id AND operation.state = 'executing') AS executing" + + ", COUNT(operation.id) AS executing" + " FROM folder" + " LEFT JOIN account ON account.id = folder.account" + + " LEFT JOIN rule ON rule.folder = folder.id AND rule.enabled" + " LEFT JOIN message ON message.folder = folder.id AND NOT message.ui_hide" + - " WHERE folder.id = :id") + " LEFT JOIN operation ON operation.folder = folder.id AND operation.state = 'executing'" + + " WHERE folder.id = :id" + + " GROUP BY folder.id") LiveData liveFolderEx(long id); @Query("SELECT * FROM folder ORDER BY account, name COLLATE NOCASE") diff --git a/app/src/main/java/eu/faircode/email/TupleFolderEx.java b/app/src/main/java/eu/faircode/email/TupleFolderEx.java index 4b913495c4..d44394ded0 100644 --- a/app/src/main/java/eu/faircode/email/TupleFolderEx.java +++ b/app/src/main/java/eu/faircode/email/TupleFolderEx.java @@ -42,6 +42,7 @@ public class TupleFolderEx extends EntityFolder implements Serializable { public String accountName; public Integer accountColor; public String accountState; + public int rules; public int messages; public int content; public int unseen; @@ -68,6 +69,7 @@ public class TupleFolderEx extends EntityFolder implements Serializable { Objects.equals(this.accountName, other.accountName) && Objects.equals(this.accountColor, other.accountColor) && Objects.equals(this.accountState, other.accountState) && + this.rules == other.rules && this.messages == other.messages && this.content == other.content && this.unseen == other.unseen && diff --git a/app/src/main/res/layout/fragment_legend_folders.xml b/app/src/main/res/layout/fragment_legend_folders.xml index 8e29d97f9e..febb5de6bf 100644 --- a/app/src/main/res/layout/fragment_legend_folders.xml +++ b/app/src/main/res/layout/fragment_legend_folders.xml @@ -23,9 +23,9 @@ android:layout_height="wrap_content" android:contentDescription="@string/title_legend_unified" android:padding="12dp" - app:srcCompat="@drawable/baseline_folder_special_24" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:srcCompat="@drawable/baseline_folder_special_24" /> + app:layout_constraintTop_toBottomOf="@id/ivType" + app:srcCompat="@drawable/baseline_inbox_24" /> + app:layout_constraintTop_toBottomOf="@id/ivInbox" + app:srcCompat="@drawable/baseline_drafts_24" /> + app:layout_constraintTop_toBottomOf="@id/ivDrafts" + app:srcCompat="@drawable/baseline_send_24" /> + app:layout_constraintTop_toBottomOf="@id/ivSent" + app:srcCompat="@drawable/baseline_archive_24" /> + app:layout_constraintTop_toBottomOf="@id/ivArchive" + app:srcCompat="@drawable/baseline_delete_24" /> + app:layout_constraintTop_toBottomOf="@id/ivTrash" + app:srcCompat="@drawable/baseline_flag_24" /> + app:layout_constraintTop_toBottomOf="@id/ivJunk" + app:srcCompat="@drawable/baseline_star_24" /> - - - - + app:layout_constraintTop_toBottomOf="@id/ivPrimary" + app:srcCompat="@drawable/baseline_bookmark_24" /> + + + + + + + + + app:layout_constraintTop_toTopOf="@+id/tvDownloadFetchLegend" + app:srcCompat="@drawable/baseline_mail_outline_24" /> + app:layout_constraintTop_toBottomOf="@id/ivNotify" /> + app:layout_constraintTop_toTopOf="@+id/tvSyncKeepLegend" + app:srcCompat="@drawable/baseline_sync_24" /> + app:layout_constraintTop_toBottomOf="@id/tvSyncKeepLegend" + app:srcCompat="@drawable/baseline_stop_24" /> + app:srcCompat="@drawable/baseline_bookmark_24" /> + + + app:srcCompat="@drawable/baseline_notifications_24" /> Trash Spam Primary - Notify new messages Subscribed to + Has rules + Notify new messages Number of days to synchronize / to keep messages Number of message downloaded / headers fetched Stop processing rules