Prevent stripping of leading zeros in national numbers.

fork-5.53.8
Alan Evans 2021-01-19 17:06:49 -04:00 zatwierdzone przez GitHub
rodzic 848ead5e78
commit 893749fcab
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 36 dodań i 19 usunięć

Wyświetl plik

@ -293,7 +293,7 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment {
private void initNumber(@NonNull NumberViewState numberViewState) {
int countryCode = numberViewState.getCountryCode();
long number = numberViewState.getNationalNumber();
String number = numberViewState.getNationalNumber();
String regionDisplayName = numberViewState.getCountryDisplayName();
this.countryCode.setText(String.valueOf(countryCode));
@ -303,7 +303,7 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment {
String regionCode = PhoneNumberUtil.getInstance().getRegionCodeForCountryCode(countryCode);
setCountryFormatter(regionCode);
if (number != 0) {
if (!TextUtils.isEmpty(number)) {
this.number.setText(String.valueOf(number));
}
}
@ -357,7 +357,7 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment {
@Override
public void afterTextChanged(Editable s) {
Long number = reformatText(s);
String number = reformatText(s);
if (number == null) return;
@ -378,7 +378,7 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment {
}
}
private Long reformatText(Editable s) {
private String reformatText(Editable s) {
if (countryFormatter == null) {
return null;
}
@ -408,7 +408,7 @@ public final class EnterPhoneNumberFragment extends BaseRegistrationFragment {
return null;
}
return Long.parseLong(justDigits.toString());
return justDigits.toString();
}
private void setCountryFormatter(@Nullable String regionCode) {

Wyświetl plik

@ -34,6 +34,9 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.Arrays;
import java.util.Locale;
public final class WelcomeFragment extends BaseRegistrationFragment {
private static final String TAG = Log.tag(WelcomeFragment.class);
@ -186,15 +189,29 @@ public final class WelcomeFragment extends BaseRegistrationFragment {
if (Permissions.hasAll(requireContext(), Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS)) {
localNumber = Util.getDeviceNumber(requireContext());
} else {
Log.i(TAG, "No phone permission");
}
if (localNumber.isPresent()) {
getModel().onNumberDetected(localNumber.get().getCountryCode(), localNumber.get().getNationalNumber());
Log.i(TAG, "Phone number detected");
Phonenumber.PhoneNumber phoneNumber = localNumber.get();
String nationalNumber = String.valueOf(phoneNumber.getNationalNumber());
if (phoneNumber.getNumberOfLeadingZeros() != 0) {
char[] value = new char[phoneNumber.getNumberOfLeadingZeros()];
Arrays.fill(value, '0');
nationalNumber = new String(value) + nationalNumber;
Log.i(TAG, String.format(Locale.US, "Padded national number with %d zeros", phoneNumber.getNumberOfLeadingZeros()));
}
getModel().onNumberDetected(phoneNumber.getCountryCode(), nationalNumber);
} else {
Log.i(TAG, "No number detected");
Optional<String> simCountryIso = Util.getSimCountryIso(requireContext());
if (simCountryIso.isPresent() && !TextUtils.isEmpty(simCountryIso.get())) {
getModel().onNumberDetected(PhoneNumberUtil.getInstance().getCountryCodeForRegion(simCountryIso.get()), 0);
getModel().onNumberDetected(PhoneNumberUtil.getInstance().getCountryCodeForRegion(simCountryIso.get()), "");
}
}
}

Wyświetl plik

@ -20,7 +20,7 @@ public final class NumberViewState implements Parcelable {
private final String selectedCountryName;
private final int countryCode;
private final long nationalNumber;
private final String nationalNumber;
private NumberViewState(Builder builder) {
this.selectedCountryName = builder.countryDisplayName;
@ -38,7 +38,7 @@ public final class NumberViewState implements Parcelable {
return countryCode;
}
public long getNationalNumber() {
public String getNationalNumber() {
return nationalNumber;
}
@ -87,7 +87,7 @@ public final class NumberViewState implements Parcelable {
public int hashCode() {
int hash = countryCode;
hash *= 31;
hash += (int) (nationalNumber ^ (nationalNumber >>> 32));
hash += nationalNumber != null ? nationalNumber.hashCode() : 0;
hash *= 31;
hash += selectedCountryName != null ? selectedCountryName.hashCode() : 0;
return hash;
@ -101,7 +101,7 @@ public final class NumberViewState implements Parcelable {
NumberViewState other = (NumberViewState) obj;
return other.countryCode == countryCode &&
other.nationalNumber == nationalNumber &&
Objects.equals(other.nationalNumber, nationalNumber) &&
Objects.equals(other.selectedCountryName, selectedCountryName);
}
@ -122,8 +122,8 @@ public final class NumberViewState implements Parcelable {
}
}
private static String getConfiguredE164Number(int countryCode, long number) {
return PhoneNumberFormatter.formatE164(String.valueOf(countryCode), String.valueOf(number));
private static String getConfiguredE164Number(int countryCode, String number) {
return PhoneNumberFormatter.formatE164(String.valueOf(countryCode), number);
}
private static Phonenumber.PhoneNumber getPhoneNumber(@NonNull PhoneNumberUtil util, @NonNull String e164Number)
@ -135,7 +135,7 @@ public final class NumberViewState implements Parcelable {
public static class Builder {
private String countryDisplayName;
private int countryCode;
private long nationalNumber;
private String nationalNumber;
public Builder countryCode(int countryCode) {
this.countryCode = countryCode;
@ -147,7 +147,7 @@ public final class NumberViewState implements Parcelable {
return this;
}
public Builder nationalNumber(long nationalNumber) {
public Builder nationalNumber(String nationalNumber) {
this.nationalNumber = nationalNumber;
return this;
}
@ -166,7 +166,7 @@ public final class NumberViewState implements Parcelable {
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(selectedCountryName);
parcel.writeInt(countryCode);
parcel.writeLong(nationalNumber);
parcel.writeString(nationalNumber);
}
public static final Creator<NumberViewState> CREATOR = new Creator<NumberViewState>() {
@ -174,7 +174,7 @@ public final class NumberViewState implements Parcelable {
public NumberViewState createFromParcel(Parcel in) {
return new Builder().selectedCountryDisplayName(in.readString())
.countryCode(in.readInt())
.nationalNumber(in.readLong())
.nationalNumber(in.readString())
.build();
}

Wyświetl plik

@ -95,7 +95,7 @@ public final class RegistrationViewModel extends ViewModel {
.countryCode(countryCode).build());
}
public void setNationalNumber(long number) {
public void setNationalNumber(String number) {
NumberViewState numberViewState = getNumber().toBuilder().nationalNumber(number).build();
setViewState(numberViewState);
}
@ -111,7 +111,7 @@ public final class RegistrationViewModel extends ViewModel {
textCodeEntered.setValue(code);
}
public void onNumberDetected(int countryCode, long nationalNumber) {
public void onNumberDetected(int countryCode, String nationalNumber) {
setViewState(getNumber().toBuilder()
.countryCode(countryCode)
.nationalNumber(nationalNumber)