Improved auto identity selection

master
M66B 2 months ago
parent fb977219d7
commit 1f318d1459

@ -356,7 +356,9 @@ public interface DaoMessage {
@Query("SELECT identity, COUNT(*) AS count" + @Query("SELECT identity, COUNT(*) AS count" +
" FROM message" + " FROM message" +
" WHERE folder = :folder" + " WHERE folder = :folder" +
" GROUP BY identity") " AND NOT ui_hide" +
" GROUP BY identity" +
" ORDER BY COUNT(*) DESC")
List<TupleIdentityCount> getIdentitiesByFolder(long folder); List<TupleIdentityCount> getIdentitiesByFolder(long folder);
@Transaction @Transaction

@ -50,6 +50,7 @@ import java.util.List;
public class FragmentDialogIdentity extends FragmentDialogBase { public class FragmentDialogIdentity extends FragmentDialogBase {
private static final int MIN_IDENTITY_MESSAGES = 20; private static final int MIN_IDENTITY_MESSAGES = 20;
private static final float MIN_IDENTITY_THRESHOLD = 0.66f; // percentage
@NonNull @NonNull
@Override @Override
@ -236,10 +237,23 @@ public class FragmentDialogIdentity extends FragmentDialogBase {
long folder = args.getLong("folder"); long folder = args.getLong("folder");
if (folder >= 0) { if (folder >= 0) {
List<TupleIdentityCount> counts = db.message().getIdentitiesByFolder(folder); List<TupleIdentityCount> counts = db.message().getIdentitiesByFolder(folder);
if (counts != null && if (counts != null) {
counts.size() == 1 && int total = 0;
counts.get(0).count >= MIN_IDENTITY_MESSAGES) TupleIdentityCount first = null;
args.putLong("identity", counts.get(0).identity); 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); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

@ -20,6 +20,6 @@ package eu.faircode.email;
*/ */
public class TupleIdentityCount { public class TupleIdentityCount {
public long identity; public Long identity;
public int count; public int count;
} }

Loading…
Cancel
Save