• Home
  • History
  • Annotate
  • only in /frameworks/base/packages/SystemUI/plugin/src/com/
History log of /frameworks/base/packages/SystemUI/plugin/src/com/
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
b3a6aed980c4dddbd8a12799340154b7f64f9476 11-May-2018 Mady Mellor <madym@google.com> Add 'Snooze' to local context menu for notifications

Bug: 34840333
Test: manual - 1. turn talkback on
2. have a notification focused
3. invoke local context menu, note that 'snooze' is an option
4. select snooze, note that notification is snoozed

Change-Id: Id3ea62a0a9e5c2b8893aa5b548e64bb2b341d7a2
ndroid/systemui/plugins/statusbar/NotificationMenuRowPlugin.java
4c9048c364abcfa5edd26706f59c306c2ed772af 20-Apr-2018 Amin Shaikh <ashaikh@google.com> Ensure QS tile secondary text marquees.

Update the logic to marquee only the currently selected page.

Change-Id: Idc2398e1c67c614414ae4298c43a1609431c62fa
Fixes: 78159844
Test: visual
ndroid/systemui/plugins/qs/QSTileView.java
b17c2388a5b31b4a0411fda2dac84af06b2478b9 30-Mar-2018 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Control the QS label marquees." into pi-dev
ac55e01e1c8b67603134846c9b63002cc28aef48 27-Mar-2018 Julia Reynolds <juliacr@google.com> Volume UI updates

- Reorder streams
- constrain ripples
- Show an introductory ripple on the ringer toggle
- Add sound/vibration feedback for the ringer toggle
- resize some elements

Test: manual
Bug: 76438403
Fixes: 73892482
Change-Id: I92dd6f5681f1822ae493a5a2b218b15970293e80
ndroid/systemui/plugins/VolumeDialogController.java
0f8ea543c165102e079b0a64afdfc600fe5e0387 27-Mar-2018 Amin Shaikh <ashaikh@google.com> Control the QS label marquees.

- Start the marquee when fully expanded and pause when collapsed.
- Also do not change qs label to multiline once it's already been resized
to single line.

Change-Id: I2dd4f6b5473a6a5147999c29441537227751b705
Fixes: 74757991
Test: visual
ndroid/systemui/plugins/qs/QSTileView.java
2ea93b708dbc49235b42e76a587d5f353638040f 14-Mar-2018 Matthew Ng <ngmatthew@google.com> Revert "Revert "Centralized quick step/scrub/switch logic (1/2)""

This reverts commit 0e490d9208de480ed38fe31a12029fc59b0955e9.

Reason for revert: Will be merged with fix
Bug: 74726495
Test: manual

Change-Id: I36ea9c2702107b23eff4adb1f3ba9fdc1be12999
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
0e490d9208de480ed38fe31a12029fc59b0955e9 14-Mar-2018 Winson Chung <winsonc@google.com> Revert "Centralized quick step/scrub/switch logic (1/2)"

This reverts commit b06ae3bf131b0bd0ded398d3a06974a6a9d78a50.

Reason for revert: b/74726495
Bug: 74726495

Change-Id: I4bce8df13f9fa9e1b420382f7a96f9855510196f
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
b06ae3bf131b0bd0ded398d3a06974a6a9d78a50 07-Mar-2018 Matthew Ng <ngmatthew@google.com> Centralized quick step/scrub/switch logic (1/2)

Moved all the logic for quick step/scrub/switch to QuickStepController
so touch events can be used for deciding which gesture is used. Once a
gesture is decided, the rest will not handle the other gestures.

Quickstep will trigger when passing a touch slop on navigation bar. The
event onQuickStep (with a motion event) will be sent to launcher when
this occurs telling it that systemui is not handling anymore motion
events. During quickstep motion events will still be proxied.

Used raw X and Y motion events for Opalayout and KeyButtonView so that
the moving over the touch slop can be detected to ignore button (long)
press state.

Fixes: 73971902
Fixes: 74456391
Test: swipe up
Change-Id: I40b931aa0a9f123b810ff9206c9b1ce040a68a56
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
b586745d86a7335901646da128ef296e80ba0a22 28-Feb-2018 Julia Reynolds <juliacr@google.com> Show app ops guts when tap app ops icons

Test: runtest systemui
Bug: 64085448
Change-Id: Ia51044f77311ab705ffb9dd1ae204d0131316396
ndroid/systemui/plugins/statusbar/NotificationMenuRowPlugin.java
d696476fb31a203db38c7c31c347b27c8fda84ef 16-Feb-2018 Beverly <beverlyt@google.com> System sounds get its own dnd toggle

- Added logic for streams to be muted by dnd (unassociated with ringer)

Test: runtest -x frameworks/base/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
Bug: 73362490
Change-Id: I1101e67282f7331497e91eb510d2bf4f1ea6b4b1
ndroid/systemui/plugins/VolumeDialogController.java
ee57193bb63ba64db1bfd70d9932588ebee7c5ff 21-Feb-2018 Julia Reynolds <juliacr@google.com> New small volume dialog

- Remove labels
- Remove output chooser dialog
- Reorder icons
- Add settings affordance
- Add instructive toast

Test: manual
Change-Id: I6640fb8147707936fe22e3c756ab29116973fbe3
Fixes: 73719758
Fixes: 73333233
Fixes: 71663761
ndroid/systemui/plugins/VolumeDialogController.java
a840199853836d04a07a3d49b79bdb908d70a8fe 26-Jan-2018 Rohan Shah <shahrk@google.com> [QS] Fix irritating animation for QS

We're animating 2x the icons and, due to the transparent grey
background color, it looked like the icons were getting darker.

Fixed by having it exclude the full icon frame while animating.

Test: Visually
Bug: 72173914
Change-Id: Ie36973ab44a86e6e1edd99b9266420a274d9aaa2
ndroid/systemui/plugins/qs/QSTileView.java
925cde8f745c4cf946d0e215d306d2b134ca44de 23-Jan-2018 Beverly <beverlyt@google.com> Alarms and Media visibly muted in PriorityOnly dnd

