mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-22 12:08:34 +00:00
Fix crash when reading some contact cards.
This commit is contained in:
committed by
Nicholas Tinsley
parent
c4ba579310
commit
e263d7da73
@@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.components.emoji.EmojiStrings;
|
|||||||
import org.thoughtcrime.securesms.contactshare.Contact.Email;
|
import org.thoughtcrime.securesms.contactshare.Contact.Email;
|
||||||
import org.thoughtcrime.securesms.contactshare.Contact.Phone;
|
import org.thoughtcrime.securesms.contactshare.Contact.Phone;
|
||||||
import org.thoughtcrime.securesms.contactshare.Contact.PostalAddress;
|
import org.thoughtcrime.securesms.contactshare.Contact.PostalAddress;
|
||||||
|
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||||
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter;
|
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
@@ -35,6 +36,7 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public final class ContactUtil {
|
public final class ContactUtil {
|
||||||
|
|
||||||
@@ -136,7 +138,13 @@ public final class ContactUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<RecipientId> getRecipients(@NonNull Context context, @NonNull Contact contact) {
|
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
|
@WorkerThread
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ public class PhoneNumberFormatter {
|
|||||||
|
|
||||||
private static final String TAG = Log.tag(PhoneNumberFormatter.class);
|
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> 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<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*/);
|
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;
|
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) {
|
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 (GroupId.isEncodedGroup(number)) return number;
|
||||||
if (ALPHA_PATTERN.matcher(number).find()) return number.trim();
|
if (ALPHA_PATTERN.matcher(number).find()) return number.trim();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user