1654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki/* 2654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * Copyright (C) 2011 The Android Open Source Project 3654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * 4654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * you may not use this file except in compliance with the License. 6654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * You may obtain a copy of the License at 7654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * 8654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * 10654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * Unless required by applicable law or agreed to in writing, software 11654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * See the License for the specific language governing permissions and 14654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * limitations under the License. 15654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki */ 16654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 17654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukipackage com.android.contacts.tests; 18654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 19654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport android.app.IntentService; 20654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport android.content.Context; 21654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport android.content.Intent; 22654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport android.location.CountryDetector; 23654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport android.telephony.PhoneNumberUtils; 24654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport android.util.Log; 25654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.i18n.phonenumbers.NumberParseException; 27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.i18n.phonenumbers.PhoneNumberUtil; 28e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; 29e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.i18n.phonenumbers.Phonenumber.PhoneNumber; 30e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 31654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport java.util.LinkedHashSet; 32654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukiimport java.util.Set; 33654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 34654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki/** 35654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * A service to test various phone number formatters. 36654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki * 37654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Usage: 38654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki adb shell am startservice -e n PHONE_NUMBER \ 39654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki [-e c OPTIONAL COUNTRY CODE] \ 40654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki com.android.contacts.tests/.PhoneNumberTestService 41654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 42654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Example: 43654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 44654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki adb shell am startservice -e n '6502530000' \ 45654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki com.android.contacts.tests/.PhoneNumberTestService 46654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki */ 47654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onukipublic class PhoneNumberTestService extends IntentService { 48654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki private static final String TAG = "phonenumber"; 49654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 50654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki private static final String EXTRA_PHONE_NUMBER = "n"; 51654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki private static final String EXTRA_COUNTRY_CODE = "c"; 52654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 53654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki public PhoneNumberTestService() { 54654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki super("PhoneNumberTestService"); 55654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 56654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 57654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki @Override 58654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki protected void onHandleIntent(Intent intent) { 59654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki final String number = intent.getStringExtra(EXTRA_PHONE_NUMBER); 60654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki final String country = intent.getStringExtra(EXTRA_COUNTRY_CODE); 61654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki final String defaultCountry = getCurrentCountryCode(); 62654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 63654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Log.i(TAG, "Input phone number: " + number); 64654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Log.i(TAG, "Input country code: " + country); 65654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Log.i(TAG, "Current country code: " + defaultCountry); 66654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 67654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki // Dump for the given country, the current country, US, GB and JP. 68654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Set<String> countries = new LinkedHashSet<String>(); 69654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki if (country != null) countries.add(country); 70654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki countries.add(defaultCountry); 71654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki countries.add("US"); 72654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki countries.add("GB"); 73654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki countries.add("JP"); 74654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 75654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki for (String c : countries) { 76654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki dump(number, c); 77654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 78654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 79654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 80654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki private void dump(String number, String country) { 81654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Log.i(TAG, "Result for: " + number + " / " +country); 82654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki dump_PhoneNumberUtils_formatNumberToE164(number, country); 83654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.E164); 84654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.INTERNATIONAL); 85654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.NATIONAL); 86654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki dump_PhoneNumberUtil_format(number, country, PhoneNumberFormat.RFC3966); 87654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 88654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 89654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki private void dump_PhoneNumberUtils_formatNumberToE164(String number, String country) { 90654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Log.i(TAG, " formatNumberToE164(" + number + ", " + country 91654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki + ") = " + PhoneNumberUtils.formatNumberToE164(number, country)); 92654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 93654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 94654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki private void dump_PhoneNumberUtil_format(String number, String country, 95654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki PhoneNumberFormat format) { 96654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki String formatted; 9784212b147edcf358746c249ac84827146389567aMakoto Onuki String truncated = ""; 98654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki boolean isValid = false; 99654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki try { 100654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki final PhoneNumberUtil util = PhoneNumberUtil.getInstance(); 101654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki final PhoneNumber pn = util.parse(number, country); 102654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki isValid = util.isValidNumber(pn); 103654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki formatted = util.format(pn, format); 10484212b147edcf358746c249ac84827146389567aMakoto Onuki util.truncateTooLongNumber(pn); 10584212b147edcf358746c249ac84827146389567aMakoto Onuki truncated = util.format(pn, format); 106654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } catch (NumberParseException e) { 107654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki formatted = "Error: " + e.toString(); 108654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 109654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki Log.i(TAG, " PhoneNumberUtil.format(parse(" + number + ", " + country + "), " + format 11084212b147edcf358746c249ac84827146389567aMakoto Onuki + ") = " + formatted + " / truncated = " + truncated 11184212b147edcf358746c249ac84827146389567aMakoto Onuki + (isValid ? " (valid)" : " (invalid)")); 112654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 113654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 114654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki private String getCurrentCountryCode() { 115654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki final CountryDetector countryDetector = 116654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki (CountryDetector) getSystemService(Context.COUNTRY_DETECTOR); 117654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki return countryDetector.detectCountry().getCountryIso(); 118654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki } 119654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki} 120654888562d75fe4758cb0500f73aaa11385e6f63Makoto Onuki 121