| # Demo Mode for the Android System UI |
| *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.* |
| |
| ## Enabling demo mode |
| Demo mode is protected behind a system setting. To enable it for a device, run: |
| |
| ``` |
| adb shell settings put global sysui_demo_allowed 1 |
| ``` |
| |
| ## Protocol |
| 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```). |
| |
| ### Broadcast action |
| ``` |
| com.android.systemui.demo |
| ``` |
| |
| ### Commands |
| Commands and subcommands (below) are sent as string extras in the broadcast |
| intent. |
| <br/> |
| 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```) |
| | | ```powersave``` | | Sets power save mode (```true```, ```anything else```) |
| | ```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) |
| | | ```satellite``` | | ```show``` to show icon, any other value to hide |
| | | | ```connection``` | ```connected```, ```off```, ```on```, or ```unknown``` (matches SatelliteConnectionState enum) |
| | | | ```level``` | Sets satellite signal strength level (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 |
| |
| ## Examples |
| 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 satellite icon |
| |
| ``` |
| # Sets mobile to be out-of-service, which is required for satellite to show |
| adb shell am broadcast -a com.android.systemui.demo -e command network -e mobile show -e level 0 |
| # Sets satellite to be connected |
| adb shell am broadcast -a com.android.systemui.demo -e command network -e satellite show -e level 4 -e connection connected |
| ``` |
| |
| 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 |
| ``` |
| |
| |
| ## Example demo controller app in AOSP |
| ``` |
| frameworks/base/tests/SystemUIDemoModeController |
| ``` |
| |
| |
| ## Example script (for screenshotting purposes) |
| ```bash |
| #!/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 |
| ``` |
| |