Fix crash when reading some contact cards.
This commit is contained in:
parent
c4ba579310
commit
e263d7da73
2 changed files with 20 additions and 2 deletions
|
@ -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<RecipientId> 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
|
||||
|
|
|
@ -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<String> EXCLUDE_FROM_MANUAL_SHORTCODE_4 = SetUtil.newHashSet("AC", "NC", "NU", "TK");
|
||||
private static final Set<String> MANUAL_SHORTCODE_6 = SetUtil.newHashSet("DE", "FI", "GB", "SK");
|
||||
private static final Set<Integer> 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();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue