Commit Graph

67 Commits

Author SHA1 Message Date
Dan Sandler
f6e33b1b33 Revert "Add plugin to swap out recents"
This reverts commit 0ea67d82e3.

Bug: 64345190
Change-Id: I353c064db7bfaf91e98b5fd0d3e7180381a1b2b8
Test: n/a
2017-08-15 16:45:07 -04:00
Fyodor Kupolov
6e3461b67c Log timings for shutdown stages
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
2017-08-14 11:23:29 -07:00
Lucas Dupin
ef15776aaf resolve merge conflicts of a1f64b0a91 to oc-mr1-dev
Test: I solemnly swear I tested this conflict resolution.
Change-Id: Ic2395d055e1f27b186c3b87be5440dc410ee16a3
2017-07-25 12:00:01 -07:00
Lucas Dupin
e17ce5286f Fix jank when switching themes
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
2017-07-24 13:26:22 -07:00
Jorim Jaggi
7f58322d51 Revert "Fix jank when switching themes"
am: 6498f96283

Change-Id: Ie5813f1c04a6db9d5ee291df764873900add5064
2017-07-24 14:14:34 +00:00
Jorim Jaggi
6498f96283 Revert "Fix jank when switching themes"
This reverts commit e5d0b9dddb.

Fixes crashloop with lock pattern

Change-Id: I3721444c91e2be625c59ec3e6ba14f1080badc07
Fixes: 63980375
2017-07-24 15:53:42 +02:00
Lucas Dupin
902ba7bab5 Merge "Fix jank when switching themes" into oc-dr1-dev
am: a74f575ff9

Change-Id: Ibc8fa59cfa6139b03aa7fb08361eb43331484be5
2017-07-22 04:52:31 +00:00
Lucas Dupin
e5d0b9dddb Fix jank when switching themes
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
2017-07-20 22:44:36 -07:00
Jason Monk
daece35dc3 Merge "Add plugin to swap out recents" into oc-dr1-dev am: a69c03b6b1
am: 84510887b0

Change-Id: I5483d77315ae0db8c35e8535ea8e754908e3d235
2017-06-28 13:30:37 +00:00
Jason Monk
0ea67d82e3 Add plugin to swap out recents
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
2017-06-27 20:41:45 +00:00
Fyodor Kupolov
f3591359b9 Added boot time metrics for systemui
Logs will be used for boottime performance dashboard.

Test: device boots, SystemUIBootTiming records are logged
Bug: 38429582
Change-Id: I2e7b2fe3a38839880243a36b07fdb407a8f8c9d8
2017-06-26 11:04:39 -07:00
Jason Monk
d4afe152bf Rounded corners support, off by default.
Test: runtest systemui
Bug: 33208650
Change-Id: I63e11e36268e277cc1c5e70651fa5248aa8b3fc0
2017-05-10 08:27:34 -04:00
Jason Monk
be3235abcd Updates for QS DND tile
- Make detail panels not close when turned off
 - Add auto-rule state for DND tile

Test: manual
Change-Id: I533cf0a27c54e84cd74ede72dcf10e2e5f9a070f
Fixes: 34765805
2017-04-11 17:49:11 +00:00
Geoffrey Pitsch
790e091bca Create NotificationChannels in SystemUI per-user
Fixes Screenshot notification when guest plus others.

Bug: 36516812
Test: runtest systemui
Change-Id: I0d851a28ba9b134afc02c72fc3684c1d0be25c41
2017-03-24 13:37:13 -04:00
Winson Chung
2423c13507 Merge "Removing per-user PiP component." 2017-03-22 18:56:07 +00:00
Winson Chung
853c99a083 Removing per-user PiP component.
- 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>
2017-03-22 08:56:02 -07:00
Jason Monk
361915c727 Move global actions to sysui and add plugin interface
- 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
2017-03-22 09:41:34 -04:00
Jason Monk
d7937b3488 Merge "New system for versioning sysui plugins" 2017-02-15 20:49:05 +00:00
Jason Monk
790442e4cd Tuner updates
Some UX updates to the tuner to feel better and align with settings
UX patterns.

Test: visual
Change-Id: I9c57194b9649c61e0d6d3f9e21a51d9c4a5c1286
2017-02-15 13:35:00 -05:00
Adrian Roos
9125068a99 SysUiLeaks: Add GarbageMonitor
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
2017-02-11 21:57:10 +01:00
Jason Monk
5bec68fbea New system for versioning sysui plugins
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
2017-02-09 09:32:20 -08:00
Jason Monk
421a9410b4 SysUI: Add method for plugins to keep status bar full screen
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
2017-02-07 18:58:14 -05:00
Winson Chung
0c7592ffac Fixing crash when fetching SysUI components for secondary user.
Bug: 35028456
Test: Manual, launch the secondary user and try to enter recents.
Change-Id: I16c21b0f8222f885070550c25615be6b5dfa5b4c
2017-02-06 09:16:23 -08:00
Jason Monk
de850bbcaa Fix leaks in sysui
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
2017-02-02 10:58:18 -05:00
Jason Monk
2a6ea9c2a1 Delete BaseStatusBar
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
2017-01-26 15:17:45 -05:00
Dan Sandler
8e032e15e6 Notification Channels come to SystemUI's own notifications.
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
2017-01-25 23:37:06 -05:00
Jason Monk
20ff3f9255 SysUI fragments: Integrate new support for constructing
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
2017-01-23 16:28:03 -05:00
Jason Monk
9c7844cb91 Work on sysui dependencies
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
2017-01-23 12:55:53 -05:00
Jason Monk
49fa016a98 Move navigation bar logic to its own class
Start hacking away at PhoneStatusBar by trying to pull out
as much NavigationBar logic as possible.

