Android の開発者オプションに「システムUIデモモード」という項目がある。(Android10ではこの名称だが以前は違ったかも)
開発者オプションから有効化すると、
何故だろう、どうやって使うのだろう?と疑問に思ってた。
名前のとおり、システムUIのデモ、すなわち表示を確認をしたり、任意の状態のスクリーンショットを撮影したりするためのツールとしてこの機能は用意されているっぽい。それ以外にも応用は可能。
システムUIといっても操作できるのはステータスバーのみ。adbからコマンドを叩いてインテントを送ることで表示を任意に弄れる。(有効化をすればアプリからインテントを飛すことでも操作ができるため2段階になっているようだが、パーミッションの関係上これシステムアプリからしか操作できなくない?)
詳しくはSystemUIのソースコードにドキュメントが付属している。
Demo Mode for the Android System UI
開発者オプションで「デモモードを有効にする」を選択するのと同じことがadbから設定を書き換えてやれば可能。
adb shell settings put global sysui_demo_allowed 1
無効化する場合は0。ただしデモモードを終了せずに無効化してしまうとデモモードのままになる。というかかいてて思ったけど無効化してもデモモード使える?大丈夫??
開発者オプションで「デモモードを表示」を選択したのと同様、ではなく一部の状態のオーバーライドが行われていない状態になる。
adb shell am broadcast -a com.android.systemui.demo -e command enter
以下のコマンドで状態を変更するには上の「有効化」と「開始」が必要。adbでもUI上でも構わない。(おかしなことにどちらも有効化しなくても操作できている……)
コマンドは主に [ command: コマンドカテゴリ, コマンド: 値, (サブ)コマンド: 値 ...]
のようなkvペアでインテントを飛すが、ドキュメントの表が初見だとわかりにくかったりしなくもない。
shell am broadcast -a com.android.systemui.demo -e command battery -e level 15 -e plugged false
ただでさえおかしいのに両立し得ない状態が並んでいるが、表示できてしまう。
adb shell am broadcast -a com.android.systemui.demo -e command network -e sims 4 -e mobile show -e datatype lte+ -e level 3 -e nosim show
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1301
adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
ステータスバーを引き下げて出てくる通知は健在。クイック設定の下にもアイコンは出る。
adb shell am broadcast -a com.android.systemui.demo -e command exit