| Andrew Flynn | 56aa4cf | 2015-04-20 09:18:29 -0400 | [diff] [blame] | 1 | # Demo Mode for the Android System UI |
| 2 | *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.* |
| 3 | |
| 4 | ## Enabling demo mode |
| 5 | Demo mode is protected behind a system setting. To enable it for a device, run: |
| 6 | |
| 7 | ``` |
| 8 | adb shell settings put global sysui_demo_allowed 1 |
| 9 | ``` |
| 10 | |
| 11 | ## Protocol |
| 12 | 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```). |
| 13 | |
| 14 | ### Broadcast action |
| 15 | ``` |
| 16 | com.android.systemui.demo |
| 17 | ``` |
| 18 | |
| 19 | ### Commands |
| 20 | Commands and subcommands (below) are sent as string extras in the broadcast |
| 21 | intent. |
| 22 | <br/> |
| 23 | Commands are sent as string extras with key ```command``` (required). Possible values are: |
| 24 | |
| Andrew Flynn | a47a660 | 2015-04-23 09:12:30 -0700 | [diff] [blame] | 25 | Command | Subcommand | Argument | Description |
| 26 | --- | --- | --- | --- |
| 27 | ```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) |
| 28 | ```exit``` | | | Exits demo mode, bars back to their system-driven state |
| 29 | ```battery``` | | | Control the battery display |
| 30 | | ```level``` | | Sets the battery level (0 - 100) |
| 31 | | ```plugged``` | | Sets charging state (```true```, ```false```) |
| Evan Laird | 706d968 | 2017-05-30 15:03:29 -0400 | [diff] [blame] | 32 | | ```powersave``` | | Sets power save mode (```true```, ```anything else```) |
| Andrew Flynn | a47a660 | 2015-04-23 09:12:30 -0700 | [diff] [blame] | 33 | ```network``` | | | Control the RSSI display |
| 34 | | ```airplane``` | | ```show``` to show icon, any other value to hide |
| 35 | | ```fully``` | | Sets MCS state to fully connected (```true```, ```false```) |
| 36 | | ```wifi``` | | ```show``` to show icon, any other value to hide |
| 37 | | | ```level``` | Sets wifi level (null or 0-4) |
| 38 | | ```mobile``` | | ```show``` to show icon, any other value to hide |
| 39 | | | ```datatype``` | Values: ```1x```, ```3g```, ```4g```, ```e```, ```g```, ```h```, ```lte```, ```roam```, any other value to hide |
| 40 | | | ```level``` | Sets mobile signal strength level (null or 0-4) |
| 41 | | ```carriernetworkchange``` | | Sets mobile signal icon to carrier network change UX when disconnected (```show``` to show icon, any other value to hide) |
| John Spurlock | cf053c1 | 2015-05-14 16:33:59 -0400 | [diff] [blame] | 42 | | ```sims``` | | Sets the number of sims (1-8) |
| 43 | | ```nosim``` | | ```show``` to show icon, any other value to hide |
| Andrew Flynn | a47a660 | 2015-04-23 09:12:30 -0700 | [diff] [blame] | 44 | ```bars``` | | | Control the visual style of the bars (opaque, translucent, etc) |
| 45 | | ```mode``` | | Sets the bars visual style (opaque, translucent, semi-transparent) |
| 46 | ```status``` | | | Control the system status icons |
| 47 | | ```volume``` | | Sets the icon in the volume slot (```silent```, ```vibrate```, any other value to hide) |
| 48 | | ```bluetooth``` | | Sets the icon in the bluetooth slot (```connected```, ```disconnected```, any other value to hide) |
| 49 | | ```location``` | | Sets the icon in the location slot (```show```, any other value to hide) |
| 50 | | ```alarm``` | | Sets the icon in the alarm_clock slot (```show```, any other value to hide) |
| 51 | | ```sync``` | | Sets the icon in the sync_active slot (```show```, any other value to hide) |
| 52 | | ```tty``` | | Sets the icon in the tty slot (```show```, any other value to hide) |
| 53 | | ```eri``` | | Sets the icon in the cdma_eri slot (```show```, any other value to hide) |
| 54 | | ```mute``` | | Sets the icon in the mute slot (```show```, any other value to hide) |
| 55 | | ```speakerphone``` | | Sets the icon in the speakerphone slot (```show```, any other value to hide) |
| 56 | ```notifications``` | | | Control the notification icons |
| 57 | | ```visible``` | | ```false``` to hide the notification icons, any other value to show |
| 58 | ```clock``` | | | Control the clock display |
| 59 | | ```millis``` | | Sets the time in millis |
| 60 | | ```hhmm``` | | Sets the time in hh:mm |
| Andrew Flynn | 56aa4cf | 2015-04-20 09:18:29 -0400 | [diff] [blame] | 61 | |
| 62 | ## Examples |
| 63 | Enter demo mode |
| 64 | |
| 65 | ``` |
| 66 | adb shell am broadcast -a com.android.systemui.demo -e command enter |
| 67 | ``` |
| 68 | |
| 69 | |
| 70 | Exit demo mode |
| 71 | |
| 72 | ``` |
| 73 | adb shell am broadcast -a com.android.systemui.demo -e command exit |
| 74 | ``` |
| 75 | |
| 76 | |
| 77 | Set the clock to 12:31 |
| 78 | |
| 79 | ``` |
| 80 | adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm |
| 81 | 1231 |
| 82 | ``` |
| 83 | |
| 84 | |
| 85 | Set the wifi level to max |
| 86 | |
| 87 | ``` |
| 88 | adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi |
| 89 | show -e level 4 |
| 90 | ``` |
| 91 | |
| 92 | |
| 93 | Show the silent volume icon |
| 94 | |
| 95 | ``` |
| 96 | adb shell am broadcast -a com.android.systemui.demo -e command status -e volume |
| 97 | silent |
| 98 | ``` |
| 99 | |
| 100 | |
| 101 | Empty battery, and not charging (red exclamation point) |
| 102 | |
| 103 | ``` |
| 104 | adb shell am broadcast -a com.android.systemui.demo -e command battery -e level |
| 105 | 0 -e plugged false |
| 106 | ``` |
| 107 | |
| 108 | |
| 109 | Hide the notification icons |
| 110 | |
| 111 | ``` |
| 112 | adb shell am broadcast -a com.android.systemui.demo -e command notifications -e |
| 113 | visible false |
| 114 | ``` |
| 115 | |
| 116 | |
| 117 | Exit demo mode |
| 118 | |
| 119 | ``` |
| 120 | adb shell am broadcast -a com.android.systemui.demo -e command exit |
| 121 | ``` |
| 122 | |
| 123 | |
| 124 | ## Example demo controller app in AOSP |
| 125 | ``` |
| 126 | frameworks/base/tests/SystemUIDemoModeController |
| 127 | ``` |
| 128 | |
| 129 | |
| 130 | ## Example script (for screenshotting purposes) |
| 131 | ```bash |
| 132 | #!/bin/sh |
| 133 | CMD=$1 |
| 134 | |
| 135 | if [[ $ADB == "" ]]; then |
| 136 | ADB=adb |
| 137 | fi |
| 138 | |
| 139 | if [[ $CMD != "on" && $CMD != "off" ]]; then |
| 140 | echo "Usage: $0 [on|off] [hhmm]" >&2 |
| 141 | exit |
| 142 | fi |
| 143 | |
| 144 | if [[ "$2" != "" ]]; then |
| 145 | HHMM="$2" |
| 146 | fi |
| 147 | |
| 148 | $ADB root || exit |
| 149 | $ADB wait-for-devices |
| 150 | $ADB shell settings put global sysui_demo_allowed 1 |
| 151 | |
| 152 | if [ $CMD == "on" ]; then |
| 153 | $ADB shell am broadcast -a com.android.systemui.demo -e command enter || exit |
| 154 | if [[ "$HHMM" != "" ]]; then |
| 155 | $ADB shell am broadcast -a com.android.systemui.demo -e command clock -e |
| 156 | hhmm ${HHMM} |
| 157 | fi |
| 158 | $ADB shell am broadcast -a com.android.systemui.demo -e command battery -e |
| 159 | plugged false |
| 160 | $ADB shell am broadcast -a com.android.systemui.demo -e command battery -e |
| 161 | level 100 |
| 162 | $ADB shell am broadcast -a com.android.systemui.demo -e command network -e |
| 163 | wifi show -e level 4 |
| 164 | $ADB shell am broadcast -a com.android.systemui.demo -e command network -e |
| 165 | mobile show -e datatype none -e level 4 |
| 166 | $ADB shell am broadcast -a com.android.systemui.demo -e command notifications |
| 167 | -e visible false |
| 168 | elif [ $CMD == "off" ]; then |
| 169 | $ADB shell am broadcast -a com.android.systemui.demo -e command exit |
| 170 | fi |
| 171 | ``` |
| 172 | |