イタリアの電話番号 - Dialer (3)

 2009年2月27日追記: この記事で述べているイタリアの電話番号についての説明は誤っているので、『訂正: イタリアの電話番号 - Dialer (5)』で訂正した。



 話は前後して、Dialerを、バージョン1.0.0に向けて開発を進めていたときのことである。
 Dialerを某掲示板で紹介したときにいただいた指摘の二つ目は、イタリアのように国番号の後ろに「0」をつける必要がある国に対応していない点だった。単純に、筆者の電話帳にイタリアの電話番号がなく、かつ今後もイタリアの電話番号を登録する可能性がほとんどないために放っておいたものである。いよいよ、これを実装ことにした。
 イタリアの国番号の問題に関しては、同様の例外扱いが必要な国番号のリスト(以下記事中では「例外国番号リスト*1」と呼ぶ)をTextFieldに格納して、電話番号変換時にリストの国番号と照合していくやり方にした。いろいろな資料で「イタリアなど一部の国では……」という書き方をよく見掛けるが、イタリア以外にどの国が該当するのか分からない。自分の調べかたが足りないせいであるが、該当する国を見つける度にコードを変更するのは手間なので、このような仕様とした。デフォルト設定としてJadファイルに載せたイタリアの国番号だけは、初期化時に自動登録されるようにしてある。
 例外国番号リストはアプリケーション終了時にレコードストアに保存され、次回起動時に読み出されてTextFieldに格納される。この扱いは自国番号(Country Code)と国際通話事業者識別番号(International Call Prefix)のTextFieldと同じである。
 国際通話時に「+」部分の変換を行う際、「+」の次の桁からの番号を例外リストにある国番号と照合していき、一致した場合は国番号の後ろに「0」を挿入するようにしている。
 TextFieldに数字とカンマを入力できるようにするため、このTextFieldのconstraintsとしてANYを指定した。ANYはこのための文字集合としては大き過ぎるのだが、他に適切なものがないのでしかたがない。また、例外国番号リストの変更を実ダイヤル番号TextField(Actual Dial Number)へ即座に反映するため、ItemStateListener.itemStateChanged()メソッドを使って実ダイヤル番号を更新するようにした。ソニー・エリクソンの携帯電話で動作を確認した。バージョン1.0.0公開後にノキアの携帯電話で動かしてみて何が起きたかは、18日の記事22日の記事に書いたとおりである。*2

*1:読みづらいが、例外/国番号/リスト、である。

*2:いずれも2008年11月の記事。