Skip to content

Commit e579d56

Browse files
committed
Merge branch 'release/9.0.28'
2 parents 51b8fc8 + e01a247 commit e579d56

15 files changed

Lines changed: 23 additions & 30 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ repositories {
1919
}
2020
2121
dependencies {
22-
implementation 'io.michaelrocks:libphonenumber-android:9.0.27'
22+
implementation 'io.michaelrocks:libphonenumber-android:9.0.28'
2323
}
2424
```
2525

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "io.michaelrocks"
9-
version = "9.0.27"
9+
version = "9.0.28"
1010

1111
tasks.register<Delete>("clean") {
1212
delete(rootProject.layout.buildDirectory)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

library/src/main/java/io/michaelrocks/libphonenumber/android/PhoneNumberUtil.java

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,7 +1687,8 @@ public String formatOutOfCountryCallingNumber(PhoneNumber number,
16871687
* @return the formatted phone number in its original number format
16881688
*/
16891689
public String formatInOriginalFormat(PhoneNumber number, String regionCallingFrom) {
1690-
if (number.hasRawInput() && !hasFormattingPatternForNumber(number)) {
1690+
NumberFormat formatRule = chooseFormattingPatternForNumber(number);
1691+
if (number.hasRawInput() && formatRule == null) {
16911692
// We check if we have the formatting pattern because without that, we might format the number
16921693
// as a group without national prefix.
16931694
return number.getRawInput();
@@ -1727,12 +1728,6 @@ public String formatInOriginalFormat(PhoneNumber number, String regionCallingFro
17271728
formattedNumber = nationalFormat;
17281729
break;
17291730
}
1730-
// Metadata cannot be null here because getNddPrefixForRegion() (above) returns null if
1731-
// there is no metadata for the region.
1732-
PhoneMetadata metadata = getMetadataForRegion(regionCode);
1733-
String nationalNumber = getNationalSignificantNumber(number);
1734-
NumberFormat formatRule =
1735-
chooseFormattingPatternForNumber(metadata.getNumberFormatList(), nationalNumber);
17361731
// The format rule could still be null here if the national number was 0 and there was no
17371732
// raw input (this should not be possible for numbers generated by the phonenumber library
17381733
// as they would also not have a country calling code and we would have exited earlier).
@@ -1801,18 +1796,32 @@ private boolean rawInputContainsNationalPrefix(String rawInput, String nationalP
18011796
return false;
18021797
}
18031798

1804-
private boolean hasFormattingPatternForNumber(PhoneNumber number) {
1799+
private NumberFormat chooseFormattingPatternForNumber(PhoneNumber number) {
18051800
int countryCallingCode = number.getCountryCode();
18061801
String phoneNumberRegion = getRegionCodeForCountryCode(countryCallingCode);
18071802
PhoneMetadata metadata =
18081803
getMetadataForRegionOrCallingCode(countryCallingCode, phoneNumberRegion);
18091804
if (metadata == null) {
1810-
return false;
1805+
return null;
18111806
}
18121807
String nationalNumber = getNationalSignificantNumber(number);
1813-
NumberFormat formatRule =
1814-
chooseFormattingPatternForNumber(metadata.getNumberFormatList(), nationalNumber);
1815-
return formatRule != null;
1808+
return chooseFormattingPatternForNumber(metadata.getNumberFormatList(), nationalNumber);
1809+
}
1810+
1811+
NumberFormat chooseFormattingPatternForNumber(List<NumberFormat> availableFormats,
1812+
String nationalNumber) {
1813+
for (NumberFormat numFormat : availableFormats) {
1814+
int size = numFormat.getLeadingDigitsPatternCount();
1815+
if (size == 0 || regexCache.getPatternForRegex(
1816+
// We always use the last leading_digits_pattern, as it is the most detailed.
1817+
numFormat.getLeadingDigitsPattern(size - 1)).matcher(nationalNumber).lookingAt()) {
1818+
Matcher m = regexCache.getPatternForRegex(numFormat.getPattern()).matcher(nationalNumber);
1819+
if (m.matches()) {
1820+
return numFormat;
1821+
}
1822+
}
1823+
}
1824+
return null;
18161825
}
18171826

18181827
/**
@@ -2001,22 +2010,6 @@ private String formatNsn(String number,
20012010
: formatNsnUsingPattern(number, formattingPattern, numberFormat, carrierCode);
20022011
}
20032012

2004-
NumberFormat chooseFormattingPatternForNumber(List<NumberFormat> availableFormats,
2005-
String nationalNumber) {
2006-
for (NumberFormat numFormat : availableFormats) {
2007-
int size = numFormat.getLeadingDigitsPatternCount();
2008-
if (size == 0 || regexCache.getPatternForRegex(
2009-
// We always use the last leading_digits_pattern, as it is the most detailed.
2010-
numFormat.getLeadingDigitsPattern(size - 1)).matcher(nationalNumber).lookingAt()) {
2011-
Matcher m = regexCache.getPatternForRegex(numFormat.getPattern()).matcher(nationalNumber);
2012-
if (m.matches()) {
2013-
return numFormat;
2014-
}
2015-
}
2016-
}
2017-
return null;
2018-
}
2019-
20202013
// Simple wrapper of formatNsnUsingPattern for the common case of no carrier code.
20212014
String formatNsnUsingPattern(String nationalNumber,
20222015
NumberFormat formattingPattern,
Binary file not shown.

0 commit comments

Comments
 (0)