diff --git a/src/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java b/src/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java index c0b2521b06..bf4970b02c 100644 --- a/src/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java +++ b/src/org/thoughtcrime/securesms/registration/fragments/EnterPhoneNumberFragment.java @@ -339,13 +339,13 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment { @Override public void afterTextChanged(Editable s) { - String number = reformatText(s); + Long number = reformatText(s); if (number == null) return; RegistrationViewModel model = getModel(); - model.setNationalNumber(Long.parseLong(number)); + model.setNationalNumber(number); setCountryDisplay(model.getNumber().getCountryDisplayName()); } @@ -360,7 +360,7 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment { } } - private String reformatText(Editable s) { + private Long reformatText(Editable s) { if (countryFormatter == null) { return null; } @@ -371,17 +371,26 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment { countryFormatter.clear(); - String number = s.toString().replaceAll("[^\\d.]", ""); - String formattedNumber = null; + String formattedNumber = null; + StringBuilder justDigits = new StringBuilder(); - for (int i = 0; i < number.length(); i++) { - formattedNumber = countryFormatter.inputDigit(number.charAt(i)); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (Character.isDigit(c)) { + formattedNumber = countryFormatter.inputDigit(c); + justDigits.append(c); + } } if (formattedNumber != null && !s.toString().equals(formattedNumber)) { s.replace(0, s.length(), formattedNumber); } - return number; + + if (justDigits.length() == 0) { + return null; + } + + return Long.parseLong(justDigits.toString()); } private void setCountryFormatter(@Nullable String regionCode) {