Improve and centralize e164 utils.

This commit is contained in:
Greyson Parrelli
2025-03-03 10:42:21 -05:00
parent 0fdcc1c027
commit 9c473fb570
99 changed files with 748 additions and 1826 deletions

View File

@@ -6,7 +6,7 @@
package org.thoughtcrime.securesms.registration.ui.countrycode
import com.google.i18n.phonenumbers.PhoneNumberUtil
import org.whispersystems.signalservice.api.util.PhoneNumberFormatter
import org.signal.core.util.E164Util
import java.text.Collator
import java.util.Locale
@@ -25,7 +25,7 @@ object CountryUtils {
return PhoneNumberUtil.getInstance().supportedRegions
.map { region ->
Country(
name = PhoneNumberFormatter.getRegionDisplayName(region).orElse(""),
name = E164Util.getRegionDisplayName(region).orElse(""),
emoji = countryToEmoji(region),
countryCode = PhoneNumberUtil.getInstance().getCountryCodeForRegion(region),
regionCode = region
@@ -39,7 +39,7 @@ object CountryUtils {
return COMMON_COUNTRIES
.map { region ->
Country(
name = PhoneNumberFormatter.getRegionDisplayName(region).orElse(""),
name = E164Util.getRegionDisplayName(region).orElse(""),
emoji = countryToEmoji(region),
countryCode = PhoneNumberUtil.getInstance().getCountryCodeForRegion(region),
regionCode = region

View File

@@ -45,7 +45,6 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.ViewBinderDelegate
import org.thoughtcrime.securesms.databinding.FragmentRegistrationEnterPhoneNumberBinding
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
import org.thoughtcrime.securesms.registration.data.RegistrationRepository
import org.thoughtcrime.securesms.registration.data.network.Challenge
import org.thoughtcrime.securesms.registration.data.network.RegisterAccountResult
@@ -65,6 +64,7 @@ import org.thoughtcrime.securesms.registration.util.CountryPrefix
import org.thoughtcrime.securesms.util.CommunicationActions
import org.thoughtcrime.securesms.util.Dialogs
import org.thoughtcrime.securesms.util.PlayServicesUtil
import org.thoughtcrime.securesms.util.SignalE164Util
import org.thoughtcrime.securesms.util.SpanUtil
import org.thoughtcrime.securesms.util.SupportEmailUtil
import org.thoughtcrime.securesms.util.ViewUtil
@@ -619,7 +619,7 @@ class EnterPhoneNumberFragment : LoggingFragment(R.layout.fragment_registration_
}
val message: CharSequence = SpannableStringBuilder().apply {
append(SpanUtil.bold(PhoneNumberFormatter.prettyPrint(phoneNumber.toE164())))
append(SpanUtil.bold(SignalE164Util.prettyPrint(phoneNumber.toE164())))
if (!canSkipSms) {
append("\n\n")
append(getString(R.string.RegistrationActivity_a_verification_code_will_be_sent_to_this_number))

View File

@@ -13,13 +13,13 @@ import com.google.i18n.phonenumbers.PhoneNumberUtil
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import org.signal.core.util.E164Util
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.registration.data.RegistrationRepository
import org.thoughtcrime.securesms.registration.ui.countrycode.Country
import org.thoughtcrime.securesms.registration.ui.countrycode.CountryUtils
import org.thoughtcrime.securesms.registration.util.CountryPrefix
import org.thoughtcrime.securesms.util.Util
import org.whispersystems.signalservice.api.util.PhoneNumberFormatter
/**
* ViewModel for the phone number entry screen.
@@ -74,7 +74,7 @@ class EnterPhoneNumberViewModel : ViewModel() {
countryPrefixIndex = prefixIndex,
phoneNumberRegionCode = regionCode,
country = existingCountry ?: Country(
name = PhoneNumberFormatter.getRegionDisplayName(regionCode).orElse(""),
name = E164Util.getRegionDisplayName(regionCode).orElse(""),
emoji = CountryUtils.countryToEmoji(regionCode),
countryCode = countryCode,
regionCode = regionCode
@@ -122,7 +122,7 @@ class EnterPhoneNumberViewModel : ViewModel() {
val regionCode = supportedCountryPrefixes[matchingIndex].regionCode
val matchedCountry = Country(
name = PhoneNumberFormatter.getRegionDisplayName(regionCode).orElse(""),
name = E164Util.getRegionDisplayName(regionCode).orElse(""),
emoji = CountryUtils.countryToEmoji(regionCode),
countryCode = digits,
regionCode = regionCode

View File

@@ -19,12 +19,12 @@ import androidx.annotation.Nullable;
import com.google.i18n.phonenumbers.AsYouTypeFormatter;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import org.signal.core.util.E164Util;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.LabeledEditText;
import org.thoughtcrime.securesms.registration.ui.countrycode.Country;
import org.thoughtcrime.securesms.registration.ui.countrycode.CountryUtils;
import org.thoughtcrime.securesms.registration.viewmodel.NumberViewState;
import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
/**
* Handle the logic and formatting of phone number input specifically for change number flows.
@@ -248,7 +248,7 @@ public final class ChangeNumberInputController {
}
if (!isUpdating) {
Country country = new Country(CountryUtils.countryToEmoji(regionCode), PhoneNumberFormatter.getRegionDisplayName(regionCode).orElse(""), countryCode, regionCode);
Country country = new Country(CountryUtils.countryToEmoji(regionCode), E164Util.getRegionDisplayName(regionCode).orElse(""), countryCode, regionCode);
callbacks.setCountry(country);
}
}

View File

@@ -10,7 +10,7 @@ import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import org.whispersystems.signalservice.api.util.PhoneNumberFormatter;
import org.signal.core.util.E164Util;
import java.util.Objects;
@@ -42,7 +42,7 @@ public final class NumberViewState implements Parcelable {
return nationalNumber;
}
public String getCountryDisplayName() {
public @Nullable String getCountryDisplayName() {
if (selectedCountryName != null) {
return selectedCountryName;
}
@@ -58,7 +58,7 @@ public final class NumberViewState implements Parcelable {
}
String regionCode = util.getRegionCodeForCountryCode(countryCode);
return PhoneNumberFormatter.getRegionDisplayNameLegacy(regionCode);
return E164Util.getRegionDisplayName(regionCode).orElse(null);
}
/**
@@ -70,7 +70,7 @@ public final class NumberViewState implements Parcelable {
String regionCode = util.getRegionCodeForNumber(phoneNumber);
if (regionCode != null) {
return PhoneNumberFormatter.getRegionDisplayNameLegacy(regionCode);
return E164Util.getRegionDisplayName(regionCode).orElse(null);
}
} catch (NumberParseException e) {
@@ -80,7 +80,7 @@ public final class NumberViewState implements Parcelable {
}
public boolean isValid() {
return PhoneNumberFormatter.isValidNumber(getE164Number(), Integer.toString(getCountryCode()));
return E164Util.isValidNumberForRegistration(Integer.toString(getCountryCode()), getE164Number());
}
@Override
@@ -123,7 +123,7 @@ public final class NumberViewState implements Parcelable {
}
private static String getConfiguredE164Number(int countryCode, String number) {
return PhoneNumberFormatter.formatE164(String.valueOf(countryCode), number);
return E164Util.formatAsE164WithCountryCodeForDisplay(String.valueOf(countryCode), number);
}
private static Phonenumber.PhoneNumber getPhoneNumber(@NonNull PhoneNumberUtil util, @NonNull String e164Number)