コード例 #1
0
        /**
         * Gets a valid short number for the specified cost category.
         *
         * @param regionCode the region for which an example short number is needed
         * @param cost the cost category of number that is needed
         * @return a valid short number for the specified region and cost category. Returns an empty
         *     string when the metadata does not contain such information, or the cost is UNKNOWN_COST.
         */
        // @VisibleForTesting
        internal String getExampleShortNumberForCost(String regionCode, ShortNumberCost cost)
        {
            PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);

            if (phoneMetadata == null)
            {
                return("");
            }
            PhoneNumberDesc desc = null;

            switch (cost)
            {
            case ShortNumberCost.TOLL_FREE:
                desc = phoneMetadata.getTollFree();
                break;

            case ShortNumberCost.STANDARD_RATE:
                desc = phoneMetadata.getStandardRate();
                break;

            case ShortNumberCost.PREMIUM_RATE:
                desc = phoneMetadata.getPremiumRate();
                break;

            default:
                // UNKNOWN_COST numbers are computed by the process of elimination from the other cost
                // categories.
                break;
            }
            if (desc != null && desc.hasExampleNumber())
            {
                return(desc.getExampleNumber());
            }
            return("");
        }
コード例 #2
0
        /**
         * Gets the expected cost category of a short number (however, nothing is implied about its
         * validity). If it is important that the number is valid, then its validity must first be checked
         * using {@link isValidShortNumber}. Note that emergency numbers are always considered toll-free.
         * Example usage:
         * <pre>{@code
         * PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
         * ShortNumberInfo shortInfo = ShortNumberInfo.getInstance();
         * PhoneNumber number = phoneUtil.parse("110", "FR");
         * if (shortInfo.isValidShortNumber(number)) {
         *   ShortNumberInfo.ShortNumberCost cost = shortInfo.getExpectedCost(number);
         *   // Do something with the cost information here.
         * }}</pre>
         *
         * @param number the short number for which we want to know the expected cost category
         * @return the expected cost category of the short number. Returns UNKNOWN_COST if the number does
         *     not match a cost category. Note that an invalid number may match any cost category.
         */
        public ShortNumberCost getExpectedCost(PhoneNumber number)
        {
            List <String> regionCodes = phoneUtil.getRegionCodesForCountryCode(number.getCountryCode());
            String        regionCode  = getRegionCodeForShortNumberFromRegionList(number, regionCodes);

            // Note that regionCode may be null, in which case phoneMetadata will also be null.
            PhoneMetadata phoneMetadata = MetadataManager.getShortNumberMetadataForRegion(regionCode);

            if (phoneMetadata == null)
            {
                return(ShortNumberCost.UNKNOWN_COST);
            }
            String nationalNumber = phoneUtil.getNationalSignificantNumber(number);

            // The cost categories are tested in order of decreasing expense, since if for some reason the
            // patterns overlap the most expensive matching cost category should be returned.
            if (phoneUtil.isNumberMatchingDesc(nationalNumber, phoneMetadata.getPremiumRate()))
            {
                return(ShortNumberCost.PREMIUM_RATE);
            }
            if (phoneUtil.isNumberMatchingDesc(nationalNumber, phoneMetadata.getStandardRate()))
            {
                return(ShortNumberCost.STANDARD_RATE);
            }
            if (phoneUtil.isNumberMatchingDesc(nationalNumber, phoneMetadata.getTollFree()))
            {
                return(ShortNumberCost.TOLL_FREE);
            }
            if (isEmergencyNumber(nationalNumber, regionCode))
            {
                // Emergency numbers are implicitly toll-free.
                return(ShortNumberCost.TOLL_FREE);
            }
            return(ShortNumberCost.UNKNOWN_COST);
        }