• Home
Name Date Size #Lines LOC

..--

docs/03-May-2024-917669

legacy/recents/03-May-2024-26,20416,179

plugin/03-May-2024-2,7001,283

plugin_core/03-May-2024-414108

res/03-May-2024-124,65599,131

res-keyguard/03-May-2024-16,29813,331

scripts/03-May-2024-181142

shared/03-May-2024-6,6584,028

src/com/android/03-May-2024-211,324155,445

tests/03-May-2024-49,87535,745

tools/lint/03-May-2024-90,05989,062

Android.bpD03-May-20244.9 KiB204182

AndroidManifest.xmlD03-May-202430.9 KiB662473

MODULE_LICENSE_APACHE2D03-May-20240

NOTICED03-May-202410.4 KiB191158

OWNERSD03-May-2024840 4944

README.mdD03-May-20247.6 KiB173109

lint.xmlD03-May-2024106 44

proguard.flagsD03-May-20241.3 KiB3833

README.md

1# SystemUI
2
3“Everything you see in Android that's not an app”
4
5SystemUI is a persistent process that provides UI for the system but outside
6of the system_server process.
7
8The starting point for most of sysui code is a list of services that extend
9SystemUI that are started up by SystemUIApplication. These services then depend
10on some custom dependency injection provided by Dependency.
11
12Inputs directed at sysui (as opposed to general listeners) generally come in
13through IStatusBar. Outputs from sysui are through a variety of private APIs to
14the android platform all over.
15
16## SystemUIApplication
17
18When SystemUIApplication starts up, it will start up the services listed in
19config_systemUIServiceComponents or config_systemUIServiceComponentsPerUser.
20
21Each of these services extend SystemUI. SystemUI provides them with a Context
22and gives them callbacks for onConfigurationChanged (this historically was
23the main path for onConfigurationChanged, now also happens through
24ConfigurationController). They also receive a callback for onBootCompleted
25since these objects may be started before the device has finished booting.
26
27SystemUI and SystemUIApplication also have methods for putComponent and
28getComponent which were existing systems to get a hold of other parts of
29sysui before Dependency existed. Generally new things should not be added
30to putComponent, instead Dependency and other refactoring is preferred to
31make sysui structure cleaner.
32
33Each SystemUI service is expected to be a major part of system ui and the
34goal is to minimize communication between them. So in general they should be
35relatively silo'd.
36
37## Dependencies
38
39The first SystemUI service that is started should always be Dependency.
40Dependency provides a static method for getting a hold of dependencies that
41have a lifecycle that spans sysui. Dependency has code for how to create all
42dependencies manually added. SystemUIFactory is also capable of
43adding/replacing these dependencies.
44
45Dependencies are lazily initialized, so if a Dependency is never referenced at
46runtime, it will never be created.
47
48If an instantiated dependency implements Dumpable it will be included in dumps
49of sysui (and bug reports), allowing it to include current state information.
50This is how \*Controllers dump state to bug reports.
51
52If an instantiated dependency implements ConfigurationChangeReceiver it will
53receive onConfigurationChange callbacks when the configuration changes.
54
55## IStatusBar
56
57CommandQueue is the object that receives all of the incoming events from the
58system_server. It extends IStatusBar and dispatches those callbacks back any
59number of listeners. The system_server gets a hold of the IStatusBar when
60StatusBar calls IStatusBarService#registerStatusBar, so if StatusBar is not
61included in the XML service list, it will not be registered with the OS.
62
63CommandQueue posts all incoming callbacks to a handler and then dispatches
64those messages to each callback that is currently registered. CommandQueue
65also tracks the current value of disable flags and will call #disable
66immediately for any callbacks added.
67
68There are a few places where CommandQueue is used as a bus to communicate
69across sysui. Such as when StatusBar calls CommandQueue#recomputeDisableFlags.
70This is generally used a shortcut to directly trigger CommandQueue rather than
71calling StatusManager and waiting for the call to come back to IStatusBar.
72
73## Default SystemUI services list
74
75### [com.android.systemui.Dependency](/packages/SystemUI/src/com/android/systemui/Dependency.java)
76
77Provides custom dependency injection.
78
79### [com.android.systemui.util.NotificationChannels](/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java)
80
81Creates/initializes the channels sysui uses when posting notifications.
82
83### [com.android.systemui.statusbar.CommandQueue$CommandQueueStart](/packages/SystemUI/src/com/android/systemui/sstatusbar/CommandQueue.java)
84
85Creates CommandQueue and calls putComponent because its always been there
86and sysui expects it to be there :/
87
88### [com.android.systemui.keyguard.KeyguardViewMediator](/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java)
89
90Manages keyguard view state.
91
92### [com.android.systemui.recents.Recents](/packages/SystemUI/src/com/android/systemui/recents/Recents.java)
93
94Recents tracks all the data needed for recents and starts/stops the recents
95activity. It provides this cached data to RecentsActivity when it is started.
96
97### [com.android.systemui.volume.VolumeUI](/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java)
98
99Registers all the callbacks/listeners required to show the Volume dialog when
100it should be shown.
101
102### [com.android.systemui.stackdivider.Divider](/packages/SystemUI/src/com/android/systemui/stackdivider/Divider.java)
103
104Shows the drag handle for the divider between two apps when in split screen
105mode.
106
107### [com.android.systemui.SystemBars](/packages/SystemUI/src/com/android/systemui/SystemBars.java)
108
109This is a proxy to the actual SystemUI for the status bar. This loads from
110config_statusBarComponent which defaults to StatusBar. (maybe this should be
111removed and copy how config_systemUiVendorServiceComponent works)
112
113### [com.android.systemui.status.phone.StatusBar](/packages/SystemUI/src/com/android/systemui/status/phone/StatusBar.java)
114
115This shows the UI for the status bar and the notification shade it contains.
116It also contains a significant amount of other UI that interacts with these
117surfaces (keyguard, AOD, etc.). StatusBar also contains a notification listener
118to receive notification callbacks.
119
120### [com.android.systemui.usb.StorageNotification](/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java)
121
122Tracks USB status and sends notifications for it.
123
124### [com.android.systemui.power.PowerUI](/packages/SystemUI/src/com/android/systemui/power/PowerUI.java)
125
126Tracks power status and sends notifications for low battery/power saver.
127
128### [com.android.systemui.media.RingtonePlayer](/packages/SystemUI/src/com/android/systemui/media/RingtonePlayer.java)
129
130Plays ringtones.
131
132### [com.android.systemui.keyboard.KeyboardUI](/packages/SystemUI/src/com/android/systemui/keyboard/KeyboardUI.java)
133
134Shows UI for keyboard shortcuts (triggered by keyboard shortcut).
135
136### [com.android.systemui.pip.PipUI](/packages/SystemUI/src/com/android/systemui/pip/PipUI.java)
137
138Shows the overlay controls when Pip is showing.
139
140### [com.android.systemui.shortcut.ShortcutKeyDispatcher](/packages/SystemUI/src/com/android/systemui/shortcut/ShortcutKeyDispatcher.java)
141
142Dispatches shortcut to System UI components.
143
144### @string/config_systemUIVendorServiceComponent
145
146Component allowing the vendor/OEM to inject a custom component.
147
148### [com.android.systemui.util.leak.GarbageMonitor$Service](/packages/SystemUI/src/com/android/systemui/util/leak/GarbageMonitor.java)
149
150Tracks large objects in sysui to see if there are leaks.
151
152### [com.android.systemui.LatencyTester](/packages/SystemUI/src/com/android/systemui/LatencyTester.java)
153
154Class that only runs on debuggable builds that listens to broadcasts that
155simulate actions in the system that are used for testing the latency.
156
157### [com.android.systemui.globalactions.GlobalActionsComponent](/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsComponent.java)
158
159Shows the global actions dialog (long-press power).
160
161### [com.android.systemui.ScreenDecorations](/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java)
162
163Draws decorations about the screen in software (e.g. rounded corners, cutouts).
164
165### [com.android.systemui.biometrics.BiometricDialogImpl](/packages/SystemUI/src/com/android/systemui/biometrics/BiometricDialogImpl.java)
166
167Biometric UI.
168
169---
170
171 * [Plugins](/packages/SystemUI/docs/plugins.md)
172 * [Demo Mode](/packages/SystemUI/docs/demo_mode.md)
173