summaryrefslogtreecommitdiff
path: root/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java')
-rw-r--r--libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java b/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
index 401d260d..c0d01b4e 100644
--- a/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
+++ b/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java
@@ -101,6 +101,16 @@ public class ShortNumberInfo {
}
/**
+ * Helper method to check that the country calling code of the number matches the region it's
+ * being dialed from.
+ */
+ private boolean regionDialingFromMatchesNumber(PhoneNumber number,
+ String regionDialingFrom) {
+ List<String> regionCodes = getRegionCodesForCountryCode(number.getCountryCode());
+ return regionCodes.contains(regionDialingFrom);
+ }
+
+ /**
* Check whether a short number is a possible number when dialled from a region, given the number
* in the form of a string, and the region where the number is dialed from. This provides a more
* lenient check than {@link #isValidShortNumberForRegion}.
@@ -133,6 +143,9 @@ public class ShortNumberInfo {
* @return whether the number is a possible short number
*/
public boolean isPossibleShortNumberForRegion(PhoneNumber number, String regionDialingFrom) {
+ if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
+ return false;
+ }
PhoneMetadata phoneMetadata =
MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
@@ -156,6 +169,9 @@ public class ShortNumberInfo {
String shortNumber = getNationalSignificantNumber(number);
for (String region : regionCodes) {
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(region);
+ if (phoneMetadata == null) {
+ continue;
+ }
if (matcherApi.matchesPossibleNumber(shortNumber, phoneMetadata.getGeneralDesc())) {
return true;
}
@@ -202,6 +218,9 @@ public class ShortNumberInfo {
* @return whether the short number matches a valid pattern
*/
public boolean isValidShortNumberForRegion(PhoneNumber number, String regionDialingFrom) {
+ if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
+ return false;
+ }
PhoneMetadata phoneMetadata =
MetadataManager.getShortNumberMetadataForRegion(regionDialingFrom);
if (phoneMetadata == null) {
@@ -314,6 +333,9 @@ public class ShortNumberInfo {
* category.
*/
public ShortNumberCost getExpectedCostForRegion(PhoneNumber number, String regionDialingFrom) {
+ if (!regionDialingFromMatchesNumber(number, regionDialingFrom)) {
+ return ShortNumberCost.UNKNOWN_COST;
+ }
// Note that regionDialingFrom may be null, in which case phoneMetadata will also be null.
PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(
regionDialingFrom);