19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.telephony;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Editable;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Japanese Phone number formatting rule is a bit complicated.
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Here are some valid examples:
242563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville *
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 022-229-1234 0223-23-1234 022-301-9876 015-482-7849 0154-91-3478
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 01547-5-4534 090-1234-1234 080-0123-6789
2777359e7af334a9c976e8d597ede59c74cd45dac5Keiji Ariyama * 050-0000-0000 060-0000-0000
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0800-000-9999 0570-000-000 0276-00-0000
292563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville *
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * As you can see, there is no straight-forward rule here.
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order to handle this, a big array is prepared.
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* package */ class JapanesePhoneNumberFormatter {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static short FORMAT_MAP[] = {
3577359e7af334a9c976e8d597ede59c74cd45dac5Keiji Ariyama    -100, 10, 220, -15, 410, 530, 1200, 670, 780, 1060,
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -25, 20, 40, 70, 100, 150, 190, 200, 210,
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -36, -100, -100, -35, -35, -35, 30, -100, -100, -100,
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -35, -45, -35, -35,
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -100, -35, -35, -35, -35, 50, -35, 60,
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -45, -35, -45, -35, -35, -45, -35, -35,
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -45, -35, -35, -35, -35, -45, -45, -35,
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -35, -35, -35, 80, 90, -100, -100, -100,
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -45, -45, -35, -35,
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -45, -35, -35, -35,
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, 110, 120, 130, -35, 140, -25,
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -35, -35, -35, -35, -35, -45, -25, -35,
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -35, -35, -35, -35, -35, -25, -45, -35,
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -45, -35, -35, -35, -35, -35,
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -45, -45, -35, -35,
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -35, 160, 170, 180, -35, -35, -100, -100,
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -45, -35, -45, -45, -35, -35, -35, -35,
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -35, -35, -45, -35,
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -45, -45, -45, -35, -45, -35,
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, -35, -35, -35, -25, -35, -35,
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, -35, -35, -35, -35, -25, -25,
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -25, -35, -35, -25,
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, 230, 250, 260, 270, 320, 340, 360, 390,
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, 240, -35, -35, -35, -25, -35, -35,
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -25, -25, -25, -25, -25, -25,
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -35, -35, -35, -25, -35, -35, -25,
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -25, -35, -35, -35, -25,
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -25, -35, 280, 290, 300, 310, -35,
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -25, -25, -25, -35, -35, -25,
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, -35, -25, -25, -25, -25, -25,
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -25, -35, 330, -35, -35, -35, -35, -35,
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -25, -25, -25, -25,
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -25, -35, -25, -35, -35, 350, -35,
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -35, -25, -25,
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -35, 370, -35, -35, -25, -35, -35, 380,
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -25, -25, -35, -35, -35, -35, -35,
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -25, -25, -25, -25, -35, -35, -35, -35,
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -25, 400, -35, -35, -35, -35, -25, -35,
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -25, -25, -25, -25, -25,
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -15, -15, 420, 460, -25, -25, 470, 480, 500, 510,
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -15, -25, 430, -25, -25, -25, -25, -25, 440, 450,
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, -25, -25, -25, -35, -35, -35,
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -15, -25, -15, -15, -15, -15, -15, -25, -25, -15,
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -25, -25, -35, -25, -35, -35,
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -35, -25, -35, -35, -35, -25, -25,
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    490, -15, -25, -25, -25, -35, -35, -25, -35, -35,
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -15, -35, -35, -35, -35, -35, -35, -35, -35, -15,
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -35, -35, -35, -25, -25, -25, 520,
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -45, -100, -45, -100, -45, -100, -45, -100,
8877359e7af334a9c976e8d597ede59c74cd45dac5Keiji Ariyama    -26, -100, -25, 540, 580, 590, 600, 610, 630, 640,
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -25, -25, -35, -35, -35, 550,
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -25, -25, -25, -25, 560, 570, -25, -35,
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -25, -25, -25, -25, -25, -25,
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -35, -25, -25, -35, -25, -25,
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -35, -35, -25, -35, -35, -25,
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -25, -35, -35, -35, -35, -35, -35, -25,
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -35, -35, -35, -35, -35, -35, -35, -35, -35,
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -36, -100, -35, -35, -35, -35, 620, -35, -35, -100,
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -35, -35, -35, -45,
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -25, -25, -35, -35, -35, -35, -25, -25,
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -35, -35, -35, 650, -35, 660,
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -45, -35, -35, -35, -35, -45,
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -35, -35, -35, -25,
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -26, -100, 680, 690, 700, -25, 720, 730, -25, 740,
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -25, -25, -25, -35, -25, -25, -25, -25,
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -25, -35, -35, -35, -35, -35,
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -100, -35, -35, -35, -35, 710, -35, -35, -35,
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -35, -35, -45, -35,
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -25, -35, -25, -35, -35, -35, -35, -25,
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -25, -35, -25, -35, -35,
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -25, -25, 750, 760, 770, -35, -35, -35,
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -25, -25, -25, -25, -35, -35, -35, -25,
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -25, -25, -35, -35, -25,
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -25, -25, -35, -35,
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    790, -100, 800, 850, 900, 920, 940, 1030, 1040, 1050,
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -36, -26, -26, -26, -26, -26, -26, -26, -26, -26,
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -35, 810, -25, -35, -35, -25, 820,
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -25, -25, -35, -35, -35, -35, -35, -25,
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, 830, -35, 840, -35, -25, -35, -35, -25,
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -25, -25, -25, -100, -100, -100, -100, -100, -100,
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, -35, -35, 860, -35, 870, 880,
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -35, -45, -45, -35,
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -100, -100, -100, -100, 890, -100, -100, -100,
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -45, -45, -25, -45, -45, -25, -45, -45, -45,
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -25, -35, -35, 910, -35, -25,
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -35, -45, -35, -35,
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, 930, -35, -35, -35, -35, -35, -35, -35, -35,
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -45, -100, -45, -100, -100, -100, -100, -100,
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, 950, -25, 970, 990, -35, 1000, 1010,
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, 960, -35, -35, -35,
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -45, -45, -45, -45, -45, -45, -35, -45, -45, -45,
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -25, -35, -35, 980, -35, -35, -35, -35,
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -25, -25, -100, -100, -100, -100, -100, -100,
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -35, -35, -35,
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -35, -35, -25,
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -25, -25, -35, -35, -35, 1020,
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -45, -45, -35, -35, -45, -45, -45, -45, -45, -45,
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -25, -35, -25, -35, -25, -35,
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -35, -35, -35, -25, -35, -25, -35,
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, -35, -35, -35, -35, -35, -25,
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -26, -100, 1070, 1080, 1090, 1110, 1120, 1130, 1140, 1160,
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -25, -25, -25, -25, -25, -25, -25, -25,
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -100, -35, -35, -35, -100, -35, -35, -35, 1100,
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -35, -35, -35, -35, -45, -35, -35, -35,
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -25, -35, -25, -35, -35, -35, -35, -25, -35,
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -25, -25, -35, -35, -35, -35, -35, -35,
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -25, -35, -35, -35, -25, -25, -35, -35, -35,
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    1150, -25, -35, -35, -35, -35, -35, -35, -25, -25,
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, -35, -45, -35, -35, -35, -35, -35, -35, -35,
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -35, 1170, -25, -35, 1180, -35, 1190, -35, -25, -25,
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -100, -100, -45, -45, -100, -100, -100, -100, -100, -100,
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    -25, -35, -35, -35, -35, -35, -35, -25, -25, -35,
15477359e7af334a9c976e8d597ede59c74cd45dac5Keiji Ariyama    -35, -35, -35, -35, -35, -35, -35, -35, -35, -45,
15577359e7af334a9c976e8d597ede59c74cd45dac5Keiji Ariyama    -26, -15, -15, -15, -15, -15, -15, -15, -15, -15};
1562563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static void format(Editable text) {
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Here, "root" means the position of "'":
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // 0'3, 0'90, and +81'-90
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // (dash will be deleted soon, so it is actually +81'90).
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int rootIndex = 1;
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int length = text.length();
1632563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville        if (length > 3
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                && text.subSequence(0, 3).toString().equals("+81")) {
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rootIndex = 3;
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (length < 1 || text.charAt(0) != '0') {
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CharSequence saved = text.subSequence(0, length);
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Strip the dashes first, as we're going to add them back
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int i = 0;
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        while (i < text.length()) {
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (text.charAt(i) == '-') {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                text.delete(i, i + 1);
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                i++;
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1812563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        length = text.length();
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int dashposition;
1842563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        i = rootIndex;
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int base = 0;
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        while (i < length) {
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            char ch = text.charAt(i);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!Character.isDigit(ch)) {
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                text.replace(0, length, saved);
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            short value = FORMAT_MAP[base + ch - '0'];
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (value < 0) {
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (value <= -100) {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    text.replace(0, length, saved);
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    return;
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int dashPos2 = rootIndex + (Math.abs(value) % 10);
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (length > dashPos2) {
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    text.insert(dashPos2, "-");
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                int dashPos1 = rootIndex + (Math.abs(value) / 10);
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if (length > dashPos1) {
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    text.insert(dashPos1, "-");
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                break;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                base = value;
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                i++;
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2132563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (length > 3 && rootIndex == 3) {
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            text.insert(rootIndex, "-");
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}