From c8ed3a4a33f28e03fad6397d0eaee13c860479cf Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 26 Jul 2019 16:20:23 +0200 Subject: [PATCH] Display conversations in unified inbox widget --- app/src/main/java/eu/faircode/email/DaoMessage.java | 5 +++++ app/src/main/java/eu/faircode/email/ServiceSynchronize.java | 2 +- app/src/main/java/eu/faircode/email/TupleMessageWidget.java | 5 ++++- .../eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java | 6 +++++- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 3cd7929be6..ad96041caa 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -274,6 +274,8 @@ public interface DaoMessage { LiveData> liveUnseenNotify(); String widget = "SELECT message.*, account.name AS accountName" + + ", SUM(1 - message.ui_seen) AS unseen" + + ", MAX(message.received) AS dummy" + " FROM message" + " JOIN account ON account.id = message.account" + " JOIN folder ON folder.id = message.folder" + @@ -281,12 +283,15 @@ public interface DaoMessage { " AND folder.unified" + " AND message.ui_hide = 0" + " AND message.ui_snoozed IS NULL" + + " GROUP BY account.id, CASE WHEN message.thread IS NULL THEN message.id ELSE message.thread END" + " ORDER BY message.received DESC"; @Query(widget) + @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH) LiveData> liveWidgetUnified(); @Query(widget) + @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH) List getWidgetUnified(); @Query("SELECT COUNT(message.id) FROM message" + diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 8dbaa7745d..e6e3b0d6f0 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -202,7 +202,7 @@ public class ServiceSynchronize extends ServiceBase { !MessageHelper.equal(m1.from, m2.from) || !m1.received.equals(m2.received) || !Objects.equals(m1.subject, m2.subject) || - !(m1.ui_seen == m2.ui_seen) || + !(m1.unseen == m2.unseen) || !Objects.equals(m1.accountName, m2.accountName)) { changed = true; break; diff --git a/app/src/main/java/eu/faircode/email/TupleMessageWidget.java b/app/src/main/java/eu/faircode/email/TupleMessageWidget.java index 3f5489f995..a053f27be2 100644 --- a/app/src/main/java/eu/faircode/email/TupleMessageWidget.java +++ b/app/src/main/java/eu/faircode/email/TupleMessageWidget.java @@ -23,12 +23,15 @@ import java.util.Objects; public class TupleMessageWidget extends EntityMessage { public String accountName; + public int unseen; @Override public boolean equals(Object obj) { if (obj instanceof TupleMessageEx) { TupleMessageEx other = (TupleMessageEx) obj; - return (super.equals(obj) && Objects.equals(this.accountName, other.accountName)); + return (super.equals(obj) && + Objects.equals(this.accountName, other.accountName) && + this.unseen == other.unseen); } return false; } diff --git a/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java b/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java index e548064487..fb865ee059 100644 --- a/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java +++ b/app/src/main/java/eu/faircode/email/WidgetUnifiedRemoteViewsFactory.java @@ -81,7 +81,11 @@ public class WidgetUnifiedRemoteViewsFactory implements RemoteViewsService.Remot thread.putExtra("id", message.id); views.setOnClickFillInIntent(R.id.llMessage, thread); - SpannableString from = new SpannableString(MessageHelper.formatAddressesShort(message.from)); + String froms = MessageHelper.formatAddressesShort(message.from); + if (message.unseen > 1) + froms = context.getString(R.string.title_name_count, froms, Integer.toString(message.unseen)); + + SpannableString from = new SpannableString(froms); SpannableString time = new SpannableString(Helper.getRelativeTimeSpanString(context, message.received)); SpannableString subject = new SpannableString(TextUtils.isEmpty(message.subject) ? "" : message.subject); SpannableString account = new SpannableString(TextUtils.isEmpty(message.accountName) ? "" : message.accountName);