diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 37f9e00c0d..a19a2de8b3 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -356,7 +356,9 @@ public interface DaoMessage { @Query("SELECT identity, COUNT(*) AS count" + " FROM message" + " WHERE folder = :folder" + - " GROUP BY identity") + " AND NOT ui_hide" + + " GROUP BY identity" + + " ORDER BY COUNT(*) DESC") List getIdentitiesByFolder(long folder); @Transaction diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogIdentity.java b/app/src/main/java/eu/faircode/email/FragmentDialogIdentity.java index 0255519faf..13b3a7f279 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogIdentity.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogIdentity.java @@ -50,6 +50,7 @@ import java.util.List; public class FragmentDialogIdentity extends FragmentDialogBase { private static final int MIN_IDENTITY_MESSAGES = 20; + private static final float MIN_IDENTITY_THRESHOLD = 0.66f; // percentage @NonNull @Override @@ -236,10 +237,23 @@ public class FragmentDialogIdentity extends FragmentDialogBase { long folder = args.getLong("folder"); if (folder >= 0) { List counts = db.message().getIdentitiesByFolder(folder); - if (counts != null && - counts.size() == 1 && - counts.get(0).count >= MIN_IDENTITY_MESSAGES) - args.putLong("identity", counts.get(0).identity); + if (counts != null) { + int total = 0; + TupleIdentityCount first = null; + for (TupleIdentityCount entry : counts) { + total += entry.count; + if (first == null && entry.identity != null) + first = entry; + Log.i("Dominant identity=" + entry.identity + " count=" + entry.count); + } + Log.i("Dominant " + counts.size() + " identities " + total + " messages"); + if (first != null && first.count >= MIN_IDENTITY_MESSAGES) { + float percentage = first.count / (float) total; + Log.i("Dominant identity percentage=" + percentage); + if (percentage > MIN_IDENTITY_THRESHOLD) + args.putLong("identity", first.identity); + } + } } SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); diff --git a/app/src/main/java/eu/faircode/email/TupleIdentityCount.java b/app/src/main/java/eu/faircode/email/TupleIdentityCount.java index 6008c337dd..a634150fb4 100644 --- a/app/src/main/java/eu/faircode/email/TupleIdentityCount.java +++ b/app/src/main/java/eu/faircode/email/TupleIdentityCount.java @@ -20,6 +20,6 @@ package eu.faircode.email; */ public class TupleIdentityCount { - public long identity; + public Long identity; public int count; }