モーダルダイアログが欲しい

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メッセージループを見ているようだ)、まずはそれを参考に考えてみよう。