From ed92a999f0a10394dcd3cd03dfda7891ec5df49a Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 22 Jul 2019 14:34:06 +0200 Subject: [PATCH] Show number of unseen messages in unified system folders --- .../java/eu/faircode/email/ActivityView.java | 14 ++--- .../eu/faircode/email/AdapterNavUnified.java | 56 ++++++++++++------- .../java/eu/faircode/email/DaoFolder.java | 6 +- .../faircode/email/EntityFolderUnified.java | 25 +++++++++ 4 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/EntityFolderUnified.java diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 75d67871f5..35fc7bf4ce 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -387,15 +387,15 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } }); - db.folder().liveUnifiedTypes().observe(this, new Observer>() { + db.folder().liveUnified().observe(this, new Observer>() { @Override - public void onChanged(List types) { - if (types == null) - types = new ArrayList<>(); - ivExpanderUnified.setVisibility(types.size() > 0 ? View.VISIBLE : View.GONE); + public void onChanged(List folders) { + if (folders == null) + folders = new ArrayList<>(); + ivExpanderUnified.setVisibility(folders.size() > 0 ? View.VISIBLE : View.GONE); boolean unified_system = prefs.getBoolean("unified_system", false); - grpUnified.setVisibility(unified_system && types.size() > 0 ? View.VISIBLE : View.GONE); - uadapter.set(types); + grpUnified.setVisibility(unified_system && folders.size() > 0 ? View.VISIBLE : View.GONE); + uadapter.set(folders); } }); diff --git a/app/src/main/java/eu/faircode/email/AdapterNavUnified.java b/app/src/main/java/eu/faircode/email/AdapterNavUnified.java index b0dd3f6de1..75be0a2c70 100644 --- a/app/src/main/java/eu/faircode/email/AdapterNavUnified.java +++ b/app/src/main/java/eu/faircode/email/AdapterNavUnified.java @@ -34,6 +34,7 @@ import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListUpdateCallback; import androidx.recyclerview.widget.RecyclerView; +import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -44,7 +45,9 @@ public class AdapterNavUnified extends RecyclerView.Adapter items = new ArrayList<>(); + private List items = new ArrayList<>(); + + private NumberFormat NF = NumberFormat.getNumberInstance(); public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { private View view; @@ -71,9 +74,18 @@ public class AdapterNavUnified extends RecyclerView.Adapter types) { + public void set(@NonNull List types) { Log.i("Set nav unified=" + types.size()); - Collections.sort(types, new Comparator() { + Collections.sort(types, new Comparator() { @Override - public int compare(String t1, String t2) { - int i1 = EntityFolder.FOLDER_SORT_ORDER.indexOf(t1); - int i2 = EntityFolder.FOLDER_SORT_ORDER.indexOf(t2); + public int compare(EntityFolderUnified f1, EntityFolderUnified f2) { + int i1 = EntityFolder.FOLDER_SORT_ORDER.indexOf(f1.type); + int i2 = EntityFolder.FOLDER_SORT_ORDER.indexOf(f2.type); return Integer.compare(i1, i2); } }); @@ -142,10 +154,10 @@ public class AdapterNavUnified extends RecyclerView.Adapter prev = new ArrayList<>(); - private List next = new ArrayList<>(); + private List prev = new ArrayList<>(); + private List next = new ArrayList<>(); - DiffCallback(List prev, List next) { + DiffCallback(List prev, List next) { this.prev.addAll(prev); this.next.addAll(next); } @@ -162,14 +174,16 @@ public class AdapterNavUnified extends RecyclerView.Adapter '" + EntityFolder.USER + "'") List getSystemFolders(long account); - @Query("SELECT folder.type" + + @Query("SELECT folder.type," + + " SUM(CASE WHEN NOT message.ui_seen AND message.ui_hide = 0 THEN 1 ELSE 0 END) AS unseen" + " FROM folder" + " JOIN account ON account.id = folder.account" + + " LEFT JOIN message ON message.folder = folder.id" + " WHERE account.synchronize" + " AND folder.type <> '" + EntityFolder.SYSTEM + "'" + " AND folder.type <> '" + EntityFolder.USER + "'" + " GROUP BY folder.type" + " HAVING COUNT(folder.id) > 1") - LiveData> liveUnifiedTypes(); + LiveData> liveUnified(); @Query("SELECT * FROM folder WHERE id = :id") EntityFolder getFolder(Long id); diff --git a/app/src/main/java/eu/faircode/email/EntityFolderUnified.java b/app/src/main/java/eu/faircode/email/EntityFolderUnified.java new file mode 100644 index 0000000000..aa755259e6 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/EntityFolderUnified.java @@ -0,0 +1,25 @@ +package eu.faircode.email; + +/* + This file is part of FairEmail. + + FairEmail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + FairEmail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FairEmail. If not, see . + + Copyright 2018-2019 by Marcel Bokhorst (M66B) +*/ + +public class EntityFolderUnified { + public String type; + public long unseen; +}