Show if folder has active rules

This commit is contained in:
M66B 2019-06-21 08:39:36 +02:00
parent 08c37785ad
commit f3e5159168
6 changed files with 114 additions and 62 deletions

View File

@ -94,8 +94,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
private ImageView ivExpander;
private ImageView ivUnified;
private ImageView ivNotify;
private ImageView ivSubscribed;
private ImageView ivRule;
private ImageView ivNotify;
private TextView tvName;
private TextView tvMessages;
private ImageView ivMessages;
@ -123,8 +124,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
ivExpander = itemView.findViewById(R.id.ivExpander);
ivUnified = itemView.findViewById(R.id.ivUnified);
ivNotify = itemView.findViewById(R.id.ivNotify);
ivSubscribed = itemView.findViewById(R.id.ivSubscribed);
ivRule = itemView.findViewById(R.id.ivRule);
ivNotify = itemView.findViewById(R.id.ivNotify);
tvName = itemView.findViewById(R.id.tvName);
tvMessages = itemView.findViewById(R.id.tvMessages);
ivMessages = itemView.findViewById(R.id.ivMessages);
@ -204,8 +206,9 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
if (listener == null) {
ivUnified.setVisibility(account > 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)

View File

@ -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<TupleFolderEx> 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<TupleFolderEx> liveFolderEx(long id);
@Query("SELECT * FROM folder ORDER BY account, name COLLATE NOCASE")

View File

@ -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 &&

View File

@ -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" />
<TextView
android:id="@+id/tvUnified"
@ -45,9 +45,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_inbox"
android:padding="12dp"
app:srcCompat="@drawable/baseline_inbox_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivType" />
app:layout_constraintTop_toBottomOf="@id/ivType"
app:srcCompat="@drawable/baseline_inbox_24" />
<TextView
android:id="@+id/tvInbox"
@ -67,9 +67,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_drafts"
android:padding="12dp"
app:srcCompat="@drawable/baseline_drafts_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivInbox" />
app:layout_constraintTop_toBottomOf="@id/ivInbox"
app:srcCompat="@drawable/baseline_drafts_24" />
<TextView
android:id="@+id/tvDrafts"
@ -89,9 +89,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_sent"
android:padding="12dp"
app:srcCompat="@drawable/baseline_send_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivDrafts" />
app:layout_constraintTop_toBottomOf="@id/ivDrafts"
app:srcCompat="@drawable/baseline_send_24" />
<TextView
android:id="@+id/tvSent"
@ -111,9 +111,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_archive"
android:padding="12dp"
app:srcCompat="@drawable/baseline_archive_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivSent" />
app:layout_constraintTop_toBottomOf="@id/ivSent"
app:srcCompat="@drawable/baseline_archive_24" />
<TextView
android:id="@+id/tvArchive"
@ -133,9 +133,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_trash"
android:padding="12dp"
app:srcCompat="@drawable/baseline_delete_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivArchive" />
app:layout_constraintTop_toBottomOf="@id/ivArchive"
app:srcCompat="@drawable/baseline_delete_24" />
<TextView
android:id="@+id/tvTrash"
@ -155,9 +155,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_junk"
android:padding="12dp"
app:srcCompat="@drawable/baseline_flag_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivTrash" />
app:layout_constraintTop_toBottomOf="@id/ivTrash"
app:srcCompat="@drawable/baseline_flag_24" />
<TextView
android:id="@+id/tvJunk"
@ -177,9 +177,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_primary"
android:padding="12dp"
app:srcCompat="@drawable/baseline_star_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivJunk" />
app:layout_constraintTop_toBottomOf="@id/ivJunk"
app:srcCompat="@drawable/baseline_star_24" />
<TextView
android:id="@+id/tvPrimary"
@ -193,37 +193,15 @@
app:layout_constraintStart_toEndOf="@id/ivPrimary"
app:layout_constraintTop_toTopOf="@id/ivPrimary" />
<ImageView
android:id="@+id/ivNotify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_notify"
android:padding="12dp"
app:srcCompat="@drawable/baseline_notifications_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivPrimary" />
<TextView
android:id="@+id/tvNotify"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center_vertical"
android:text="@string/title_legend_notify"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintBottom_toBottomOf="@id/ivNotify"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ivNotify"
app:layout_constraintTop_toTopOf="@id/ivNotify" />
<ImageView
android:id="@+id/ivSubscribed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_subscribed"
android:padding="12dp"
app:srcCompat="@drawable/baseline_bookmark_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivNotify" />
app:layout_constraintTop_toBottomOf="@id/ivPrimary"
app:srcCompat="@drawable/baseline_bookmark_24" />
<TextView
android:id="@+id/tvSubscribed"
@ -237,6 +215,50 @@
app:layout_constraintStart_toEndOf="@id/ivSubscribed"
app:layout_constraintTop_toTopOf="@id/ivSubscribed" />
<ImageView
android:id="@+id/ivRule"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/title_edit_rules"
android:padding="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivSubscribed"
app:srcCompat="@drawable/baseline_filter_list_24" />
<TextView
android:id="@+id/tvRule"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center_vertical"
android:text="@string/title_legend_rule"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintBottom_toBottomOf="@id/ivRule"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ivRule"
app:layout_constraintTop_toTopOf="@id/ivRule" />
<ImageView
android:id="@+id/ivNotify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_notify"
android:padding="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivRule"
app:srcCompat="@drawable/baseline_notifications_24" />
<TextView
android:id="@+id/tvNotify"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center_vertical"
android:text="@string/title_legend_notify"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintBottom_toBottomOf="@id/ivNotify"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ivNotify"
app:layout_constraintTop_toTopOf="@id/ivNotify" />
<TextView
android:id="@+id/tvDownloadFetch"
android:layout_width="48dp"
@ -254,10 +276,10 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_download_fetch"
android:padding="12dp"
app:srcCompat="@drawable/baseline_mail_outline_24"
app:layout_constraintBottom_toBottomOf="@+id/tvDownloadFetchLegend"
app:layout_constraintStart_toEndOf="@id/tvDownloadFetch"
app:layout_constraintTop_toTopOf="@+id/tvDownloadFetchLegend" />
app:layout_constraintTop_toTopOf="@+id/tvDownloadFetchLegend"
app:srcCompat="@drawable/baseline_mail_outline_24" />
<TextView
android:id="@+id/tvDownloadFetchLegend"
@ -269,7 +291,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ivDownloadFetch"
app:layout_constraintTop_toBottomOf="@id/ivSubscribed" />
app:layout_constraintTop_toBottomOf="@id/ivNotify" />
<TextView
android:id="@+id/tvSyncKeep"
@ -288,10 +310,10 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_sync_keep"
android:padding="12dp"
app:srcCompat="@drawable/baseline_sync_24"
app:layout_constraintBottom_toBottomOf="@+id/tvSyncKeepLegend"
app:layout_constraintStart_toEndOf="@id/tvSyncKeep"
app:layout_constraintTop_toTopOf="@+id/tvSyncKeepLegend" />
app:layout_constraintTop_toTopOf="@+id/tvSyncKeepLegend"
app:srcCompat="@drawable/baseline_sync_24" />
<TextView
android:id="@+id/tvSyncKeepLegend"
@ -311,9 +333,9 @@
android:layout_height="wrap_content"
android:contentDescription="@string/title_legend_stop"
android:padding="12dp"
app:srcCompat="@drawable/baseline_stop_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvSyncKeepLegend" />
app:layout_constraintTop_toBottomOf="@id/tvSyncKeepLegend"
app:srcCompat="@drawable/baseline_stop_24" />
<TextView
android:id="@+id/tvStop"

View File

@ -74,7 +74,7 @@
app:srcCompat="@drawable/baseline_folder_special_24" />
<ImageView
android:id="@+id/ivNotify"
android:id="@+id/ivSubscribed"
android:layout_width="30dp"
android:layout_height="24dp"
android:contentDescription="@string/title_legend_notify"
@ -82,18 +82,29 @@
app:layout_constraintBottom_toBottomOf="@+id/tvName"
app:layout_constraintStart_toEndOf="@id/ivUnified"
app:layout_constraintTop_toTopOf="@+id/tvName"
app:srcCompat="@drawable/baseline_notifications_24" />
app:srcCompat="@drawable/baseline_bookmark_24" />
<ImageView
android:id="@+id/ivSubscribed"
android:id="@+id/ivRule"
android:layout_width="30dp"
android:layout_height="24dp"
android:contentDescription="@string/title_edit_rules"
android:paddingEnd="6dp"
app:layout_constraintBottom_toBottomOf="@+id/tvName"
app:layout_constraintStart_toEndOf="@id/ivSubscribed"
app:layout_constraintTop_toTopOf="@+id/tvName"
app:srcCompat="@drawable/baseline_filter_list_24" />
<ImageView
android:id="@+id/ivNotify"
android:layout_width="30dp"
android:layout_height="24dp"
android:contentDescription="@string/title_legend_notify"
android:paddingEnd="6dp"
app:layout_constraintBottom_toBottomOf="@+id/tvName"
app:layout_constraintStart_toEndOf="@id/ivNotify"
app:layout_constraintStart_toEndOf="@id/ivRule"
app:layout_constraintTop_toTopOf="@+id/tvName"
app:srcCompat="@drawable/baseline_bookmark_24" />
app:srcCompat="@drawable/baseline_notifications_24" />
<TextView
android:id="@+id/tvName"
@ -108,7 +119,7 @@
android:text="Name"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:layout_constraintEnd_toStartOf="@+id/tvMessages"
app:layout_constraintStart_toEndOf="@id/ivSubscribed"
app:layout_constraintStart_toEndOf="@id/ivNotify"
app:layout_constraintTop_toTopOf="parent" />
<TextView

View File

@ -621,8 +621,9 @@
<string name="title_legend_trash">Trash</string>
<string name="title_legend_junk">Spam</string>
<string name="title_legend_primary">Primary</string>
<string name="title_legend_notify">Notify new messages</string>
<string name="title_legend_subscribed">Subscribed to</string>
<string name="title_legend_rule">Has rules</string>
<string name="title_legend_notify">Notify new messages</string>
<string name="title_legend_sync_keep">Number of days to synchronize / to keep messages</string>
<string name="title_legend_download_fetch">Number of message downloaded / headers fetched</string>
<string name="title_legend_stop">Stop processing rules</string>