Demo mode for the status bar allows you to force the status bar into a fixed state, useful for taking screenshots with a consistent status bar state, or testing different status icon permutations. Demo mode is available in recent versions of Android.
Demo mode is protected behind a system setting. To enable it for a device, run:
adb shell settings put global sysui_demo_allowed 1
The protocol is based on broadcast intents, and thus can be driven via the command line (adb shell am broadcast
) or an app (Context.sendBroadcast
).
com.android.systemui.demo
Commands and subcommands (below) are sent as string extras in the broadcast intent.
Commands are sent as string extras with key command
(required). Possible values are:
Command | Subcommand | Argument | Description |
---|---|---|---|
enter | Enters demo mode, bar state allowed to be modified (for convenience, any of the other non-exit commands will automatically flip demo mode on, no need to call this explicitly in practice) | ||
exit | Exits demo mode, bars back to their system-driven state | ||
battery | Control the battery display | ||
level | Sets the battery level (0 - 100) | ||
plugged | Sets charging state (true , false ) | ||
network | Control the RSSI display | ||
airplane | show to show icon, any other value to hide | ||
fully | Sets MCS state to fully connected (true , false ) | ||
wifi | show to show icon, any other value to hide | ||
level | Sets wifi level (null or 0-4) | ||
mobile | show to show icon, any other value to hide | ||
datatype | Values: 1x , 3g , 4g , e , g , h , lte , roam , any other value to hide | ||
level | Sets mobile signal strength level (null or 0-4) | ||
carriernetworkchange | Sets mobile signal icon to carrier network change UX when disconnected (show to show icon, any other value to hide) | ||
sims | Sets the number of sims (1-8) | ||
nosim | show to show icon, any other value to hide | ||
bars | Control the visual style of the bars (opaque, translucent, etc) | ||
mode | Sets the bars visual style (opaque, translucent, semi-transparent) | ||
status | Control the system status icons | ||
volume | Sets the icon in the volume slot (silent , vibrate , any other value to hide) | ||
bluetooth | Sets the icon in the bluetooth slot (connected , disconnected , any other value to hide) | ||
location | Sets the icon in the location slot (show , any other value to hide) | ||
alarm | Sets the icon in the alarm_clock slot (show , any other value to hide) | ||
sync | Sets the icon in the sync_active slot (show , any other value to hide) | ||
tty | Sets the icon in the tty slot (show , any other value to hide) | ||
eri | Sets the icon in the cdma_eri slot (show , any other value to hide) | ||
mute | Sets the icon in the mute slot (show , any other value to hide) | ||
speakerphone | Sets the icon in the speakerphone slot (show , any other value to hide) | ||
notifications | Control the notification icons | ||
visible | false to hide the notification icons, any other value to show | ||
clock | Control the clock display | ||
millis | Sets the time in millis | ||
hhmm | Sets the time in hh:mm |
Enter demo mode
adb shell am broadcast -a com.android.systemui.demo -e command enter
Exit demo mode
adb shell am broadcast -a com.android.systemui.demo -e command exit
Set the clock to 12:31
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1231
Set the wifi level to max
adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4
Show the silent volume icon
adb shell am broadcast -a com.android.systemui.demo -e command status -e volume silent
Empty battery, and not charging (red exclamation point)
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 0 -e plugged false
Hide the notification icons
adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
Exit demo mode
adb shell am broadcast -a com.android.systemui.demo -e command exit
frameworks/base/tests/SystemUIDemoModeController
#!/bin/sh CMD=$1 if [[ $ADB == "" ]]; then ADB=adb fi if [[ $CMD != "on" && $CMD != "off" ]]; then echo "Usage: $0 [on|off] [hhmm]" >&2 exit fi if [[ "$2" != "" ]]; then HHMM="$2" fi $ADB root || exit $ADB wait-for-devices $ADB shell settings put global sysui_demo_allowed 1 if [ $CMD == "on" ]; then $ADB shell am broadcast -a com.android.systemui.demo -e command enter || exit if [[ "$HHMM" != "" ]]; then $ADB shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm ${HHMM} fi $ADB shell am broadcast -a com.android.systemui.demo -e command battery -e plugged false $ADB shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 $ADB shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4 $ADB shell am broadcast -a com.android.systemui.demo -e command network -e mobile show -e datatype none -e level 4 $ADB shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false elif [ $CMD == "off" ]; then $ADB shell am broadcast -a com.android.systemui.demo -e command exit fi