Renamed BootTimingsTraceLog to TimingsTraceLog. It is now used for
boot and shutdown logging.
Added measurements for main stages of shutdown in the system server:
ShutdownTiming: SendShutdownBroadcast took to complete: 734ms
ShutdownTiming: ShutdownActivityManager took to complete: 203ms
ShutdownTiming: ShutdownPackageManager took to complete: 17ms
ShutdownTiming: ShutdownBt took to complete: 533ms
ShutdownTiming: ShutdownRadio took to complete: 534ms
ShutdownTiming: ShutdownNfc took to complete: 1536ms
ShutdownTiming: ShutdownRadios took to complete: 1538ms
ShutdownTiming: ShutdownStorageManager took to complete: 906ms
ShutdownTiming: SystemServerShutdown took to complete: 3918ms
Bug: 64569080
Test: shutdown/reboot and check logs
Change-Id: I636c045852cd1ed6be1c58af6608f70e95756389
Turning overlays on and off takes time,
it also doesn't allow us to have fine control
over which view is using which theme.
Lock screen colors are now driven by themes.
Change-Id: Ie8860d00dbb0705ed76edf60a9d3030618dd21ca
Fixes: 63751714
Test: Visual. Set wallpapers, unlock.
Test: runtest -x packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
Test: runtest -x tests/Internal/src/com/android/internal/colorextraction/ColorExtractorTest.java
Test: systrace
Turning overlays on and off takes time,
it also doesn't allow us to have fine control
over which view is using which theme.
Lock screen colors are now driven by themes.
Change-Id: I4b5db6234cafebbe8eaa952781c038370a11488b
Fixes: 63751714
Test: Visual. Set wallpapers, unlock.
Test: runtest -x tests/Internal/src/com/android/internal/colorextraction/ColorExtractorTest.java
Test: systrace
Adds new mechanism for activities in sysui to be replaced by plugins
and allows that to happen for recents.
Test: runtest systemui
Change-Id: I8b570ce7c57484c58a52afe5e247d24ebfa0c57f
Logs will be used for boottime performance dashboard.
Test: device boots, SystemUIBootTiming records are logged
Bug: 38429582
Change-Id: I2e7b2fe3a38839880243a36b07fdb407a8f8c9d8
- Make detail panels not close when turned off
- Add auto-rule state for DND tile
Test: manual
Change-Id: I533cf0a27c54e84cd74ede72dcf10e2e5f9a070f
Fixes: 34765805
- This was added in ag/923778 for TV, where the TV recents activity, which
is started per-user, needed to reference the PiP bounds to coordinate the
layout of the PiP UI in recents. As a result of that change, the PiP
manager for both phones and TV was being instantiated multiple times,
once for the primary user, and another for secondary/managed users. With
each instantiation of the PipManager, we were re-registering the input
consumer, and once the process was killed, the input consumer was not
being cleaned up correctly and it not longer was registered with the
primary SystemUI which drives the PiP.
As of ag/1964066, the TV recents code is removed, so we can now safely
remove the PipUI component for secondary users as well, ensuring only a
single PipManager/InputConsumerController instance.
This does not prevent PiP from working in secondary users, but only
leaves the input consumer and menu controller in the primary user's
SystemUI.
- Fix some crashes when interacting with the PiP in a secondary user,
all communication between the menu controller and the menu activity
should be done in a parcelable way as the menu activity runs per-user
- Adding exception when the PipUI component is not created for the primary
user
- Initial changes to dump input consumers in WM to be able to correlate
them with SysUI's state
Bug: 35792308
Test: Ensure PiP component is not started for secondary user, verify that
it still works on secondary users
Change-Id: I3df10860227498bc37799ad296f0a4b71b87d30e
Signed-off-by: Winson Chung <winsonc@google.com>
- Move default global actions ui to sysui
- Add fallback legacy interface in case sysui breaks
- Switch to fallback if sysui dies or isn't responding
Test: Long-press power
Change-Id: I943522611de5dbbee61e66c67cf3a56379091e97
Adds a service for monitoring the amount of tracked garbage.
If it exceeds reasonable levels, a notification with a leak
report is posted.
Test: runtest systemui
Change-Id: Ib55281f2aac557743b97c46bc616688261c72e9c
Use annotations to handle the multi-dimensionalness of interface
versions, but still maintain compile time inclusion of current
versions.
Test: runtest systemui
Change-Id: I0789a72112cf6630a6406f76020071c8a6d9e24c
Lots of things detect overlays these days (installing apps) and the
only way to avoid the problems associated with this is to live in
the status bar window. So allow plugins to hold the window open
when they want to so they can have overlays be in that.
Move StatusBarWindowManager to Dependency to make things easier
as well.
Test: Install the example plugin, test can access QS and interact
with apps
Change-Id: Ib2288bf56704960847217bad01a480ab407e0ffe
Add support for testing for PluginManager and TunerService leaks
and add tests for the known leaks and fix them. Also port PluginManager
and TunerService to Dependency to make them easier to handle in
tests.
Test: runtest systemui
Change-Id: I5642539ee24dd72f802905106decd0c87b41b4eb
Fixes: 34846972
It is a relic of a more complex time, but has passed out of all
knowledge for too long.
Test: manual testing on phones and TV
Change-Id: I62a15d9413ea4bda3ac82bf6f7d22c096e2c1cdc
There are five channels at present:
ALERTS - low battery etc.
SCREENSHOTS - progress & result
SECURITY - notifications hidden due to policy
STORAGE - disk low
STATUS - basically everything else
The importance for each channel should match the legacy
priority of the notifications it carries.
Bug: 34250937
Test: runtest systemui
Change-Id: I5915ca453258caea63b0d9bd756893db05e8d600
Use a new system for constructing fragments so they can be swapped
out in place maintaining state. This will allow easier integration
with plugin lifecycle as parents who have child plugin fragments
can depend on the class existing and won't have to listen to
the lifecycle.
Test: runtest systemui
Change-Id: I517f4ce3d114abd49b1b5baca388d19e929b8f90
One of the many problems with PhoneStatusBar is that it holds
dependencies for many other parts of SysUI. Fix this by creating
a static method of grabbing dependencies that are global to sysui
this cleans up a lot of chains of interdependence.
Also add easy way to inject mocks of these dependencies for the
purpose of testing.
Test: runtest systemui
Change-Id: Ia0e947faea62d15b665facada47ac9916c99f895
Start hacking away at PhoneStatusBar by trying to pull out
as much NavigationBar logic as possible.
Test: runtest systemui
Change-Id: I23b904428be31b91f0747fd60c9f6e0dd323eb44
Allow for multiple callbacks to be added to CommandQueue.
This will allow PhoneStatusBar to be broken up into pieces
that make more sense.
Test: runtest systemui
Change-Id: I73a7da1c23c8e45a291e5957e7341f3930abc334
Add system to add fragments to sysui windows for better code
modularity and testability.
Bug: 32609190
Test: Manual
Change-Id: I2ae7ed6133aff3fc5cdbdb3ec89d55183b7ac797
Allows option in tuner to switch between system theme overlays
if multiple exist. Requires a restart to take effect.
Test: Settings -> Tuner -> Other -> Theme
Change-Id: Iea43b9cbb67fd91c6008be594ad4cfd19c3f57ec
- Adding basic behavior to move PIP window and launch back into
fullscreen, as well as drag it to dismiss.
Test: Deferring CTS tests as this interaction is only temporary and not
final
Change-Id: I5272a045090c20c45b345813d10dc385c3f83221
- Move latency fake actions into a central location, LatencyTester
- Add latency test for screen turning on
Change-Id: I8aa3f475d56a4ee7a36b97bd6ece32e60c5851cd
If user captures screenshot, screenshot process is started. Screenshot
process also starts services that is defined SERVICES_PER_USER.
As a result Recents class's object is unexpectedly constucted from
screenshot process, and cause to connect with system-user's SystemUI
with mUserToSystemServiceConnection. So, binder proxy from system-user's
SystemUI to secondary-user's SystemUI is replaced with proxy to
screenshot process. In this case Overview key doesn't work at all
until reboot.
Bug:30340532
Change-Id: I84b8b4a02ac3ff781e06d57be19cff56efa76521
Why this is safe:
- To never ever be used in production code, simply for rapid
prototyping (multiple checks in place)
- Guarded by signature level permission checks, so only matching
signed code will be used
- Any crashing plugins are auto-disabled and sysui is allowed
to continue in peace
Now on to what it actually does. Plugins are separate APKs that
are expected to implement interfaces provided by SystemUI. Their
code is dynamically loaded into the SysUI process which can allow
for multiple prototypes to be created and run on a single android
build.
-------
PluginLifecycle:
plugin.onCreate(Context sysuiContext, Context pluginContext);
--- This is always called before any other calls
pluginListener.onPluginConnected(Plugin p);
--- This lets the plugin hook know that a plugin is now connected.
** Any other calls back and forth between sysui/plugin **
pluginListener.onPluginDisconnected(Plugin p);
--- Lets the plugin hook know that it should stop interacting with
this plugin and drop all references to it.
plugin.onDestroy();
--- Finally the plugin can perform any cleanup to ensure that its not
leaking into the SysUI process.
Any time a plugin APK is updated the plugin is destroyed and recreated
to load the new code/resources.
-------
Creating plugin hooks:
To create a plugin hook, first create an interface in
frameworks/base/packages/SystemUI/plugin that extends Plugin.
Include in it any hooks you want to be able to call into from
sysui and create callback interfaces for anything you need to
pass through into the plugin.
Then to attach to any plugins simply add a plugin listener and
onPluginConnected will get called whenever new plugins are installed,
updated, or enabled. Like this example from SystemUIApplication:
PluginManager.getInstance(this).addPluginListener(OverlayPlugin.COMPONENT,
new PluginListener<OverlayPlugin>() {
@Override
public void onPluginConnected(OverlayPlugin plugin) {
PhoneStatusBar phoneStatusBar = getComponent(PhoneStatusBar.class);
if (phoneStatusBar != null) {
plugin.setup(phoneStatusBar.getStatusBarWindow(),
phoneStatusBar.getNavigationBarView());
}
}
}, OverlayPlugin.VERSION, true /* Allow multiple plugins */);
Note the VERSION included here. Any time incompatible changes in the
interface are made, this version should be changed to ensure old plugins
aren't accidentally loaded. Since the plugin library is provided by
SystemUI, default implementations can be added for new methods to avoid
version changes when possible.
-------
Implementing a Plugin:
See the ExamplePlugin for an example Android.mk on how to compile
a plugin. Note that SystemUILib is not static for plugins, its classes
are provided by SystemUI.
Plugin security is based around a signature permission, so plugins must
hold the following permission in their manifest.
<uses-permission android:name="com.android.systemui.permission.PLUGIN" />
A plugin is found through a querying for services, so to let SysUI know
about it, create a service with a name that points at your implementation
of the plugin interface with the action accompanying it:
<service android:name=".TestOverlayPlugin">
<intent-filter>
<action android:name="com.android.systemui.action.PLUGIN_COMPONENT" />
</intent-filter>
</service>
Change-Id: I42c573a94907ca7a2eaacbb0a44614d49b8fc26f
- For a non-primary user, this CL will ensure that the SystemUI process
is started when we are switched to the user. This allows us to
maintain our current user-management model for Recents, which depends
on this process for preloading and state management.
Bug: 27175589
Change-Id: Id985fc2876e6daf06f303b44c0f9d1d3fd377842
The registered shortcut will be called from PhoneWindowManager,
before dispatching
Change-Id: If26128939b45a639c8895719a7a23ca433f39fd9
(cherry picked from commit 4da863c5a8872dcabb179a978a2b2157d9081679)
- Exposing members of PhoneStatusBar, StatusBarKeyguardViewManager and
KeyguardBouncer to sub class;
- Add a configuable SystemUIFactory as class factory for components;
- Add logoutCurrentUser and switchToByUserId to UserSwitcherController;
BUG:22407003
Change-Id: I3902baf3c721d89217b27a6310c4202a198cb209
- Update visuals to spec
- Divider lifts when touching
- Implement basic version of snap points and animations
- Implement touch conflict behavior: If touched around 48x48dp
area around the handle, the divider handles all these touches.
If touched outside of the black background divider, touch goes
directly to underlying window. If touch on the black background
divider, touch is considered slippery and thus the window in
which the touch trace moves gets the touches.
Change-Id: I0307c191ae032672c4b73d439c23cf9833d3fce6
Move docked divider drawing to SysUI. This let's us have real
time shadows in the future. Keep DockedStackDividerController
for placing/visibility in window manager.
Change-Id: I82c10add626d30f2ba180ee2a21cdbe6ddfe0371