2011年03月29日

LandscapeモードでのIMEの件(続き)

AOSPを色々漁ってようやく分かったので、ここに書いておきます。

 

まず、InputMethodManager#onEvaluateFullscreenMode()がfalseを返すと、IMEが全画面モードになります。

GingerBreadでの実装がこんな感じ。

public boolean onEvaluateFullscreenMode() {
    Configuration config = getResources().getConfiguration();
    if (config.orientation != Configuration.ORIENTATION_LANDSCAPE) {
        return false;
    }
    if (mInputEditorInfo != null
            && (mInputEditorInfo.imeOptions & EditorInfo.IME_FLAG_NO_FULLSCREEN) != 0) {
        return false;
    }
    return true;
}

Landscape以外ではfalseを返し、Landscapeの時はIME_FLAG_NO_FULLSCREENのビットが立っていればfalseを返す、と。

このEditorInfo.IME_FLAG_NO_FULLSCREENは、API Level11=Honeycombで公式に入った設定値で、少なくともFroyo以降は内部では使用されているようです。

 

このメソッドはIMEアプリ側でオーバーライドすることが出来て、OpenWnnでは以下のようになっています。

/** @see jp.co.omronsoft.openwnn.OpenWnn#onEvaluateFullscreenMode */
@Override public boolean onEvaluateFullscreenMode() {
    /* never use full-screen mode */
    return false;
}

なのでこれをなぞったOpenWnn系のIMEでは、Landscapeでも全画面にならないという訳。

 

Eclairソースは今手元に無いので未確認ですが、Donutソースでは以下のようになっていました。

public boolean onEvaluateFullscreenMode() {
    Configuration config = getResources().getConfiguration();
    return config.orientation == Configuration.ORIENTATION_LANDSCAPE;
}

なので、IME側で対応していない場合は、Landscapeの時は全画面確定。残念。

 

ここまで分かったところで、EditTextの初期化時にIME_FLAG_NO_FULLSCREEN=0x2000000をセットしてやると。

setImeOptions(EditorInfo.IME_ACTION_DONE|EditorInfo.IME_FLAG_NO_FULLSCREEN);

これで目出度くDesireでもLandscapeでiWnnが普通に動作するようになりました。

 

landscape_iwnn

 

Eclairの実装を確認したら、バージョン限定でJotaに盛り込みます。


こんなくだらないことで、OpenWnnの実装やInputMethodManagerの実装を読まないといけない状況というのは、Androidの仕様のぐだぐださをいい感じに表していると思います。(自分のことは棚に上げてます。)

とはいえ、こういう事が分かるのも、ソースがあるからこそ。ソースがあるのと無いのとどっちがいいかと言われたら、やっぱりソースがある方がいいと答えるでしょう。

ま、いいや。すっきりしたところで寝ます。おやすみ。


[2011/03/30 追記]

AOSPのページでリポジトリをブラウズ出来るの忘れてました、

Eclairでは入ってませんでした。残念。

posted by Jiro at 23:07 | Comment(0) | TrackBack(0) | Android
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/44038190
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック