From a8dd81eace839cd0d40887f4ecb06593edaa03a0 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Wed, 9 Dec 2020 15:44:45 -0400 Subject: [PATCH] Return optional for telephone number region name for the unknown case to be localized. --- .../database/loaders/CountryListLoader.java | 2 +- .../delete/DeleteAccountRepository.java | 4 ++-- .../viewmodel/NumberViewState.java | 4 ++-- .../api/util/PhoneNumberFormatter.java | 21 ++++++++++++++++--- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java index 40f66cafaa..f55a7579e1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java @@ -29,7 +29,7 @@ public final class CountryListLoader extends AsyncTaskLoader data = new HashMap<>(2); - data.put("country_name", PhoneNumberFormatter.getRegionDisplayName(region)); + data.put("country_name", PhoneNumberFormatter.getRegionDisplayNameLegacy(region)); data.put("country_code", "+" +PhoneNumberUtil.getInstance().getCountryCodeForRegion(region)); results.add(data); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java index a8c9044876..663dbfb1e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java @@ -29,7 +29,7 @@ class DeleteAccountRepository { } @NonNull String getRegionDisplayName(@NonNull String region) { - return PhoneNumberFormatter.getRegionDisplayName(region); + return PhoneNumberFormatter.getRegionDisplayName(region).or(""); } int getRegionCountryCode(@NonNull String region) { @@ -73,7 +73,7 @@ class DeleteAccountRepository { } private static @NonNull Country getCountryForRegion(@NonNull String region) { - return new Country(PhoneNumberFormatter.getRegionDisplayName(region), + return new Country(PhoneNumberFormatter.getRegionDisplayName(region).or(""), PhoneNumberUtil.getInstance().getCountryCodeForRegion(region), region); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/NumberViewState.java b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/NumberViewState.java index 2eed200e2a..df7667aee5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/NumberViewState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/NumberViewState.java @@ -58,7 +58,7 @@ public final class NumberViewState implements Parcelable { } String regionCode = util.getRegionCodeForCountryCode(countryCode); - return PhoneNumberFormatter.getRegionDisplayName(regionCode); + return PhoneNumberFormatter.getRegionDisplayNameLegacy(regionCode); } /** @@ -70,7 +70,7 @@ public final class NumberViewState implements Parcelable { String regionCode = util.getRegionCodeForNumber(phoneNumber); if (regionCode != null) { - return PhoneNumberFormatter.getRegionDisplayName(regionCode); + return PhoneNumberFormatter.getRegionDisplayNameLegacy(regionCode); } } catch (NumberParseException e) { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/util/PhoneNumberFormatter.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/util/PhoneNumberFormatter.java index a775b0a3e2..fa4ddfc826 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/util/PhoneNumberFormatter.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/util/PhoneNumberFormatter.java @@ -12,6 +12,8 @@ import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; import org.whispersystems.libsignal.logging.Log; +import org.whispersystems.libsignal.util.guava.Optional; +import org.whispersystems.signalservice.internal.util.Util; import java.util.Locale; import java.util.regex.Pattern; @@ -113,9 +115,22 @@ public class PhoneNumberFormatter { } } - public static String getRegionDisplayName(String regionCode) { - return (regionCode == null || regionCode.equals("ZZ") || regionCode.equals(PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY)) - ? "Unknown country" : new Locale("", regionCode).getDisplayCountry(Locale.getDefault()); + /** + * @deprecated Use {@link #getRegionDisplayName} as it can be localized when the region is not found. + */ + @Deprecated + public static String getRegionDisplayNameLegacy(String regionCode) { + return getRegionDisplayName(regionCode).or("Unknown country"); + } + + public static Optional getRegionDisplayName(String regionCode) { + if (regionCode != null && !regionCode.equals("ZZ") && !regionCode.equals(PhoneNumberUtil.REGION_CODE_FOR_NON_GEO_ENTITY)) { + String displayCountry = new Locale("", regionCode).getDisplayCountry(Locale.getDefault()); + if (!Util.isEmpty(displayCountry)) { + return Optional.of(displayCountry); + } + } + return Optional.absent(); } public static String formatE164(String countryCode, String number) {