- if alarms and/or media cannot pass dnd and the phone is currently
in priority only dnd, then the alarm and/or media volume stream
will appear muted in the volume dialog and sound settings
(Settings > Sound)
- if all behavior for priority only dnd is not allowed to bypass dnd
(discluding alarms and media), then ringer is muted when priority-only
dnd mode is on. If a user clicks this ringer in the volume dialog, then
dnd ends
- Updated default zen config to version 3 (added alarms and media)
Test: manually toggle alarms + media in Settings > Sound > DND >
Behavior, toggle on/off dnd and then look at volume dialog and
volume bars in Settings > Sound
Test: runtest --path cts/tests/tests/media/src/android/media/cts/AudioManagerTest.java
Fixes: 72052742

Change-Id: Ia9e809ec2be93cb5a9ba6518dce04bf3ce45110b
ndroid/systemui/plugins/VolumeDialogController.java
1d92689eeec1559ab9653f7dfc708f52596fadf4 25-Jan-2018 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Add QS scrolling support"
6692b47d37e21cb0768129bfb875ab8322f08bff 24-Jan-2018 Julia Reynolds <juliacr@google.com> Display the current connected audio device

If connected via bluetooth.

Also fix long press behavior on the ringer footer, and
change the output chooser icon.

Test: manual
Bug: 63096355
Change-Id: I2c4d86fb03f8ac38721b6fc580bba45871d59f5d
ndroid/systemui/plugins/VolumeDialogController.java
231b052d1f04d8b8835addc4f393f0e4fc58d5d2 04-Jan-2018 Jason Monk <jmonk@google.com> Add QS scrolling support

The brightness slider and tile layout are now a scrollview and
can handle nested scrolling between the views. There is some
black magic which manages the touches to allow a scroll up to
continue into a collapse gesture.

TODO: need to add edge effect colors to theme

Test: visual
Bug: 70799330
Change-Id: Ief0c1480f001cae62175c8ac4f3784daaa0ed2b8
ndroid/systemui/plugins/qs/QS.java
c17b7d9143c029f5f17232dab6a06137b32aa7ac 15-Jan-2018 Jason Monk <jmonk@google.com> Add support for secondary text in QS

Test: visual
Bug: 70799372
Change-Id: I64b1d050807e69f1755604e0baff94b89c9aeb2b
ndroid/systemui/plugins/qs/QSTile.java
a8f2426df625915553c3d85af8e6241f47fdf160 19-Dec-2017 Matthew Ng <ngmatthew@google.com> Beginning implementation of quickscrub (1/3)

When enabled via launcher, the home button is able to be be pulled to
the right side to send events to launcher via binder calls of when the
quick scrub operation starts, ends and progress changes between each
interval. Launcher will use this information to determine how the
recents apps are laid out with vibration feedback.

When the home button is pulled and released under 150ms, quick switch
will occur. A binder call will tell launcher to switch to the previous
app used.

While quick scrub or switch is active, launcher will not get any nav
bar motion events, only events for quick scrub and switch.

Bug: 67957962
Bug: 70180755
Test: enable new experience via launcher settings
Change-Id: I344f5d67f259ff454205ea4d2e95140f783d3b5c
ndroid/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
daad3da642c6645082b14b39d45a665a4a502cf0 18-Oct-2017 Evan Laird <evanlaird@google.com> Merge "Fix incorrect colors for CustomTile in QS" into oc-mr1-dev am: 859f8c4a21
am: e5d55d52b6

Change-Id: I7ab8bd9a58a7582286e73f1888b81d4a745eac24
b3daf2b88c86243db85dd8425df8d3a59d3b3d4d 17-Oct-2017 Evan Laird <evanlaird@google.com> Fix incorrect colors for CustomTile in QS

Add support for Supplier<Icon> in QSTile.State, allowing a method for
CustomTile not to cache the drawable for its IconViews. This fixes the
problem that the ImageViews in QQS and QS were trying to use the same
drawable and putting it in a bad state.

Test: Add 3rd party tile to first position in QS and turn on/off; visual
Change-Id: I408d6391a718fcb3f847e72bd303551d2d004dbb
Fixes: 67356768
ndroid/systemui/plugins/qs/QSTile.java
9851a8da998acdc657c8bc619657f6ff61ef44f3 10-Oct-2017 Charles He <qiurui@google.com> StatusBar: add DISABLE2_GLOBAL_ACTIONS.

We add a new StatusBarManager flag to disable the global actions dialog
(a.k.a. the power button menu), which is required in certain kiosk mode
scenarios.

Bug: 65813398
Test: runtest systemui
Test: manual, by using a modified version of TestDPC and
DevicePolicyManagerService

Change-Id: Ib7da2f4837281e98e558afcc30be8bae6f2e179a
ndroid/systemui/plugins/GlobalActions.java
d2aa1351c99cd8d82b2d826a9caed0706301642b 25-Aug-2017 Jason Monk <jmonk@google.com> Roll back nav bar interface to version 2

Partial revert of If27641aedcd05ebc834c9dc0b38d18cd20ddae03

Test: make
Change-Id: I47de1ca026028e16e6c4075e6be5b18a9746962c
Fixes: 65055647
ndroid/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
d33fe05c66b8423d956c55f0cc6a74269cd94adc 17-Aug-2017 Daniel Sandler <dsandler@android.com> Merge changes from topic "revert-injectors" into oc-mr1-dev

* changes:
Revert "Add API to allow apps more control over instantiation"
Revert "Add plugin to swap out recents"
f6e33b1b3330784ba7386d0c889d68f7f45bb1ae 15-Aug-2017 Dan Sandler <dsandler@android.com> Revert "Add plugin to swap out recents"

This reverts commit 0ea67d82e39ef4a2a1dfecd4796ab3e901cbc9e1.

Bug: 64345190
Change-Id: I353c064db7bfaf91e98b5fd0d3e7180381a1b2b8
Test: n/a
ndroid/systemui/plugins/PluginActivity.java
ndroid/systemui/plugins/PluginDependency.java
98cdafb19192c5554319e0dc5f67a529cdac8640 15-Aug-2017 Annie Chin <afchin@google.com> Remove ButtonInterface.setCarMode()

Bug: 63444779
Test: Android Auto still functions
Change-Id: If27641aedcd05ebc834c9dc0b38d18cd20ddae03
ndroid/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
0b99402f87ce1d8275dc60d98c2c12ccc0d9aceb 08-Aug-2017 Jason Monk <jmonk@google.com> resolve merge conflicts of de0c539dd4f1 to oc-mr1-dev

Test: I solemnly swear I tested this conflict resolution.
Change-Id: I3f5eb2a0481fb09b98c0c522c82c233350c06375
b4302182bc916ba0f5ee08756c1b2d15cb845874 04-Aug-2017 Jason Monk <jmonk@google.com> Move shutdown UI to sysui (when possible)

Test: click restart or power off in global actions
Change-Id: I0dc30a9772bbfb3cd3c3568f157e854fef87bf87
Fixes: 63576195
Fixes: 64125291
ndroid/systemui/plugins/GlobalActions.java
54daefe3aa8dcdee149ce95fd4f8ecf60632c9f1 08-Apr-2017 Anthony Chen <ajchen@google.com> Use custom QS fragment for auto use-case.

Use a custom QS fragment if the UI mode is car. This fragment disables
the quick settings row and expansion. Remove the config options that
used to have disabled this in the phone QSFragment.

To accomplish this, introduce a new QSFooter interface. The old
QSFooter.java now implements this.

Test: boot on phone and Android Auto headunit
Bug: 33210494
Change-Id: I5accc2d27d6725380ca5e271d332a03991c9419b
ndroid/systemui/plugins/qs/QS.java
0ea67d82e39ef4a2a1dfecd4796ab3e901cbc9e1 07-Jun-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/PluginActivity.java
ndroid/systemui/plugins/PluginDependency.java
51278d6a279ed28e4092b0975da376f8c89ad499 21-Jun-2017 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Add customs accessibility actions to snooze, allow it to be focused" into oc-dr1-dev
644f8e858318867ac5d9caf96cc89f23ed0e9f90 14-Jun-2017 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Add plugin hooks to DozeService" into oc-dr1-dev
f33a097232f153e8dfeabd222d8809cd6a8d9457 13-Jun-2017 Mady Mellor <madym@google.com> Add plugin hooks to DozeService

- Find out when the dreaming starts / stops
- Request the doze UI to show / hide

Bug: 62534409
Test: manual, have no plugin, check that doze still works as expected (i.e.
pick up gesture shows it, noti shows it)
Change-Id: I11618e47e0bab18423f0d89c8daf285d8c14d238
ndroid/systemui/plugins/DozeServicePlugin.java
920fd89aefee6b39aa634d6bb49c0669a86a63e3 06-Jun-2017 Mady Mellor <madym@google.com> Add customs accessibility actions to snooze, allow it to be focused

- Add plumbing for accessibility action IDs, enabling custom
accessibility options in the local context menu
- Allow snooze view to be focusable
- When option is selected announces the selection via window state change

Test: manual
Bug: 34840333
Change-Id: Idca0b0e00e792d3e3f71fc6a15b9b26d9136f6da
ndroid/systemui/plugins/statusbar/NotificationSwipeActionHelper.java
f3f6ddf7cb9641b40c3eb7ddde4565e06ded8b6c 12-Jun-2017 Mady Mellor <madym@google.com> Merge "Updates to NotificationMenuRowPlugin so that long press may be captured" into oc-dr1-dev
4ab2820e6c668ae7c55b300f126bb9f70c202ba3 06-Jun-2017 Mady Mellor <madym@google.com> Updates to NotificationMenuRowPlugin so that long press may be captured

This will allow the NotificationMenuRow plugin to do something else
rather than showing a menu when the view is long pressed.

- Allow menu to intercept touch events
- If the menu item provided to long press is null, don’t show it
- Also passes the status bar notification when the menu is created
or updated

Bug: 62534409
Test: manual, have no plugin and long press -> see notification info
have a plugin that returns null for long press -> nothing happens
Change-Id: I384c5217d5343e990f4c3506eb2477b015705e5c
ndroid/systemui/plugins/statusbar/NotificationMenuRowPlugin.java
8f8b5ac031ca3b2c44341a24e2e6429aa99f83fd 09-Jun-2017 Jason Monk <jmonk@google.com> Merge "Add notification listener plugin hook" into oc-dr1-dev
98bf8ba30c51ccfdd5bef1d40123dca40fdf7cf9 08-Jun-2017 Jason Monk <jmonk@google.com> Add notification listener plugin hook

Allows plugin control over notifications right at the entrance
to sysui and gives them the opportunity to mess with them how
they see fit.

Test: manual
Change-Id: I569bf37138da66d0524acecfa36ceb409f98fbb4
ndroid/systemui/plugins/NotificationListenerController.java
d7dab0f36f9e6568809b01964a1120f9827cc944 08-Jun-2017 Jason Monk <jmonk@google.com> resolve merge conflicts of a5b457b3bf6f to oc-dr1-dev

Test: I solemnly swear I tested this conflict resolution.
Change-Id: I2aa49bfdbd2c44684d0edb21b52520fea406e167
01df36f37fc470d3fd8c120b09cc4e7943cfacfb 07-Jun-2017 Jason Monk <jmonk@google.com> Move QS cell indicator back into mobile data tile

Remove it from the header and drop it back in its old location.

This reverts commit 10b4c8a4ab3fc1fd55e5a636066e210ad17cf92b.

Test: runtest systemui
Fixes: 62331189
Change-Id: I087589c256894e0972656619e665b6a16536ce6c
ndroid/systemui/plugins/qs/QSTile.java
cbff978fb4b3cf9a00414c1a6afde031eff3df7a 26-May-2017 Mady Mellor <madym@google.com> Merge "Check for false touches when determining if the notif menu should be shown" into oc-dev am: 70739fb812
am: 2cd3e9c500

Change-Id: I393a87e48487ec51fc563cc1cb9f50d604970dc0
70739fb812e2acb9880c008941015a467fca2001 26-May-2017 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Check for false touches when determining if the notif menu should be shown" into oc-dev
2775a1d82d7382095b1197c4e055f139285b84f4 26-May-2017 Jason Monk <jmonk@google.com> Merge "Fix up the QS gutter" into oc-dev am: 78ee090f78
am: f4968f3c98

Change-Id: I9b7d99aa2b519c8c9629dbec32d22c906f0456f7
bd707492a2ef3641a9e9a64ef72b3b031dac0bb6 11-May-2017 Mady Mellor <madym@google.com> Check for false touches when determining if the notif menu should be shown

If it's a false touch don't show the menu.

Test: manual: try swiping things away on the lockscreen (fast + long)
try showing notification menu on the lockscreen
Bug: 38208094

Change-Id: I16ceedd90a5fbc80156a9495d6cfd6fa02771886
ndroid/systemui/plugins/statusbar/NotificationSwipeActionHelper.java
4de5d3c03dfc49a1cdf7f9e9a0676c36987cea06 24-May-2017 Jason Monk <jmonk@google.com> Fix up the QS gutter

- Don't show when collapsed, show divider instead
- Don't show when no notifications
- Animate between states while expanding/collapsing
- Other visual cleanup

Test: visual
Change-Id: I923c963fa70d63601b6a181299b04c5fc49922bb
Fixes: 38199857
Fixes: 38483355
Fixes: 38409326
Fixes: 38417776
ndroid/systemui/plugins/qs/QS.java
97d52db8541de930871322847a36467c7a293e3b 10-May-2017 Mady Mellor <madym@google.com> Merge "Fixes issue where the notification menu was not visible after RTL changes" into oc-dev
395617fd35ef0e712945359a760a00eb1aaf7475 05-May-2017 Jason Monk <jmonk@google.com> Start drawing QS slashes rather than using AVDS

These need a bit more work like length control and animations, etc.
but this is a decent start.

Test: visual
Change-Id: I750d777b2b4a19f8c586066712f5a3f7e79befd6
ndroid/systemui/plugins/qs/QSTile.java
d9c2232c9952d204a774041305b1ad5ce3d13715 05-Apr-2017 Mady Mellor <madym@google.com> Fixes issue where the notification menu was not visible after RTL changes

- Altered how the menu location is set so that it doesn't depend on RTL
state
- Also fixes an issue where if you change from landscape to portrait or
vice versa then the menu wouldn't be visible because the placement is
based on the width of the notification which changes based on orientation

Test: (1) have notifications and show the menu, toggle the RTL state,
show the menu, note that it is visible
(2) have notifications and show the menu, rotate the device, note
that the menu is still visible
Fixes: 36874498
Merged-In: I33b8f87e53a3393a2802842ad2196c9d089ec7fc
Merged-In: I3a3b688f2b301f5ac0446a55b668db79c323a95c
Change-Id: I3a3b688f2b301f5ac0446a55b668db79c323a95c
ndroid/systemui/plugins/statusbar/NotificationMenuRowPlugin.java
767e2fe523706242197391d3aa2afa0a2ba076b4 03-May-2017 Jason Monk <jmonk@google.com> Merge "Fix QS visibility logs missing some info" into oc-dev am: df9b2e8d80
am: 86cc4bbac5

Change-Id: Ib765a9aa0807ddd074b3ff4b066c8f79eb2751a8
df9b2e8d808b0ba901575fc0ddff944de4887bfc 03-May-2017 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Fix QS visibility logs missing some info" into oc-dev
cb4b31d396df49bd55db64b1c40122656c6ec534 03-May-2017 Jason Monk <jmonk@google.com> Fix QS visibility logs missing some info

Test: runtest systemui
Change-Id: I6deb71576b137dfbd51f863e88ad939d4f3fab1b
Fixes: 35454347
ndroid/systemui/plugins/qs/QSTile.java
673c07f3da0a7e5f21bd50549c1a3ccbea7deff0 03-May-2017 Adrian Roos <roosa@google.com> Merge "DozePlugin: Remove" into oc-dev am: b2484f2258
am: 825b574892

Change-Id: I5994fbdd9cc15c1dc42fbecd63792eb2214ab017
9d03a5254f5c7ac00071d56b91ddc15a3d761ed6 05-Apr-2017 Mady Mellor <madym@google.com> Fixes issue where the notification menu was not visible after RTL changes

- Altered how the menu location is set so that it doesn't depend on RTL
state
- Also fixes an issue where if you change from landscape to portrait or
vice versa then the menu wouldn't be visible because the placement is
based on the width of the notification which changes based on orientation

Test: (1) have notifications and show the menu, toggle the RTL state,
show the menu, note that it is visible
(2) have notifications and show the menu, rotate the device, note
that the menu is still visible
Fixes: 36874498
Change-Id: I3a3b688f2b301f5ac0446a55b668db79c323a95c
ndroid/systemui/plugins/statusbar/NotificationMenuRowPlugin.java
664c9d7d161cd49ec9b71fee6aa29ca5175c2890 29-Apr-2017 Adrian Roos <roosa@google.com> DozePlugin: Remove

The DozePlugin has not been able to keep up with the changes to DozeMachine.
At this point it is cleaner to just remove it.

Bug: 30876804
Test: make SystemUI
Change-Id: Ie8cd1488eb862017c54b92b1fba07537c0143bff
ndroid/systemui/plugins/doze/DozeProvider.java
4c19760b9131a67b379f9b7060c5830cb5beaad7 11-Apr-2017 Mady Mellor <madym@google.com> Don't offer snooze for foreground service notifications

Also updates NotificationMenuRow tests to actually check if menu
was created.

Test: Manual, have foreground service, check if snooze is visible
Bug: 37152715
Change-Id: I09cf60598c3e8991f2da731da1ef7e0a718c3435
ndroid/systemui/plugins/statusbar/NotificationMenuRowPlugin.java
e645aee45a7784d772e4bdf846dd2e77335f30f2 31-Mar-2017 Jason Monk <jmonk@google.com> QS: Add transient icon for hotspot

Will make the loading time more clear.

Test: visual
Bug: 32270851
Change-Id: I0ea7591da132ff65fb7fc16b03b2891891e66598
ndroid/systemui/plugins/qs/QSTile.java
c7146beabe21c84248c2c62336b0af8c2f19f4f5 29-Mar-2017 George Mount <mount@google.com> Make public getFragments() and onGetLayoutInflater() methods

Bug 34703669
Test: I846ef668e3dd7d664cfb56d2b9400467ba9b79f4
Change-Id: Ie202960ada86b25e964f98a639b5f5740c8fdb79
ndroid/systemui/plugins/PluginFragment.java
be976024a847e1f72e1000b36e25729344a8c6cd 24-Mar-2017 Mady Mellor <madym@google.com> Merge "Add plugin interfaces to control notification menu / swipe behavior"
782cd6711bc15e3f03456210b3543a67606d6591 22-Mar-2017 Jason Monk <jmonk@google.com> Create plugin interface for volume dialog

Very few logic changes, mostly just breaking out certain interfaces
and classes to the plugin lib.

Test: make + volume keys
Change-Id: Ieabc6d35f6ef980842849236a0b8ffd5543b3a2c
ndroid/systemui/plugins/VolumeDialog.java
ndroid/systemui/plugins/VolumeDialogController.java
95d743c38c919dd500d9dcacf9f998500d403d9e 10-Jan-2017 Mady Mellor <madym@google.com> Add plugin interfaces to control notification menu / swipe behavior

1) Updates the notification menu plugin to do more:
- The plugin can now supply the view it wants to display behind a
notification as the menu
- Touch interaction (i.e. notification translating on top) is piped
through to the plugin so it can update the view behind the notification

2) Makes NotificationMenuRow an implementor of the plugin which moves
a bunch of that logic out of NotificationStackScroller

Test: runtest systemui
Change-Id: I8723b96c195ff7311317d5523418cfcbe2a79b52
ndroid/systemui/plugins/statusbar/NotificationMenuRowPlugin.java
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
ndroid/systemui/plugins/statusbar/NotificationSwipeActionHelper.java
361915c727fc2ad137bfeed7ff74b3eadde96597 22-Mar-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/GlobalActions.java
e5b770e47d44a40d412c7d42010b2cf67920d9e3 04-Mar-2017 Jason Monk <jmonk@google.com> Updated QS UI

- Adds footer to QS which contains the date/alarm info
and all touch targets (settings, edit, etc.)
- Swaps out emergency + carrier text on cell tile for a
standard CarrierText from lock screen in the header
to make the header only contain status info.
- Add dividing line
- Work on animations

Test: runtest systemui
Change-Id: I97dfea1b1ea7006b53eb61ac3a1f942c64dd282d
ndroid/systemui/plugins/qs/DetailAdapter.java
ndroid/systemui/plugins/qs/QS.java
ndroid/systemui/plugins/qs/QSTile.java
702e2ebf9fbfb715c1d9b716683c9e4d182b575e 03-Mar-2017 Jason Monk <jmonk@google.com> Add plugin API for individual QS tiles

This will allow prototyping of individual QS tiles and/or their
visual representation without having to write a plugin for the
entire panel. This will allow quick iteration on QS UI + dual
target tiles.

Test: Install plugin using new API
Change-Id: I05ca9d9f5a200a1dad2c3582251a36edb5cb9aba
ndroid/systemui/plugins/qs/QSFactory.java
ndroid/systemui/plugins/qs/QSIconView.java
ndroid/systemui/plugins/qs/QSTile.java
ndroid/systemui/plugins/qs/QSTileView.java
4eb01a20c40544f0ecc12f098743fd49dd588da4 02-Mar-2017 Jason Monk <jmonk@google.com> Fix NavGesture version

Test: make
Change-Id: Ib9925ac5f01d0d08ef7f37222f0e78321753b464
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
ec34da8f6f31c5ee1e543c0c7999a067487e0ce9 24-Feb-2017 Jason Monk <jmonk@google.com> Add method for plugins to reference global dependencies

The new annotation versioning system allows plugins to share common
global interfaces that can be versioned on their own. To facilitate
this add a static method for plugins to get a hold of dependencies.
To get any dependency a plugin must @Requires it so it can be version
checked.

Test: Plugin that uses the new call.
Change-Id: I8e01260f8fbc14465502d506a7aa08212795ad9b
ndroid/systemui/plugins/ActivityStarter.java
ndroid/systemui/plugins/PluginDependency.java
e4b106b1aaf0f96a5006086d2a67e2c86e41c6a1 16-Feb-2017 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Fix notification shelf icon showing on top of snooze leave behind"
d7937b348864d60472c5c8f700e748c97f596dff 15-Feb-2017 Jason Monk <jmonk@google.com> Merge "New system for versioning sysui plugins"
434180ce5155f0c405080698031f05e9eab3dd4c 13-Feb-2017 Mady Mellor <madym@google.com> Fix notification shelf icon showing on top of snooze leave behind

Also fixes an issue where the guts closed listener would always call
onHeightChanged because the notification isn’t marked as removed
until after the listener gets called.

Fixes: 34866027
Test: Manual - have one notification, snooze it
Change-Id: Ic67bdb353b8bb5df8bdaaf6d3e71ade7da05ee46
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
df44b606f357bb67e7a3b44e58f551c1c731ce42 03-Feb-2017 Geoffrey Pitsch <gpitsch@google.com> Updated Inline Notification Controls

Removed old xml resources, strings, dimens, etc
Different behavior when sent from the default channel.
Display how many notification categories are used by the app.
Group label when channel is associated with group.
Add package icon.
Fix tap-away-to-save behavior

Test: runtest systemui
Change-Id: Ib41a536a5c4e7c7747a2453eddc3b4b4b99ffa7a
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
ca2156890ae6b37bb2137581e0420f488d5c3cd8 09-Feb-2017 Jason Monk <jmonk@google.com> Fix tinting and sizing of tuner lock screen shortcuts

Test: visual
Change-Id: I13f0281d38cd4d73322e9752d9bca36be2412917
ndroid/systemui/plugins/IntentButtonProvider.java
5bec68fbea1a02d7debc2eeeaf01b9478de216e5 09-Feb-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/IntentButtonProvider.java
ndroid/systemui/plugins/OverlayPlugin.java
ndroid/systemui/plugins/Plugin.java
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
ndroid/systemui/plugins/PluginPrefs.java
ndroid/systemui/plugins/annotations/Dependencies.java
ndroid/systemui/plugins/annotations/DependsOn.java
ndroid/systemui/plugins/annotations/ProvidesInterface.java
ndroid/systemui/plugins/annotations/Requirements.java
ndroid/systemui/plugins/annotations/Requires.java
ndroid/systemui/plugins/doze/DozeProvider.java
ndroid/systemui/plugins/qs/QS.java
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
ndroid/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
421a9410b462770544c6ae9a554542fa2fe1acb1 06-Feb-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/OverlayPlugin.java
580f32d7b01cd94487b6473c47854cf01a03f53e 02-Feb-2017 Geoffrey Pitsch <gpitsch@google.com> Merge "SystemUI uses Builder API with NotificationChannel"
1dc93bc407540561ebba1cc007073ab9c71d7a4e 31-Jan-2017 Geoffrey Pitsch <gpitsch@google.com> SystemUI uses Builder API with NotificationChannel

Some changes to channels based on UX feedback.

Test: runtest systemui
Change-Id: I1b2f661ba145d6926035f992231dc3c2f8cbf844
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
de850bbcaa61c1874b803f2086443febbafd81a4 02-Feb-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/PluginManager.java
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
2a6ea9c2a1b52b0386270ec73e1e6d6a9b614a34 26-Jan-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/Plugin.java
1ab054bc37cf45cbeb54d1b73abde1cab3761392 26-Jan-2017 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Add assistant-provided snooze options to snooze menu"
754d8226c9f775fa53610c1cb38fed0d33b7ec79 26-Jan-2017 Mady Mellor <madym@google.com> Add assistant-provided snooze options to snooze menu

Test: manual via Assistant app
Change-Id: Ie77181601a20e46774d009c7ecea65e99434ebd3
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
8e032e15e6b1b6a2f44fd3d5063ee83f45d71189 25-Jan-2017 Dan Sandler <dsandler@android.com> 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
ndroid/systemui/plugins/PluginInstanceManager.java
3e6552036e341d76efabad3458039a7449adfa10 11-Jan-2017 Mady Mellor <madym@google.com> Add snooze listener so that a plugin can snooze a notification

Test: manual
Change-Id: Ieb3c0fcae6d832c3e8f5d1b983c52cf4f2ff6239
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
87d7945f0693d3ca943bfb6491d4eba3a8d7cc75 10-Jan-2017 Mady Mellor <madym@google.com> Change NotificationGuts to contain a view

NotificationGuts is now given a view to display, the notification
management controls have been moved into their own view.

NotificationGuts is provided a view to show via a MenuItem.

This allows configuration via the NotificationMenuRowProvider Plugin.

Test: manual
Change-Id: I68cb23ea2cada30cc6e930fa8c03e0aa4014dfe2
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
43c2cd1a4071e152e9f4aa9044b03a29cd5ada31 13-Dec-2016 Mady Mellor <madym@google.com> Create + implement plugin for NotificationSettingsIconRow

This will allow plugins to supply additional menu options to the
menu "behind" a notification.

This CL does not include behavior for when one of these new menu
items is tapped, this will be added in a separate CL.

Test: manual
Change-Id: I322f9f39d33b043bd23dcbede5dd15e6afa73fc1
ndroid/systemui/plugins/statusbar/NotificationMenuRowProvider.java
20ff3f9255c86a3747aa55746788d4bde1d12753 09-Jan-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/PluginFragment.java
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginListener.java
9c7844cb91b43929d0a86b1c90aa1efb37f5463a 18-Jan-2017 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/qs/QS.java
cd26af70540d8a88a61efafa0fbe63091c1f941a 11-Jan-2017 Jason Monk <jmonk@google.com> Move all time ticks to bg handlers, and post

This will hopefully avoid blaming sysui for ANRs when the system
is hosed.

Test: Manual, build, push, wait for time to change
Change-Id: I1661ac1a997ad8917b449dd175229d8b77f583c9
ndroid/systemui/plugins/PluginInstanceManager.java
59d86ed2a80364aa27541d8117ccf80551b45e20 04-Jan-2017 Jason Monk <jmonk@google.com> Add one-shot plugin support

Should have happened a while ago.

Test: runtest systemui
Change-Id: I0da4deb5c297e8030213810815a408364ec97e14
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
5e6c0ffd3e91cf0c5872de3e2d99e225ad1468f4 05-Jan-2017 Chris Wren <cwren@android.com> Create a global registry for system message IDs

Port all system UI notifications to use the registry. Retain stable
integer IDs where they exist. Assign new stable IDs where resource IDs
were previously used.

Using "message" rather than "notification" since we may eventually
want to include dialogs and toasts.

Bug: 32584866
Bug: 30995038
Test: runtest systemui
Change-Id: Iec4d7cebbd88683e339ada29a279315222699942
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
26bc8996c88cfc828afa95e22efee0fed82d8780 04-Jan-2017 Jason Monk <jmonk@google.com> Add notifications for incorrect plugin versions

Test: runtest systemui
Change-Id: Ic59a583202a8a20fbfc6fb504e6ab60ecc71ce78
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
40db029cfeb263b5b672ca687c347e58ed2ad2ae 28-Jun-2016 Jorim Jaggi <jjaggi@google.com> Light navigation bar support (1/2)

Test: Open an app that has this flag set.

Test: android.systemui.cts.LightBarTests

Bug: 29058491
Change-Id: Idaff65fdd5c59b68ae9920726c9ea50b53f96675
ndroid/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
40e978e0d13bdbd6a7e0ab06ba25f55e813fd44a 30-Nov-2016 Xiaohui Chen <xiaohuic@google.com> sysui: fix navbar button view orientation

Before navbar assumes rotation 0 means portrait and rotation 90
means landscape. This is not necessarily true, in certain devices
the natural orientation (0) is landscape. Here we removed that
assumption and make sure we use the right inflater at all times.

Bug: 32516898
Test: Locally on test device
Change-Id: I3db44dcb35d8511fb9d42b147b2bd137ff0750f7
ndroid/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
f9d13f6d7a6fda22620cd4eab74ec98cafdbd147 09-Nov-2016 Adrian Roos <roosa@google.com> Doze: Add plugin hook

Test: mmm vendor/google_experimental/users/roosa/DozePlugin/
Change-Id: I7ea55954f0c07be932e8ee7037e03b7c01cc1108
ndroid/systemui/plugins/doze/DozeProvider.java
f4e019aaad6f9da3165e8f35966299c43d5cfebf 03-Nov-2016 Jason Monk <jmonk@google.com> Plugin fragment support

Allows fragments to be easily switched over to plugins and a provides
a convenient base class for plugins to use that makes sure the layout
inflater and context point at the plugin's and not sysui's.

Bug: 32609190
Test: runtest systemui

Change-Id: I6503947e980f66ddcd826f6ca9a92b591ce0eb1e
ndroid/systemui/plugins/PluginFragment.java
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
0ceef211875515c2a7531f9baeae46339e700f3a 02-Nov-2016 Jason Monk <jmonk@google.com> Move QS to a fragment

There is now a bit too much of the view/layout logic touching the
fragment, but sort out that later and get something over to fragments
for now.

Bug: 32609190
Test: Manual
Change-Id: Icf677f4a70e6b92892a0fc27a0e673940ebc7a73
ndroid/systemui/plugins/FragmentBase.java
ndroid/systemui/plugins/qs/QS.java
ndroid/systemui/plugins/qs/QSContainer.java
fe762344f4475a3a336bb46aef2d59c1fabf32ab 13-Oct-2016 Jorim Jaggi <jjaggi@google.com> The big keyguard transition refactor (1/n)

The heart of this change are two things:
1) Instead of using the force hide mechanism to hide windows behind
Keyguard, we actually make the activities invisible in activity manager.
2) When Keyguard is going away, we change the visibilities in activity
manager and run an app transition.

At the very core we move the responsibility of hiding activities to
ActivityStack, which checks whether Keyguard is showing, and then
hides all non-show-when-locked activities. For that, we need to check
whether any window of an activity has SHOW_WHEN_LOCKED set. We
introduce a callback from WM -> AM in case these Keyguard flags have
changed.

Furthermore, we decide whether to occlude Keyguard in KeyguardController,
which just checks whether the top activity has SHOW_WHEN_LOCKED set. When
this state changes, we prepare an occlude/unocclude app transition, and
in PWM we just inform the Keyguard about the animation so SysUI can play
along this animations in a mostly synchronized manner.

Since we now use an app transition when unlocking the phone, we get
lockscreen launch animations for free - window manager automatically
waits until the activity is drawn, or directly executes the transition
if there is nothing to animate. Thus, we can remove all the infrastructure
around "waitingForActivityDrawn".

The logic to show/hide non-app windows is moved to policy, and we add the
ability to run animations on non-app windows when executing an app
transition.

Test:
1) runtest frameworks-services -c com.android.server.wm.AppTransitionTests
2) Manually test unlocking Keyguard:
2a) Without security
2b) With security
2c) With security but trusted
2d) Portrait while activity behind is in landscape
3) Test launching things from Keyguard
3a) Without security
3b) With security
3c) Launch camera without security
3d) Launch camera with security
3e) Launch camera with securtiy and trusted
3f) Launch voice affordance
4) Set no notifications on lockscreen, drag down, make sure you get
the correct animation
5) Test clicking "emergency" on bouncer
5b) Test "Emergency info" on emergency dialer
5c) Test clicking edit button on emergency info, should show pattern on
Keyguard

Bug: 32057734
Change-Id: Icada03cca74d6a612c1f988845f4d4f601087558
ndroid/systemui/plugins/qs/QSContainer.java
6a652a4442c1894da212f2ba43026b16776ecf12 26-Oct-2016 Jason Monk <jmonk@google.com> Make plugins have an application context

So things that use them don't crash.

Test: Plugin that uses getApplicationContext
Change-Id: I8673cb95544280f593479b014cd2620c2d02bf80
ndroid/systemui/plugins/PluginInstanceManager.java
d371f9828b0365638c409f30994b202398959618 26-Oct-2016 Jason Monk <jmonk@google.com> Add system property to not disable plugins on crash

Should be used only during dev to avoid having to turn crashing
plugins back on constantly.

Test: Manual
Change-Id: I2f2a461bf7aef017781ed3b61fcb216d7e1cbae9
ndroid/systemui/plugins/PluginManager.java
4f70b9cfd408a94330024c79643124cca25987b4 26-Oct-2016 Jason Monk <jmonk@google.com> Faster plugin updating from UI control

Send a broadcast back and forth to speed up the rate at which plugins
are enabled or disabled.

Also update make files to handle exclude tests better.

Test: Manual
Change-Id: Ic8f45c663c3a5e5fd4b3e9e2f79480e155845c14
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
3b75827cbf8d826e82166707054ac0ac43e6803b 20-Oct-2016 Jason Monk <jmonk@google.com> Merge "Add nav gesture plugin interface"
67e6c804055f40729d5b11c33410a6f174264091 30-Aug-2016 Jason Monk <jmonk@google.com> Add nav gesture plugin interface

Test: Manual
Change-Id: Ieb61a98cb1921358d41728bdbc7fb0c9c8fa46c1
ndroid/systemui/plugins/statusbar/phone/NavGesture.java
96cd7ddcc1837cdcdbc79dfdce20b85499da84a7 14-Oct-2016 Jason Monk <jmonk@google.com> PluginLib: Don't use foreach

For some reason it makes android studio angry when embedding the
plugin lib in it.

Test: runtest systemui
Change-Id: I8c7202846903a75ffcbad86cb31862098e8d939a
ndroid/systemui/plugins/PluginInstanceManager.java
fbf7dbf78cea11c551b5efa3dab0f9b85c013b0d 11-Oct-2016 Selim Cinek <cinek@google.com> Fixed build breakage

Build was broken due to refactoring in master
Test: build

Change-Id: Ic455c504bc1dab56da3630073245b8391614f042
ndroid/systemui/plugins/qs/QSContainer.java
e96fa00e1971230448ad69b10cf8fcd9422b14a0 30-Sep-2016 Jason Monk <jmonk@google.com> SysUI Plugin ClassLoader work

Cache ClassLoader by pkg so that Plugins can talk to each other.

Also add some filtering so that only classes from the plugins package
and sub-packages are included in plugin classloaders.

Test: Manual
Change-Id: I42aabb418168d5a5d0581b8133aa93f07cb7e977
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
ac276482552f88d8be122d3b194f0cb3fbb793e2 30-Sep-2016 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Extract plugin interface for lockscreen camera button"
19796dfbc91341781c9177b24695f7fd44cc9638 29-Sep-2016 TreeHugger Robot <treehugger-gerrit@google.com> Merge "Extract plugin interface for nav bar"
b59f46fb9b76c43c4cacc73d0b67995aba8219c5 27-Sep-2016 Jason Monk <jmonk@google.com> Extract plugin interface for lockscreen camera button

Create an interface so a plugin can replace the intent and icon of
the camera trigger on the lock screen.

Test: Manual
Change-Id: I867ffb10e3b3906ca3903f96309a3ee5ef9e19d9
ndroid/systemui/plugins/IntentButtonProvider.java
197f4db60bd2277c0878003a426c37c69efe9cca 26-Aug-2016 Jason Monk <jmonk@google.com> Extract plugin interface for nav bar

This allows plugins to create their own or override nav buttons
based on the button spec.

Test: Manual
Change-Id: I11e9a953710ed14bb9c6d9f96027852a737b58ba
ndroid/systemui/plugins/statusbar/phone/NavBarButtonProvider.java
ef0d34d32e9872e36d321e921d7da91f35be032d 23-Aug-2016 Jason Monk <jmonk@google.com> Add plugin controls to tuner

Allow plugins to be manually turned off from within the tuner. This
screen only shows itself if at some point in time a plugin has been
active on this device. Plugins can also serface settings there by
receiving the com.android.systemui.action.PLUGIN_SETTINGS action.

Test: Manual
Change-Id: Ifb043c85e383fc072c6445ae322293a6401a6f2c
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginManager.java
ndroid/systemui/plugins/PluginPrefs.java
46767b77c004a3541c614f8e21d6a871dd148e54 18-Aug-2016 Jason Monk <jmonk@google.com> Extract plugin interface for QS

Users must implement the QSContainer interface to be returned by
a ViewProvider plugin. The QSContainer must contain a
BaseStatusBarHeader and have the id of quick_settings_container.

Test: Manual
Change-Id: Ibfaa835cad20855a530e4ae142d8a2aeba4a277b
ndroid/systemui/plugins/qs/QSContainer.java
beda2ddbec2f32adeba20d562a53bb3dd83b902d 18-Aug-2016 Jason Monk <jmonk@google.com> Add PluginInflateContainer

PluginInflateContainer extends AutoReinflateContainer, except that
it also uses the plugin interface to allow the view to be swapped
out with something else.

Define an interface or abstract class as follows that includes the
version and action.

public interface MyInterface {
public static final String ACTION =
"com.android.systemui.action.PLUGIN_MYINTERFACE";

public static final int VERSION = 1;

void myImportantInterface();
}

Then put in a PluginInflateContainer to use and specify the interface
or class that will be implemented as viewType. The layout specified
will be used by default and whenever a plugin is not present.

<com.android.systemui.PluginInflateContainer
android:id="@+id/some_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout="@layout/my_default_component"
systemui:viewType="com.android.systemui.plugins.MyInterface" />

Test: Manual
Change-Id: I2ef3fa8dbe344c4635df20056182c1c0b3846fdf
ndroid/systemui/plugins/ViewProvider.java
86bc33188948e7b6beb07dbb5ddba59b5ea3c1fc 16-Aug-2016 Jason Monk <jmonk@google.com> 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
ndroid/systemui/plugins/OverlayPlugin.java
ndroid/systemui/plugins/Plugin.java
ndroid/systemui/plugins/PluginInstanceManager.java
ndroid/systemui/plugins/PluginListener.java
ndroid/systemui/plugins/PluginManager.java
ndroid/systemui/plugins/PluginUtils.java