From ea66c6100ef2e74ddbc87143c91b835dfbb9765a Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 22 Aug 2018 16:37:10 +0000 Subject: [PATCH] Show account name in unified inbox --- .../java/eu/faircode/email/AdapterMessage.java | 16 ++++++++++++---- .../main/java/eu/faircode/email/DaoMessage.java | 12 ++++++++---- .../eu/faircode/email/FragmentMessages.java | 17 +++++++++++------ .../java/eu/faircode/email/TupleMessageEx.java | 3 +++ app/src/main/res/layout/item_message.xml | 13 ++++++++++++- 5 files changed, 46 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 4b36f6e1a1..6967475dd6 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -52,7 +52,7 @@ public class AdapterMessage extends PagedListAdapter 0 ? View.VISIBLE : View.GONE); tvSubject.setText(message.subject); - if (viewType == ViewType.FOLDER) { + if (viewType == ViewType.UNIFIED) { + tvFolder.setText(message.accountName); + tvCount.setText(Integer.toString(message.count)); + tvCount.setVisibility(debug || message.count > 1 ? View.VISIBLE : View.GONE); + } else if (viewType == ViewType.FOLDER) { + tvFolder.setVisibility(View.GONE); tvCount.setText(Integer.toString(message.count)); tvCount.setVisibility(debug || message.count > 1 ? View.VISIBLE : View.GONE); } else { - tvCount.setText(Helper.localizeFolderName(context, message.folderName)); - tvCount.setVisibility(View.VISIBLE); + tvCount.setVisibility(View.GONE); + tvFolder.setText(Helper.localizeFolderName(context, message.folderName)); + tvFolder.setVisibility(View.VISIBLE); } if (debug) { diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 3d7b017ee6..6f04410aa1 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -35,12 +35,13 @@ public interface DaoMessage { // all bare columns in the result set take values from the input row which also contains the minimum or maximum." // https://www.sqlite.org/lang_select.html - @Query("SELECT message.*, folder.name as folderName, folder.type as folderType" + + @Query("SELECT message.*, account.name AS accountName, folder.name as folderName, folder.type as folderType" + ", COUNT(message.id) as count" + ", SUM(CASE WHEN message.ui_seen THEN 0 ELSE 1 END) as unseen" + ", (SELECT COUNT(a.id) FROM attachment a WHERE a.message = message.id) AS attachments" + ", MAX(CASE WHEN folder.type = '" + EntityFolder.INBOX + "' THEN message.id ELSE 0 END) as dummy" + " FROM message" + + " LEFT JOIN account ON account.id = message.account" + " JOIN folder ON folder.id = message.folder" + " WHERE (NOT message.ui_hide OR :debug)" + " GROUP BY CASE WHEN message.thread IS NULL THEN message.id ELSE message.thread END" + @@ -48,12 +49,13 @@ public interface DaoMessage { " ORDER BY message.received DESC") DataSource.Factory pagedUnifiedInbox(boolean debug); - @Query("SELECT message.*, folder.name as folderName, folder.type as folderType" + + @Query("SELECT message.*, account.name AS accountName, folder.name as folderName, folder.type as folderType" + ", COUNT(message.id) as count" + ", SUM(CASE WHEN message.ui_seen THEN 0 ELSE 1 END) as unseen" + ", (SELECT COUNT(a.id) FROM attachment a WHERE a.message = message.id) AS attachments" + ", MAX(CASE WHEN folder.id = :folder THEN message.id ELSE 0 END) as dummy" + " FROM message" + + " LEFT JOIN account ON account.id = message.account" + " JOIN folder ON folder.id = message.folder" + " LEFT JOIN folder f ON f.id = :folder" + " WHERE (NOT message.ui_hide OR :debug)" + @@ -62,11 +64,12 @@ public interface DaoMessage { " ORDER BY message.received DESC, message.sent DESC") DataSource.Factory pagedFolder(long folder, boolean debug); - @Query("SELECT message.*, folder.name as folderName, folder.type as folderType" + + @Query("SELECT message.*, account.name AS accountName, folder.name as folderName, folder.type as folderType" + ", 1 AS count" + ", CASE WHEN message.ui_seen THEN 0 ELSE 1 END AS unseen" + ", (SELECT COUNT(a.id) FROM attachment a WHERE a.message = message.id) AS attachments" + " FROM message" + + " LEFT JOIN account ON account.id = message.account" + " JOIN folder ON folder.id = message.folder" + " WHERE (NOT message.ui_hide OR :debug)" + " AND message.account = (SELECT m1.account FROM message m1 WHERE m1.id = :msgid)" + @@ -105,11 +108,12 @@ public interface DaoMessage { " AND folder.type <> '" + EntityFolder.OUTBOX + "'") List getMessageByThread(long account, String thread); - @Query("SELECT message.*, folder.name as folderName, folder.type as folderType" + + @Query("SELECT message.*, account.name AS accountName, folder.name as folderName, folder.type as folderType" + ", (SELECT COUNT(m1.id) FROM message m1 WHERE m1.account = message.account AND m1.thread = message.thread AND NOT m1.ui_hide) AS count" + ", (SELECT COUNT(m2.id) FROM message m2 WHERE m2.account = message.account AND m2.thread = message.thread AND NOT m2.ui_hide AND NOT m2.ui_seen) AS unseen" + ", (SELECT COUNT(a.id) FROM attachment a WHERE a.message = message.id) AS attachments" + " FROM message" + + " LEFT JOIN account ON account.id = message.account" + " JOIN folder ON folder.id = message.folder" + " WHERE message.id = :id") LiveData liveMessage(long id); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 25fe131ff2..6656549ff3 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -66,6 +66,7 @@ public class FragmentMessages extends FragmentEx { // Get arguments Bundle args = getArguments(); + long folder = (args == null ? -1 : args.getLong("folder", -1)); long thread = (args == null ? -1 : args.getLong("thread", -1)); // message ID setHasOptionsMenu(true); @@ -83,12 +84,16 @@ public class FragmentMessages extends FragmentEx { LinearLayoutManager llm = new LinearLayoutManager(getContext()); rvMessage.setLayoutManager(llm); - adapter = new AdapterMessage( - getContext(), - getViewLifecycleOwner(), - thread < 0 - ? AdapterMessage.ViewType.FOLDER - : AdapterMessage.ViewType.THREAD); + AdapterMessage.ViewType viewType; + if (thread < 0) + if (folder < 0) + viewType = AdapterMessage.ViewType.UNIFIED; + else + viewType = AdapterMessage.ViewType.FOLDER; + else + viewType = AdapterMessage.ViewType.THREAD; + + adapter = new AdapterMessage(getContext(), getViewLifecycleOwner(), viewType); rvMessage.setAdapter(adapter); fab.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/eu/faircode/email/TupleMessageEx.java b/app/src/main/java/eu/faircode/email/TupleMessageEx.java index 30181e4182..170eb16c77 100644 --- a/app/src/main/java/eu/faircode/email/TupleMessageEx.java +++ b/app/src/main/java/eu/faircode/email/TupleMessageEx.java @@ -20,6 +20,7 @@ package eu.faircode.email; */ public class TupleMessageEx extends EntityMessage { + public String accountName; public String folderName; public String folderType; public int count; @@ -31,6 +32,8 @@ public class TupleMessageEx extends EntityMessage { if (obj instanceof TupleMessageEx) { TupleMessageEx other = (TupleMessageEx) obj; return (super.equals(obj) && + (this.accountName == null ? other.accountName == null : this.accountName.equals(other.accountName)) && + this.folderName.equals(other.folderName) && this.folderType.equals(other.folderType) && this.count == other.count && this.unseen == other.unseen && diff --git a/app/src/main/res/layout/item_message.xml b/app/src/main/res/layout/item_message.xml index 1dee0efe96..6478430167 100644 --- a/app/src/main/res/layout/item_message.xml +++ b/app/src/main/res/layout/item_message.xml @@ -50,10 +50,21 @@ android:maxLines="1" android:text="Subject" android:textAppearance="@style/TextAppearance.AppCompat.Small" - app:layout_constraintEnd_toStartOf="@+id/tvCount" + app:layout_constraintEnd_toStartOf="@+id/tvFolder" app:layout_constraintStart_toEndOf="@id/ivAttachments" app:layout_constraintTop_toBottomOf="@id/tvFrom" /> + +