Dismiss any active bubbles when the channel setting is disabled
This change routes a callback to BubbleController to notify when the bubble setting of a channel is disabed. In response, any active bubbles associated with notifications in that channel will be dismissed. Test: add a bubble, disable bubble on channel settings Bug: 130441629 Change-Id: Iba20051c4eadebfda949fa7a6f73042c05358c93
This commit is contained in:
@@ -40,8 +40,6 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.app.ActivityManager.RunningTaskInfo;
|
||||
import android.app.ActivityTaskManager;
|
||||
import android.app.IActivityTaskManager;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
@@ -53,6 +51,7 @@ import android.graphics.Rect;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.provider.Settings;
|
||||
import android.service.notification.NotificationListenerService.RankingMap;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
import android.service.notification.ZenModeConfig;
|
||||
import android.util.Log;
|
||||
@@ -138,7 +137,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
||||
|
||||
private final Context mContext;
|
||||
private final NotificationEntryManager mNotificationEntryManager;
|
||||
private final IActivityTaskManager mActivityTaskManager;
|
||||
private final BubbleTaskStackListener mTaskStackListener;
|
||||
private BubbleStateChangeListener mStateChangeListener;
|
||||
private BubbleExpandListener mExpandListener;
|
||||
@@ -250,7 +248,6 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
||||
mStatusBarStateListener = new StatusBarStateListener();
|
||||
Dependency.get(StatusBarStateController.class).addCallback(mStatusBarStateListener);
|
||||
|
||||
mActivityTaskManager = ActivityTaskManager.getService();
|
||||
mTaskStackListener = new BubbleTaskStackListener();
|
||||
ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener);
|
||||
|
||||
@@ -509,6 +506,12 @@ public class BubbleController implements ConfigurationController.ConfigurationLi
|
||||
updateBubble(entry);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotificationRankingUpdated(RankingMap rankingMap) {
|
||||
// Forward to BubbleData to block any bubbles which should no longer be shown
|
||||
mBubbleData.notificationRankingUpdated(rankingMap);
|
||||
}
|
||||
};
|
||||
|
||||
@SuppressWarnings("FieldCanBeLocal")
|
||||
|
||||
@@ -22,6 +22,8 @@ import static java.util.stream.Collectors.toList;
|
||||
import android.app.Notification;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.service.notification.NotificationListenerService;
|
||||
import android.service.notification.NotificationListenerService.RankingMap;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
|
||||
@@ -114,6 +116,8 @@ public class BubbleData {
|
||||
// State tracked during an operation -- keeps track of what listener events to dispatch.
|
||||
private Update mStateChange;
|
||||
|
||||
private NotificationListenerService.Ranking mTmpRanking;
|
||||
|
||||
private TimeSource mTimeSource = System::currentTimeMillis;
|
||||
|
||||
@Nullable
|
||||
@@ -193,6 +197,31 @@ public class BubbleData {
|
||||
dispatchPendingChanges();
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when NotificationListener has received adjusted notification rank and reapplied
|
||||
* filtering and sorting. This is used to dismiss any bubbles which should no longer be shown
|
||||
* due to changes in permissions on the notification channel or the global setting.
|
||||
*
|
||||
* @param rankingMap the updated ranking map from NotificationListenerService
|
||||
*/
|
||||
public void notificationRankingUpdated(RankingMap rankingMap) {
|
||||
if (mTmpRanking == null) {
|
||||
mTmpRanking = new NotificationListenerService.Ranking();
|
||||
}
|
||||
|
||||
String[] orderedKeys = rankingMap.getOrderedKeys();
|
||||
for (int i = 0; i < orderedKeys.length; i++) {
|
||||
String key = orderedKeys[i];
|
||||
if (hasBubbleWithKey(key)) {
|
||||
rankingMap.getRanking(key, mTmpRanking);
|
||||
if (!mTmpRanking.canBubble()) {
|
||||
doRemove(key, BubbleController.DISMISS_BLOCKED);
|
||||
}
|
||||
}
|
||||
}
|
||||
dispatchPendingChanges();
|
||||
}
|
||||
|
||||
private void doAdd(Bubble bubble) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "doAdd: " + bubble);
|
||||
|
||||
@@ -732,7 +732,6 @@ public class BubbleStackView extends FrameLayout {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Changes the currently selected bubble. If the stack is already expanded, the newly selected
|
||||
* bubble will be shown immediately. This does not change the expanded state or change the
|
||||
|
||||
@@ -169,6 +169,5 @@ public class NotificationListener extends NotificationListenerWithPlugins {
|
||||
public interface NotificationSettingsListener {
|
||||
|
||||
default void onStatusBarIconsBehaviorChanged(boolean hideSilentStatusIcons) { }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
package com.android.systemui.statusbar.notification;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.service.notification.NotificationListenerService;
|
||||
import android.service.notification.NotificationListenerService.RankingMap;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
|
||||
import com.android.internal.statusbar.NotificationVisibility;
|
||||
@@ -98,4 +100,14 @@ public interface NotificationEntryListener {
|
||||
@Nullable NotificationVisibility visibility,
|
||||
boolean removedByUser) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever notification ranking changes, in response to
|
||||
* {@link NotificationListenerService#onNotificationRankingUpdate}. This is called after
|
||||
* NotificationData has processed the update and notifications have been re-sorted and filtered.
|
||||
*
|
||||
* @param rankingMap provides access to ranking information on currently active notifications
|
||||
*/
|
||||
default void onNotificationRankingUpdated(RankingMap rankingMap) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -483,6 +483,10 @@ public class NotificationEntryManager implements
|
||||
}
|
||||
|
||||
updateNotifications();
|
||||
|
||||
for (NotificationEntryListener listener : mNotificationEntryListeners) {
|
||||
listener.onNotificationRankingUpdated(rankingMap);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRankingOfPendingNotifications(
|
||||
|
||||
Reference in New Issue
Block a user