From a3aed967576043d93677ecb5bcd223dc758cfbe2 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Sun, 7 Jun 2020 23:04:41 -0300 Subject: [PATCH] Sort contacts without names after contacts with names. --- .../thoughtcrime/securesms/groups/LiveGroup.java | 14 ++++++++------ .../securesms/recipients/Recipient.java | 9 +++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java index 4159339130..c7385f0e17 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java @@ -27,12 +27,14 @@ import java.util.List; public final class LiveGroup { - private static final Comparator LOCAL_FIRST = (m1, m2) -> Boolean.compare(m2.getMember().isLocalNumber(), m1.getMember().isLocalNumber()); - private static final Comparator ADMIN_FIRST = (m1, m2) -> Boolean.compare(m2.isAdmin(), m1.isAdmin()); - private static final Comparator ALPHABETICAL = (m1, m2) -> m1.getMember().getDisplayName(ApplicationDependencies.getApplication()).compareToIgnoreCase(m2.getMember().getDisplayName(ApplicationDependencies.getApplication())); - private static final Comparator MEMBER_ORDER = ComparatorCompat.chain(LOCAL_FIRST) - .thenComparing(ADMIN_FIRST) - .thenComparing(ALPHABETICAL); + private static final Comparator LOCAL_FIRST = (m1, m2) -> Boolean.compare(m2.getMember().isLocalNumber(), m1.getMember().isLocalNumber()); + private static final Comparator ADMIN_FIRST = (m1, m2) -> Boolean.compare(m2.isAdmin(), m1.isAdmin()); + private static final Comparator HAS_DISPLAY_NAME = (m1, m2) -> Boolean.compare(m2.getMember().hasAUserSetDisplayName(ApplicationDependencies.getApplication()), m1.getMember().hasAUserSetDisplayName(ApplicationDependencies.getApplication())); + private static final Comparator ALPHABETICAL = (m1, m2) -> m1.getMember().getDisplayName(ApplicationDependencies.getApplication()).compareToIgnoreCase(m2.getMember().getDisplayName(ApplicationDependencies.getApplication())); + private static final Comparator MEMBER_ORDER = ComparatorCompat.chain(LOCAL_FIRST) + .thenComparing(ADMIN_FIRST) + .thenComparing(HAS_DISPLAY_NAME) + .thenComparing(ALPHABETICAL); private final GroupDatabase groupDatabase; private final LiveData recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index 74039413ec..fddb0084a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -418,6 +418,15 @@ public class Recipient { else return Optional.fromNullable(getName(context)).or(getSmsAddress()).or(""); } + /** + * False iff it {@link #getDisplayName} would fall back to e164, email or unknown. + */ + public boolean hasAUserSetDisplayName(@NonNull Context context) { + return !TextUtils.isEmpty(getName(context)) || + !TextUtils.isEmpty(getProfileName().toString()) || + !TextUtils.isEmpty(getDisplayUsername()); + } + public @NonNull String getDisplayName(@NonNull Context context) { return Util.getFirstNonEmpty(getName(context), getProfileName().toString(),