kopia lustrzana https://github.com/ryukoposting/Signal-Android
Prevent stripping of leading zeros in national numbers.
rodzic
848ead5e78
commit
893749fcab
|
@ -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) {
|
||||
|
|
|
@ -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()), "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue