- Pass NotificationKeyData, which includes the shortcut id, instead of
just the notification key from NotificationListener
- Remove the shortcut with the same shortcut id as the first
notification, if it has one, in PopupPopulator#sortAndFilterShorcuts()
- Add some unit tests
Bug: 36571718
Change-Id: I308941b34c525b34686583476e3f82ccb8b7e2d8
- NotificationListener.getInstance() has been changed to
getInstanceIfConnected() (same behavior as before).
- When starting launcher, we send a full refresh of badges
regardless of whether the NotificationListner is connected.
If it is not connected, we pass an empty list for the
active notifications, so that all pre-existing badges are
removed.
Bug: 35221052
Change-Id: If920317f10814c010e02b5a30ce86a58ac7bc61c
There are cases where a BadgeInfo can contain a key that is later
used for a notification that should be filtered out. So instead
of simply not sending filtered notifications to PopupDataProvider,
now we explicitly send them and remove the corresponding key from
the BadgeInfo if it exists.
Bug: 35239510
Change-Id: I9532f47b1f07b44234f8707657b15b0de519b347
The Set returned by Collections.singleton() doesn't support all
operations, causing crashes in certain situations (namely, whenever
a notification is updated rather than added or removed).
Change-Id: Ie104b7f99c4a32db5f1f7e43ec3775d34dc26ce1
- When notifications update, add the NotificationInfo to the
BadgeInfo if there is only one for an app. BadgeRenderer
will use the NotificationInfo to get the icon to draw.
- When retrieving the icon from the NotificationInfo, we draw
it into a shader (similar to MaskableIconDrawable), which is
rendered by BadgeRenderer.
- For now, we only use the notification icon if it is large.
Bug: 34839959
Bug: 32410600
Bug: 33553066
Change-Id: I31851804008dd15bab75d2759441187830c3265e
We were bypassing the check in getBadgeInfoForItem(), which meant
we would return notifications based on package/user regardless of
the item type. In particular, deep shortcuts would show notifications
when long-pressed.
Bug: 34866646
Change-Id: I6575a28539313c0c5d0eea1cbf7b7726f747bcd5
This will preserve the order when iterating over the notifications to
populate the popup container.
Bug: 34735689
Change-Id: Ic390ffef140e454566ffc6ab1763950349df25ce
- Next secondary icon animates up to replace dismissed main notification
- Add padding around main notification so it always aligns with the
straight edges of the view (not the rounded corners); looks more
dismissable
- Notification view collapses as notifications are dismissed
- To mimic system notification behavior, we copy SwipeHelper,
FlingAnimationUtils, and Interpolators. We also apply elevation
to notifications and reveal a darker color beneath when dismissing.
Bug: 32410600
Change-Id: I9fbf10e73bb4996f17ef061c856efb013967d972
- Also added PopupItemView, which takes animation logic from
DeepShortcutView, and which DeepShortcutView now extends.
- Renamed ShortcutFilter to PopupPopulator, which has support
for new item types (not yet used). Also moved populating
logic (e.g. UpdateShortcutChild Runnable) to PopupPopulator.
Bug: 32410600
Change-Id: Ib6e444ac7ca99c80ba438801c26e62d9542e0ad9
- NotificationListener extends NotificationListenerService, and is
added to the manifest.
- Added PopupDataProvider, which contains logic for storing and
interacting with data that goes into the long-press popup menu
(shortcuts and notifications). A follow-up CL will rename
DeepShortcutsContainer to a generic PopupContainerWithArrow.
- If Launcher has notification access, NotificationListener will
get callbacks when notifications are posted and removed; upon
receiving these callbacks, NotificationListener passes them to
PopupDataProvider via a NotificationsChangedListener interface.
- Upon receiving the changed notifications, PopupDataProvider maps
them to the corresponding package/user and tells launcher to
update relevant icons on the workspace and all apps.
This is guarded by FeatureFlags.BADGE_ICONS.
Bug: 32410600
Change-Id: I59aeb31a7f92399c9c4b831ab551e51e13f44f5c