モーダルダイアログが欲しい
Androidに用意されているダイアログ(Dialog)では、Windowsで言うところのメッセージボックスのようにモーダルなダイアログは無い。画面の大きさが限られているためにモーダルのように見えるが、上部レイヤに表示されているウインドウに過ぎない。
new AlertDialog.Builder(this) .setMessage("モーダルに見えるかい?") .setPositiveButton("OK", null) .show();
上記の様に書かれたコードはダイアログがモーダルであれば、showメソッドでブロックするがAndroidの場合は何らかの方法で処理を止めなければ直ぐにリターンしてしまう。
これが使って見ると中々面倒であり、特にWindowsの世界でモーダルなダイアログに慣れていると
1. 処理開始 2. データの入力が必要な場合はダイアログを表示してブロック(モーダル) 3. ダイアログのボタンが押されたら、入力されたデータを取得して後続処理 4. 処理完了
このようにダイアログがモーダルであり、後続の処理ブロックされているために簡単だった処理フローは、そのままでは
1. 処理開始 2. データの入力が必要な場合はダイアログを表示 2-1. データが入力されてダイアログが閉じられたら「1.処理開始」に戻る 3. データが入力されていたら取得して後続処理 3-1. データが入力されていなかったら何もせず終了 4. 処理完了
みたいな感じで醜く面倒になってしまうのだ(ダイアログ表示後にデータ入力までループってのも有りだが、実際にはそんなコードは書かないだろう)更にはUIスレッドを邪魔しないための工夫(非UIスレッドとの連携)も必要だ。
ということで、モーダルなダイアログと同等とまではいかないものの、上記処理フローをモーダル並にシンプルにしたい訳だ。
認証のためダイアログの表示が必要なWebViewのソースを見てみるとHandlerとメッセージをいろいろと使っているようで(まるで古のWindowsメッセージループを見ているようだ)、まずはそれを参考に考えてみよう。