+September 4th, 2010
+* Code improvement:
+ - Added new phone number type: pager
+* Metadata change:
+ - update to existing country: GG, IM, JE, RS, RU
+* Bug fixes:
+ - ArrayOutOfBoundException in AsYouTypeFormatter.getRememberedPosition()
+ - AsYouTypeFormatter for UK childline number
+
September 1st, 2010
* Bug fix on KZ metadata.
- update to existing countries: BF, FR, UK, PK, RE
August 4th, 2010
-
* Further improve startup performance
- Preload no country specific metadata at startup.
- Stop creating the file containing mapping from country calling code to region code
- Same change also applied to unittests
July 30th, 2010
-
* Metadata change:
- new country: TL
- update to existing country: AZ, CN, FR, GH, JO, LA, PG, PK, QA, SZ, UA, VN
<!ELEMENT phoneNumberMetadata (territories)>
<!ELEMENT territories (territory+)>
<!ELEMENT territory (availableFormats?, generalDesc?, fixedLine?, mobile?, tollFree?,
- premiumRate?, sharedCost?, personalNumber?, voip?)>
+ premiumRate?, sharedCost?, personalNumber?, voip?, pager?)>
<!ELEMENT generalDesc (nationalNumberPattern, possibleNumberPattern, exampleNumber?)>
<!ELEMENT fixedLine (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT mobile (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT sharedCost (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT personalNumber (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT voip (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT pager (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT availableFormats (numberFormat+, intlNumberFormat*)>
<!ELEMENT nationalNumberPattern (#PCDATA)>
<!ELEMENT possibleNumberPattern (#PCDATA)>
<format>$1 $2</format>
</numberFormat>
<!-- UK child line -->
- <numberFormat pattern="(800)(1111)">
+ <numberFormat pattern="(800)(\d{4})">
<leadingDigits>800</leadingDigits>
<leadingDigits>8001</leadingDigits>
+ <leadingDigits>80011</leadingDigits>
+ <leadingDigits>800111</leadingDigits>
+ <leadingDigits>8001111</leadingDigits>
<format>$1 $2</format>
</numberFormat>
<numberFormat pattern="(8\d{2})(\d{3})(\d{3,4})">
- <leadingDigits>8(?:0|4[3-5]|7[01])</leadingDigits>
+ <leadingDigits>8(?:0|4[3-5]|7[0-3])</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
</availableFormats>
</generalDesc>
<fixedLine>
<nationalNumberPattern>1481\d{6}</nationalNumberPattern>
- <exampleNumber>1481123456</exampleNumber>
+ <exampleNumber>1481223456</exampleNumber>
</fixedLine>
<mobile>
<nationalNumberPattern>7(?:781|839|911)\d{6}</nationalNumberPattern>
<tollFree>
<nationalNumberPattern>80(?:01111|\d{7,8})|500\d{6}</nationalNumberPattern>
<possibleNumberPattern>\d{7,10}</possibleNumberPattern>
- <exampleNumber>8012345678</exampleNumber>
+ <exampleNumber>8001234567</exampleNumber>
</tollFree>
<premiumRate>
<nationalNumberPattern>(?:9[018]\d|87[1-3])\d{7}</nationalNumberPattern>
</generalDesc>
<fixedLine>
<nationalNumberPattern>1624\d{6}</nationalNumberPattern>
- <exampleNumber>1624123456</exampleNumber>
+ <exampleNumber>1624223456</exampleNumber>
</fixedLine>
<mobile>
<nationalNumberPattern>7[69]24\d{6}</nationalNumberPattern>
<tollFree>
<nationalNumberPattern>80(?:01111|\d{7,8})|500\d{6}</nationalNumberPattern>
<possibleNumberPattern>\d{7,10}</possibleNumberPattern>
- <exampleNumber>8012345678</exampleNumber>
+ <exampleNumber>8001234567</exampleNumber>
</tollFree>
<premiumRate>
<nationalNumberPattern>(?:9[018]\d|87[1-3])\d{7}</nationalNumberPattern>
</generalDesc>
<fixedLine>
<nationalNumberPattern>1534\d{6}</nationalNumberPattern>
- <exampleNumber>1534123456</exampleNumber>
+ <exampleNumber>1534223456</exampleNumber>
</fixedLine>
<mobile>
<nationalNumberPattern>7(?:7(?:00|97)|829|937)\d{6}</nationalNumberPattern>
<tollFree>
<nationalNumberPattern>80(?:01111|\d{7,8})|500\d{6}</nationalNumberPattern>
<possibleNumberPattern>\d{7,10}</possibleNumberPattern>
- <exampleNumber>8012345678</exampleNumber>
+ <exampleNumber>8001234567</exampleNumber>
</tollFree>
<premiumRate>
<nationalNumberPattern>(?:9[018]\d|87[1-3])\d{7}</nationalNumberPattern>
<leadingDigits>6</leadingDigits>
<format>$1 $2</format>
</numberFormat>
- <numberFormat pattern="([89]0\d)(\d{3,6})">
+ <numberFormat pattern="([89]\d{2})(\d{3,6})">
<leadingDigits>[89]</leadingDigits>
<format>$1 $2</format>
</numberFormat>
as http://www.minjust.ru/ru/structure/contact/. Contains formatting
instructions for Kazakhstan as well. -->
<numberFormat pattern="([34689]\d{2})(\d{3})(\d{2})(\d{2})">
- <leadingDigits>[34689]</leadingDigits>
+ <leadingDigits>[3489]</leadingDigits>
<format>$1 $2-$3-$4</format>
</numberFormat>
- <numberFormat pattern="([7]\d{2})(\d{3})(\d{4})">
- <leadingDigits>7</leadingDigits>
+ <numberFormat pattern="([67]\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[67]</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
</availableFormats>
// MOBILE or FIXED_LINE number. Some more information can be found here:
// http://en.wikipedia.org/wiki/Personal_Numbers
PERSONAL_NUMBER,
+ PAGER,
// A phone number is of type UNKNOWN when it does not fit any of the known patterns for a
// specific country.
UNKNOWN
* be used:
*
* PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
- * PhoneNumber number = phoneUtil.parse("16502530000", RegionCode.US);
+ * PhoneNumber number = phoneUtil.parse("16502530000", "US");
* String nationalSignificantNumber = PhoneNumberUtil.getNationalSignificantNumber(number);
* String areaCode;
* String subscriberNumber;
return metadata.getVoip();
case PERSONAL_NUMBER:
return metadata.getPersonalNumber();
+ case PAGER:
+ return metadata.getPager();
default:
return metadata.getGeneralDesc();
}
if (isNumberMatchingDesc(nationalNumber, metadata.getPersonalNumber())) {
return PhoneNumberType.PERSONAL_NUMBER;
}
+ if (isNumberMatchingDesc(nationalNumber, metadata.getPager())) {
+ return PhoneNumberType.PAGER;
+ }
boolean isFixedLine = isNumberMatchingDesc(nationalNumber, metadata.getFixedLine());
if (isFixedLine) {
return this;
}
+ // required PhoneNumberDesc pager = 21;
+ private boolean hasPager;
+ private PhoneNumberDesc pager_ = null;
+ public boolean hasPager() { return hasPager; }
+ public PhoneNumberDesc getPager() { return pager_; }
+ public PhoneMetadata setPager(PhoneNumberDesc value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ hasPager = true;
+ pager_ = value;
+ return this;
+ }
+
// required string id = 9;
private boolean hasId;
private String id_ = "";
if (hasVoip) {
voip_.writeExternal(objectOutput);
}
+ objectOutput.writeBoolean(hasPager);
+ if (hasPager) {
+ pager_.writeExternal(objectOutput);
+ }
objectOutput.writeUTF(id_);
objectOutput.writeInt(countryCode_);
desc.readExternal(objectInput);
setVoip(desc);
}
+ hasDesc = objectInput.readBoolean();
+ if (hasDesc) {
+ PhoneNumberDesc desc = new PhoneNumberDesc();
+ desc.readExternal(objectInput);
+ setPager(desc);
+ }
setId(objectInput.readUTF());
setCountryCode(objectInput.readInt());