diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java index 0fc5751441..3a464785f2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java @@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.components.emoji.EmojiStrings; import org.thoughtcrime.securesms.contactshare.Contact.Email; import org.thoughtcrime.securesms.contactshare.Contact.Phone; import org.thoughtcrime.securesms.contactshare.Contact.PostalAddress; +import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; @@ -35,6 +36,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; public final class ContactUtil { @@ -136,7 +138,13 @@ public final class ContactUtil { } public static List getRecipients(@NonNull Context context, @NonNull Contact contact) { - return Stream.of(contact.getPhoneNumbers()).map(phone -> Recipient.external(context, phone.getNumber())).map(Recipient::getId).toList(); + return contact + .getPhoneNumbers() + .stream() + .map(phone -> PhoneNumberFormatter.get(context).formatOrNull(phone.getNumber())) + .filter(number -> number != null) + .map(phone -> SignalDatabase.recipients().getOrInsertFromE164(phone)) + .collect(Collectors.toList()); } @WorkerThread diff --git a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java index 013e101d44..2fd2d7d3c0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java @@ -29,6 +29,8 @@ public class PhoneNumberFormatter { private static final String TAG = Log.tag(PhoneNumberFormatter.class); + private static final String UNKNOWN_NUMBER = "Unknown"; + private static final Set EXCLUDE_FROM_MANUAL_SHORTCODE_4 = SetUtil.newHashSet("AC", "NC", "NU", "TK"); private static final Set MANUAL_SHORTCODE_6 = SetUtil.newHashSet("DE", "FI", "GB", "SK"); private static final Set NATIONAL_FORMAT_COUNTRY_CODES = SetUtil.newHashSet(1 /*US*/, 44 /*UK*/); @@ -105,9 +107,17 @@ public class PhoneNumberFormatter { return localNumber != null && localNumber.isPresent() ? localNumber.get().countryCode : 0; } + public @Nullable String formatOrNull(@Nullable String number) { + String formatted = format(number); + if (formatted.equals(UNKNOWN_NUMBER)) { + return null; + } + return formatted; + } + public @NonNull String format(@Nullable String number) { - if (number == null) return "Unknown"; + if (number == null) return UNKNOWN_NUMBER; if (GroupId.isEncodedGroup(number)) return number; if (ALPHA_PATTERN.matcher(number).find()) return number.trim();