Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +34 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.wm.shell.bubbles; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED; import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED; import static android.service.notification.NotificationListenerService.REASON_CANCEL; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; Loading @@ -42,6 +44,7 @@ import android.annotation.NonNull; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.PendingIntent; import android.content.Context; import android.content.pm.ActivityInfo; Loading Loading @@ -1092,6 +1095,24 @@ public class BubbleController { } } @VisibleForTesting public void onNotificationChannelModified(String pkg, UserHandle user, NotificationChannel channel, int modificationType) { // Only query overflow bubbles here because active bubbles will have an active notification // and channel changes we care about would result in a ranking update. List<Bubble> overflowBubbles = new ArrayList<>(mBubbleData.getOverflowBubbles()); for (int i = 0; i < overflowBubbles.size(); i++) { Bubble b = overflowBubbles.get(i); if (Objects.equals(b.getShortcutId(), channel.getConversationId()) && b.getPackageName().equals(pkg) && b.getUser().getIdentifier() == user.getIdentifier()) { if (!channel.canBubble() || channel.isDeleted()) { mBubbleData.dismissBubbleWithKey(b.getKey(), DISMISS_NO_LONGER_BUBBLE); } } } } /** * Retrieves any bubbles that are part of the notification group represented by the provided * group key. Loading Loading @@ -1669,6 +1690,19 @@ public class BubbleController { }); } @Override public void onNotificationChannelModified(String pkg, UserHandle user, NotificationChannel channel, int modificationType) { // Bubbles only cares about updates or deletions. if (modificationType == NOTIFICATION_CHANNEL_OR_GROUP_UPDATED || modificationType == NOTIFICATION_CHANNEL_OR_GROUP_DELETED) { mMainExecutor.execute(() -> { BubbleController.this.onNotificationChannelModified(pkg, user, channel, modificationType); }); } } @Override public void onStatusBarVisibilityChanged(boolean visible) { mMainExecutor.execute(() -> { Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java +20 −1 Original line number Diff line number Diff line Loading @@ -21,9 +21,12 @@ import static java.lang.annotation.ElementType.LOCAL_VARIABLE; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.app.NotificationChannel; import android.content.pm.UserInfo; import android.content.res.Configuration; import android.os.Bundle; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.RankingMap; import android.util.ArraySet; import android.util.Pair; Loading Loading @@ -191,9 +194,25 @@ public interface Bubbles { * @param entryDataByKey a map of ranking key to bubble entry and whether the entry should * bubble up */ void onRankingUpdated(RankingMap rankingMap, void onRankingUpdated( RankingMap rankingMap, HashMap<String, Pair<BubbleEntry, Boolean>> entryDataByKey); /** * Called when a notification channel is modified, in response to * {@link NotificationListenerService#onNotificationChannelModified}. * * @param pkg the package the notification channel belongs to. * @param user the user the notification channel belongs to. * @param channel the channel being modified. * @param modificationType the type of modification that occurred to the channel. */ void onNotificationChannelModified( String pkg, UserHandle user, NotificationChannel channel, int modificationType); /** * Called when the status bar has become visible or invisible (either permanently or * temporarily). Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryListener.java +18 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.notification; import android.annotation.Nullable; import android.app.NotificationChannel; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.StatusBarNotification; Loading Loading @@ -106,4 +108,20 @@ public interface NotificationEntryListener { */ default void onNotificationRankingUpdated(RankingMap rankingMap) { } /** * Called when a notification channel is modified, in response to * {@link NotificationListenerService#onNotificationChannelModified}. * * @param pkgName the package the notification channel belongs to. * @param user the user the notification channel belongs to. * @param channel the channel being modified. * @param modificationType the type of modification that occurred to the channel. */ default void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { } } packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +24 −0 Original line number Diff line number Diff line Loading @@ -21,8 +21,10 @@ import static com.android.systemui.statusbar.notification.collection.NotifCollec import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback; import android.app.Notification; import android.app.NotificationChannel; import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.Ranking; import android.service.notification.NotificationListenerService.RankingMap; Loading Loading @@ -402,6 +404,15 @@ public class NotificationEntryManager implements @Override public void onNotificationsInitialized() { } @Override public void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { notifyChannelModified(pkgName, user, channel, modificationType); } }; /** Loading Loading @@ -779,6 +790,19 @@ public class NotificationEntryManager implements } } void notifyChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { for (NotifCollectionListener listener : mNotifCollectionListeners) { listener.onNotificationChannelModified(pkgName, user, channel, modificationType); } for (NotificationEntryListener listener : mNotificationEntryListeners) { listener.onNotificationChannelModified(pkgName, user, channel, modificationType); } } private void updateRankingOfPendingNotifications(@Nullable RankingMap rankingMap) { if (rankingMap == null) { return; Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +25 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.annotation.IntDef; import android.annotation.MainThread; import android.annotation.UserIdInt; import android.app.Notification; import android.app.NotificationChannel; import android.os.Handler; import android.os.RemoteException; import android.os.Trace; Loading @@ -72,6 +73,7 @@ import com.android.systemui.statusbar.notification.collection.coalescer.Coalesce import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer; import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer.BatchableNotificationHandler; import com.android.systemui.statusbar.notification.collection.notifcollection.BindEntryEvent; import com.android.systemui.statusbar.notification.collection.notifcollection.ChannelChangedEvent; import com.android.systemui.statusbar.notification.collection.notifcollection.CleanUpEntryEvent; import com.android.systemui.statusbar.notification.collection.notifcollection.CollectionReadyForBuildListener; import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats; Loading Loading @@ -424,6 +426,16 @@ public class NotifCollection implements Dumpable { dispatchEventsAndRebuildList(); } private void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { Assert.isMainThread(); mEventQueue.add(new ChannelChangedEvent(pkgName, user, channel, modificationType)); dispatchEventsAndRebuildList(); } private void onNotificationsInitialized() { mInitializedTimestamp = mClock.uptimeMillis(); } Loading Loading @@ -834,6 +846,19 @@ public class NotifCollection implements Dumpable { NotifCollection.this.onNotificationRankingUpdate(rankingMap); } @Override public void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { NotifCollection.this.onNotificationChannelModified( pkgName, user, channel, modificationType); } @Override public void onNotificationsInitialized() { NotifCollection.this.onNotificationsInitialized(); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +34 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.wm.shell.bubbles; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_DELETED; import static android.service.notification.NotificationListenerService.NOTIFICATION_CHANNEL_OR_GROUP_UPDATED; import static android.service.notification.NotificationListenerService.REASON_CANCEL; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; Loading @@ -42,6 +44,7 @@ import android.annotation.NonNull; import android.annotation.UserIdInt; import android.app.ActivityManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.PendingIntent; import android.content.Context; import android.content.pm.ActivityInfo; Loading Loading @@ -1092,6 +1095,24 @@ public class BubbleController { } } @VisibleForTesting public void onNotificationChannelModified(String pkg, UserHandle user, NotificationChannel channel, int modificationType) { // Only query overflow bubbles here because active bubbles will have an active notification // and channel changes we care about would result in a ranking update. List<Bubble> overflowBubbles = new ArrayList<>(mBubbleData.getOverflowBubbles()); for (int i = 0; i < overflowBubbles.size(); i++) { Bubble b = overflowBubbles.get(i); if (Objects.equals(b.getShortcutId(), channel.getConversationId()) && b.getPackageName().equals(pkg) && b.getUser().getIdentifier() == user.getIdentifier()) { if (!channel.canBubble() || channel.isDeleted()) { mBubbleData.dismissBubbleWithKey(b.getKey(), DISMISS_NO_LONGER_BUBBLE); } } } } /** * Retrieves any bubbles that are part of the notification group represented by the provided * group key. Loading Loading @@ -1669,6 +1690,19 @@ public class BubbleController { }); } @Override public void onNotificationChannelModified(String pkg, UserHandle user, NotificationChannel channel, int modificationType) { // Bubbles only cares about updates or deletions. if (modificationType == NOTIFICATION_CHANNEL_OR_GROUP_UPDATED || modificationType == NOTIFICATION_CHANNEL_OR_GROUP_DELETED) { mMainExecutor.execute(() -> { BubbleController.this.onNotificationChannelModified(pkg, user, channel, modificationType); }); } } @Override public void onStatusBarVisibilityChanged(boolean visible) { mMainExecutor.execute(() -> { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubbles.java +20 −1 Original line number Diff line number Diff line Loading @@ -21,9 +21,12 @@ import static java.lang.annotation.ElementType.LOCAL_VARIABLE; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.app.NotificationChannel; import android.content.pm.UserInfo; import android.content.res.Configuration; import android.os.Bundle; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.RankingMap; import android.util.ArraySet; import android.util.Pair; Loading Loading @@ -191,9 +194,25 @@ public interface Bubbles { * @param entryDataByKey a map of ranking key to bubble entry and whether the entry should * bubble up */ void onRankingUpdated(RankingMap rankingMap, void onRankingUpdated( RankingMap rankingMap, HashMap<String, Pair<BubbleEntry, Boolean>> entryDataByKey); /** * Called when a notification channel is modified, in response to * {@link NotificationListenerService#onNotificationChannelModified}. * * @param pkg the package the notification channel belongs to. * @param user the user the notification channel belongs to. * @param channel the channel being modified. * @param modificationType the type of modification that occurred to the channel. */ void onNotificationChannelModified( String pkg, UserHandle user, NotificationChannel channel, int modificationType); /** * Called when the status bar has become visible or invisible (either permanently or * temporarily). Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryListener.java +18 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.systemui.statusbar.notification; import android.annotation.Nullable; import android.app.NotificationChannel; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.StatusBarNotification; Loading Loading @@ -106,4 +108,20 @@ public interface NotificationEntryListener { */ default void onNotificationRankingUpdated(RankingMap rankingMap) { } /** * Called when a notification channel is modified, in response to * {@link NotificationListenerService#onNotificationChannelModified}. * * @param pkgName the package the notification channel belongs to. * @param user the user the notification channel belongs to. * @param channel the channel being modified. * @param modificationType the type of modification that occurred to the channel. */ default void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { } }
packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationEntryManager.java +24 −0 Original line number Diff line number Diff line Loading @@ -21,8 +21,10 @@ import static com.android.systemui.statusbar.notification.collection.NotifCollec import static com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationCallback; import android.app.Notification; import android.app.NotificationChannel; import android.os.RemoteException; import android.os.SystemClock; import android.os.UserHandle; import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.Ranking; import android.service.notification.NotificationListenerService.RankingMap; Loading Loading @@ -402,6 +404,15 @@ public class NotificationEntryManager implements @Override public void onNotificationsInitialized() { } @Override public void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { notifyChannelModified(pkgName, user, channel, modificationType); } }; /** Loading Loading @@ -779,6 +790,19 @@ public class NotificationEntryManager implements } } void notifyChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { for (NotifCollectionListener listener : mNotifCollectionListeners) { listener.onNotificationChannelModified(pkgName, user, channel, modificationType); } for (NotificationEntryListener listener : mNotificationEntryListeners) { listener.onNotificationChannelModified(pkgName, user, channel, modificationType); } } private void updateRankingOfPendingNotifications(@Nullable RankingMap rankingMap) { if (rankingMap == null) { return; Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +25 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.annotation.IntDef; import android.annotation.MainThread; import android.annotation.UserIdInt; import android.app.Notification; import android.app.NotificationChannel; import android.os.Handler; import android.os.RemoteException; import android.os.Trace; Loading @@ -72,6 +73,7 @@ import com.android.systemui.statusbar.notification.collection.coalescer.Coalesce import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer; import com.android.systemui.statusbar.notification.collection.coalescer.GroupCoalescer.BatchableNotificationHandler; import com.android.systemui.statusbar.notification.collection.notifcollection.BindEntryEvent; import com.android.systemui.statusbar.notification.collection.notifcollection.ChannelChangedEvent; import com.android.systemui.statusbar.notification.collection.notifcollection.CleanUpEntryEvent; import com.android.systemui.statusbar.notification.collection.notifcollection.CollectionReadyForBuildListener; import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats; Loading Loading @@ -424,6 +426,16 @@ public class NotifCollection implements Dumpable { dispatchEventsAndRebuildList(); } private void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { Assert.isMainThread(); mEventQueue.add(new ChannelChangedEvent(pkgName, user, channel, modificationType)); dispatchEventsAndRebuildList(); } private void onNotificationsInitialized() { mInitializedTimestamp = mClock.uptimeMillis(); } Loading Loading @@ -834,6 +846,19 @@ public class NotifCollection implements Dumpable { NotifCollection.this.onNotificationRankingUpdate(rankingMap); } @Override public void onNotificationChannelModified( String pkgName, UserHandle user, NotificationChannel channel, int modificationType) { NotifCollection.this.onNotificationChannelModified( pkgName, user, channel, modificationType); } @Override public void onNotificationsInitialized() { NotifCollection.this.onNotificationsInitialized(); Loading