Test: runtest systemui
Change-Id: I23b904428be31b91f0747fd60c9f6e0dd323eb44
2017-01-17 10:31:13 -05:00
Jason Monk
59d86ed2a8 Add one-shot plugin support
Should have happened a while ago.

Test: runtest systemui
Change-Id: I0da4deb5c297e8030213810815a408364ec97e14
2017-01-11 11:29:17 -05:00
Jason Monk
b5b0920170 Allow CommandQueue to have multiple callbacks
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
2017-01-09 12:51:56 -05:00
Adrian Roos
f9d13f6d7a Doze: Add plugin hook
Test: mmm vendor/google_experimental/users/roosa/DozePlugin/
Change-Id: I7ea55954f0c07be932e8ee7037e03b7c01cc1108
2016-11-18 15:59:00 -08:00
Jason Monk
3713151425 Merge changes I52007c69,I6503947e,Icf677f4a,I2ae7ed61
* changes:
  Unit testing for fragments.
  Plugin fragment support
  Move QS to a fragment
  Fragments in SysUI!
2016-11-11 16:38:57 +00:00
Jason Monk
bbac121e44 Fragments in SysUI!
Add system to add fragments to sysui windows for better code
modularity and testability.

Bug: 32609190
Test: Manual
Change-Id: I2ae7ed6133aff3fc5cdbdb3ec89d55183b7ac797
2016-11-11 11:19:15 -05:00
Jason Monk
97a06a12ed Add switchable theme to tuner
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
2016-11-11 09:01:20 -05:00
Winson
73bc159dcc Adding PIP logic for phones.
- 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
2016-10-24 11:31:07 -07:00
Jorim Jaggi
c3fe204780 More latency tests (1/2)
- Move latency fake actions into a central location, LatencyTester
- Add latency test for screen turning on

Change-Id: I8aa3f475d56a4ee7a36b97bd6ece32e60c5851cd
2016-10-07 18:54:21 +02:00
Jason Monk
fcdcf7f636 Merge "Plugins for sysui" 2016-09-19 16:54:12 +00:00
dooyoung.hwang
279c334633 Merge "Fix issue that Overview key doesn't work at secondary user" am: 5379f47d85 am: da9a9da520
am: 983f30a5a4

Change-Id: Ide8c2612c6cbf276eb72a2fc3957965656d6e1d5
2016-09-09 22:02:58 +00:00
dooyoung.hwang
b647984f04 Fix issue that Overview key doesn't work at secondary user
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
2016-09-07 16:03:17 +00:00
Jason Monk
86bc331889 Plugins for sysui
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
2016-09-02 11:33:22 -04:00
Adrian Roos
40ea083b59 Add way to set live wallpaper across users
Also adds an entry point for vendor specific services
to SystemUI.

Bug: 30038484
Change-Id: I8f335c1f7de15d619f2c688a8ac95372f166595f
2016-07-15 11:20:36 -07:00
Jaewan Kim
6a29c3e14f PIP: Fix crash in Recents when restrict profile is enabled
Bug: 28071518
Change-Id: I293f4e872990cca051c3395d2a51c2df59d71227
2016-04-12 18:07:07 +09:00
Winson
3c2c34bb03 Workaround to ensure that a SystemUI process is always available.
- 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
2016-04-05 15:54:59 -07:00
Muyuan Li
94ce94e960 Allows components to register shortcut key.
The registered shortcut will be called from PhoneWindowManager,
before dispatching

Change-Id: If26128939b45a639c8895719a7a23ca433f39fd9
(cherry picked from commit 4da863c5a8872dcabb179a978a2b2157d9081679)
2016-02-26 22:30:34 +00:00
Youngsang Cho
f164792472 Initial check-in of picture-in-picture system-ui
Bug: 26549507
Change-Id: I6c69b5e2b5492858fc997657b5a06d3e50ca16e3
2016-01-15 15:27:13 -08:00
Xiyuan Xia
1b30f79cff Refactoring for better extendability
- 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
2016-01-14 09:47:57 -08:00
Jorim Jaggi
dd98d41e3a Add gesture to drag in recents from navigation bar
Change-Id: I672ed08f1019835891411b87e2d0de0290defff7
2015-11-19 14:10:28 -08:00
Jorim Jaggi
1fcbab6ae5 Implement divider UX interactions
- 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
2015-11-06 16:17:57 +01:00
Jorim Jaggi
61f39a7b98 Migrate docked divider drawing to SysUI
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
2015-11-06 16:13:11 +01:00