明るさ設定の落とし穴

アプリケーション内で画面の明るさを設定するには
LayoutParamsのsceenBrightnessを設定すれば良い

ここにあるとおり、

This can be used to override the user's preferred brightness of the screen. A value of less than 0, the default, means to use the preferred screen brightness. 0 to 1 adjusts the brightness from dark to full bright.

0(暗い)~1(明るい)で明るさを設定できる。

WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.screenBrightness = 0.5f;

上記で中間の明るさに設定。
ところがちょっした落とし穴が。

layoutParams.screenBrightness = 0.0f;

とすると、画面が真っ暗になるだけではなく、windowがフォーカスを失ってしまう。
backキーやhomeキーを押しても

WARN/WindowManager(76): No focus window, dropping: KeyEvent{action=1 code=4 repeat=0 meta=0 scancode=158 mFlags=8}

とかなって、前の画面にも、ホームにも戻れない。
うーん、画面を暗くしたいだけであってフォーカスは失わないで欲しかったんだけど。

Focusを失わない最小値はいくつか? (GDD Phone, v1.6の場合)

0.004までOKだった。0.003を設定するとフォーカスを失った。

ただ、実際の明るさはリニアに変わるわけではなく、0.05間隔くらいで変わっているようだ。
0.6でもっとも暗くなり、それ以下の値を入れても明るさは変化せず、0.004を下回ったところでフォーカスを失う。

この辺はデバイス依存だろうから、「もっとも暗い値を設定したい」という場合は要注意。